git的学习笔记

server/2024/12/22 9:51:28/
git_0">git学习使用
  • 参考了书和好多网上搜到的连接,忘了记录参考的了,太多了()
  • 捋出来一个大致的较为全面的git个人使用流程。
(一)基本操作:

image-20240422211553139

  1. 安装配置好git

  2. 创建目录 init 初始化一个仓库,初始化完成后会出现一个.git文件夹。

  3. git status 查看仓库的状态。它会显示所处的分支以及可以提交的内容。包括工作区文件以及缓冲区文件。

  4. git add – 向缓冲区提交文件。

    (1)先创建一个文件,然后add一下,这里可能会出现一个警告。

    image-20240425222004764

    这里我们了解一下LF,以及CRLF:

    CR是换行符“\r”,LF是回车符“\n”,windows用CRLF“\r\n“来结束这一行,而linux用”\n"来结束这一行。

    windows编译器会把行尾转换成“\r\n”

    解决方案:git config --global core.autocrlf input 它会在提交时把换行转化为LF,拉回本地时在转化为对应系统的换行方式。

​ (2)git add也被称为跟踪文件,可以用git add .来一次性添加所有的文件("."与add之间要有空格)

  1. git commmit – 进行文件的提交(先跟踪后才可以提交)

    (1)直接使用该命令在vim界面中写,最后用一个空行留白。这里可以直接写多行提交。

    (2)用git -m "message"进行提交,如果是多行

    git commit -m "fix:bi标题
    1、你好
    2、世界"
    

    也可以用多个-m

    (3)git commit --amend 修改信息,加上-m 可以不打开vim终端直接进行更改。

  2. git log 查看提交日志

    image-20240426152334634

    git log --graph 可以用图表的形式查看分支

  3. git diff – 查看更改add前后的区别

  • 文件被增添的部分用绿色字符,加号来标识;文件被删减的部分用红色字符减号来标识。
  • 注意:只有文件被add到缓冲区之后,才能跟工作区进行比较。
  • 可以在后面加文件名来指定查看区别,如果不加,默认输出全部的被修改的文件。
(二)分支的操作

不同的分支可以同时进行完全不同的任务,等到完成后再与master合并,分支可以使得团队高效的进行并行开发。

image-20240426154804775

  1. git branch

    • git branch + 分支名 创建分支。
    • git branch 查看本地分支
    • git branch -r 查看远程分支
    • git branch -a 查看本地和远程分支
    • git branch -d 分支名 删除本地的分支
    • git push origin --delete 远程分支名 删除远程对应的分支
    • git branch -vv 查看本地和远程分支的关系
  2. git checkout

    (1)git checkout 分支名 切换到相应的分支

    (2)git checkout -b 分支名 创建并切换到该分支

    (3)git checkout - 切换回上一个分支。

  3. 特性分支

    ​ 通常master(main)分支作为主分支,存放已经开发好的代码,在master的基础上创建其他特性分支,里面是创建中的代码。

  4. git merge --合并分支

(1)git merge 的指令有三种,–ff ,–no-ff,–ff-only

(2)-ff代表可以快速合并(fast-forward)时,采用快速合并的方式;不能快速合并时,采用–no-ff(non-fast-forward),即非快速合并。–ff-only代表只能使用快速合并,如果无法快速合并,就会拒绝该请求。

  • 注意:只有被跟踪,提交后的库发生合并时才会提示记录。需要先将新的分支跟踪,然后再合并;如果是快速合并不会有记录,只有选择–no-ff时,真正发生结点的合并,才会提示写记录。
    image-20240427110248207
    • git log --graph可以更鲜明的看出合并的方式。

image-20240427110500682

​ 将mater合并到test的最简单流程:

git checkout test
git merge master
不可简化为一句话:git merge master test(经测试,会提示已执行,但是不会真正执行)

image-20240427123247023

关于fast -forward 与non-fast-forward的区别

下图便是一次fast forward的流程,它本质上是直接移动了指针。

流程

而non-fast-forward会创建出一个新的结点,合并差异后,将其置于头部,再把master对应过去。

  1. git rm 的使用

    (1)rm:只删除工作区的文件,如果需要删除版本库文件,还需要再追踪。(不推荐使用)

    如图是一次删除3.md文件的过程:

    image-20240427121725488

    (2)git rm:删除工作区和缓存区的文件,还需要commit才能删除版本库。如果工作区文件与版本库文件不同,需要加参数-f。

  2. 使用git reset回退版本

    (1)先用git log 查询删除前的hash值

    image-20240427121929088

​ (2)利用该值进行回退image-20240427122014829

​ (3)查看状态,用git restore 恢复文件

image-20240427122108249

注:由于git log 只能查看以当前状态为终点的历史,所以可以用git reflog查看仓库的操作日志。

(三)推送至远程仓库
  1. git remote add 添加远程仓库

    git remote add origin git@github.com:xyyr-c/hello--world.git
    

    这里我们用origin作为远程仓库的标识符(名称)

  2. git push 推送到远程仓库

    (1)git push -u origin master 将本地的master推送至远程的master分支,并且建立关联,关联后直接git push 就会默认选择master。

    (2)-f 指令是强制覆盖,不要轻易使用,这里是由于原本的库里有README,与本地产生冲突,所以先强制覆盖了。

    image-20240427140231195

  3. git clone 直接获取远程的仓库,克隆出一个以仓库名作为名字的文件夹,以及相应的文件。

  4. git pull 获取远程的仓库分支

本地修改,然后推送至远端的一次过程。

在test分支:
git pull origin master //拉取主分支
vim README.md//修改文件
git add . //追踪文件
git commit -m "change README"//提交到版本库
git checkout master //切换回master分支
git merge test //合并分支
git push//推送到远程仓库

如果出现下面这个图片,说明推送成功:

image-20240427142106042

如果出现这个,不会发生文件的变化,一定有地方错了(比如忘记提交到版本库)

image-20240427142157444

  1. git rebase 删除commit的使用方法(这个也叫变基合并请求)

    由于小组修改READEME.md出现过多的无用记录,尝试删除掉这些记录。

    在这里插入图片描述

    (1)先git pull 拉取

    (2)git rebase -i hash,hash是要保留的那一次的提交的值

    (3)解决冲突就是把它冲突的地方删除掉,然后add,commit

    (4)解决冲突解决后git rebase --continue

    (5)git push到远程。

    成功删掉了一串无用且重复的README的更新消息

(1)先git pull 拉取

(2)git rebase -i hash,hash是要保留的那一次的提交的值

(3)解决冲突就是把它冲突的地方删除掉,然后add,commit

(4)解决冲突解决后git rebase --continue

(5)git push到远程。

成功删掉了一串无用且重复的README的更新消息

在这里插入图片描述


http://www.ppmy.cn/server/23968.html

相关文章

基础SQL 函数

在MySQL中内置了很多函数,我们可以通过一段程序或者代码直接调用这个函数 一、字符串函数 下面通过例子来验证这些函数 -- 字符串函数-- concat函数 select concat("hello ","world");-- lower函数 select lower("HELLO");-- upper函…

IOS 添加自动布局约束NSLayoutConstraint

自定义UICollectionViewCell,并添加自动布局约束。 #import "ViewChooseView.h"#pragma mark - Cellinterface ViewChooseViewCell : UICollectionViewCellproperty (nonatomic, strong) UILabel *showTemeLab; property (nonatomic, strong) UILabel *p…

Java ImageIo 报错 Unsupported image type

说明 在上传CMYK颜色类型的jpg图片时&#xff0c;Java的ImageIo会报错Unsupported image type 解决方法 只需要引入依赖&#xff0c;不需要修改代码&#xff0c;ImageIo会自动发现扩展 <dependency><groupId>com.twelvemonkeys.imageio</groupId><arti…

【Qt】无法创建或打开CMake项目

无法创建或打开CMake项目 没有CMake选项 原因 卸载重装了qt&#xff0c;安装时勾选了cmake&#xff0c;发现还是一样没有。。。 后面发现是插件里没有勾选上CMake。。。很无语 不是应该默认就有的吗 不懂了 解决 插件勾选重启就好了

简要说说软分叉和硬分叉。

前言 一、软分叉 二、硬分叉 三、用途 总结 前言 软分叉和硬分叉是区块链技术中的两个重要概念&#xff0c;它们通常与加密货币的网络升级有关。下面我将分别解释这两个概念&#xff0c;并提供一些例子来帮助理解。下面是方便理解软分叉和硬分叉的图 一、软分叉 软分叉是一…

如何利用 GPT 自我提高写作能力

GPT革命&#xff1a;如何用AI技术重新定义写作 介绍 在我们的数字时代&#xff0c;了解自我提高写作的必要性至关重要。 随着 GPT 的兴起&#xff0c;我们正在见证书写的变革时代。 这篇扩展文章深入探讨了 GPT 如何显着提高写作技能。 拥抱未来&#xff1a; 人工智能时代的写…

JAVASE 数组相关知识

递归 A方法调用B方法&#xff0c;我们很容易理解 递归就是:A方法调用A方法&#xff0c;即自己调用自己 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#xff0c;递归策略只需少量的程序就可…

linux下建立cpp文件,然后通过cmake编译。

main.cpp #include<iostream> using namespace std;int main(){cout<<"hello world"<<endl; return 0; }相同目录下建立 CMakeLists.txt PROJECT (HELLO) SET(SRC_LIST main.cpp) ADD_EXECUTABLE(hello ${SRC_LIST})[rootlocalhost cmake01…