Learn Git branching
git 命令

1 git 命令汇总

  • git init 初始化
  • git clone 克隆
  • git add 提交修改到暂存区
  • git commit 提交暂存区的修改
  • git rebase 合并提交
  • git push 推送
  • git pull 拉取当前分支最新版本
  • git merge 合并分支
  • git checkout 切换分支
  • git branch 分支
  • git log 查看历史提交日志
  • git reset 回滚代码仓库

2 初始化

mkdir test // 创建名为 test 的目录
cd test    // 进入目录
git init   // 初始化当前目录为仓库,初始化后会自动将当前仓库设置为master
touch test.c  // 新建名为test.c的文件
git clone  // 克隆远程分支

3 提交

3.1 提交修改到暂存区

git add test.c // 提交指定文件 test.c 的修改到暂存区\

git add -u [文件路径] // 添加所有修改、已删除的文件到暂存区中
git add --update [文件路径]

git add .            // 添加所有修改到暂存区
git add -A [文件路径] // 添加所有修改、已删除、新增的文件到暂存区中,省略 文件路径 即为当前目录
git add --all [文件路径]

git add -i [文件路径]  // 查看所有修改、已删除但没有提交的文件,进入一个子命令系统
git add --interactive [文件路径]

3.2 提交暂存区的修改到本地仓库

git commit                       // 提交暂存区的修改, 调用文本编辑器输入该次提交的描述信息
git commit -m "提交的描述信息"     // 提交暂存区的修改, 添加描述信息
git commit --amend               // 修改上次提交的描述信息
git commit -a -m "提交的描述信息"  // 把所有修改、已删除的文件提交到本地仓库中
                                 // 不包括未被版本库跟踪的文件,等同于先调用了 "git add -u"

3.3 修改提交的描述信息

  1. 修改上次提交的描述信息

修改上次提交的描述信息

git commit --amend  

按 a 或者 i 或者 o 进入编辑模式,我们修改好 commit 信息后按 Esc 健退出编辑模式,然后 :wq 保存我们编辑的信息

  1. 修改某次提交的描述信息

修改某次提交的描述信息

  • git rebase -i HEAD~3 // 回退倒数第3次的状态

  • 将对应那一条中的 pick,修改为 edit,按 Esc 健退出编辑模式,然后:wq保存我们编辑的信息

  • git commit --amend

  • 按 a 或者 i 或者 o 进入编辑模式,更新提交信息,按 Esc 健退出编辑模式,然后:wq保存我们编辑的信息

  • git rebase --continue 恢复所有提交记录

  • git log 检查状态是否正确

  • Esc 快捷键隐藏控制台,不能退出编辑模式,双击终端

  • 冒号 保存不了,注意是 英文的:,不是中文的

3.4 提交规范

  • Commitizen 是一个规范提交的插件

  • 当你在使用 git commit 提交时,Commitizen 能够快速地帮你完成提交信息的补充。

  • 不仅如此,Commitizen 可以帮助你的团队规范统一的 commit message。

npm install -g commitizen // 安装

git cz // 使用
  • 配置 .cz-config.js

3.5 合并提交

  • git checkout master^
  • ^ 把这个符号加在引用名称的后面,表示让 Git 寻找指定提交记录的父提交
  • git branch -f master HEAD~3
  • git rebase
  • 第二种合并分支的方法是 git rebase。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
  • Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。
  • git rebase 分支 1 // 把当前分支的提交合并到 分支 1

将两个提交合并为一个

  1. 输入
git rebase -i HEAD~2  // 合并两个提交
  1. 出现提交信息,把第二个 pick 改为 s,也就是 squash(挤压合并)
// 出现
pick abc123 page: xxxxx
pick abc345 page: yyyyy
// 改为
pick abc123 page: xxxxx
s abc345 page: yyyyy

点击 esc、输入 :、输入 wq 退出

  1. 修改 commit

# 开头的为注释,不会被运行

// 出现
# This is a combination of 2 commits.
# This is the 1st commit message:

page: xxxxx

# This is the commit message #2:

page: yyyyy
// 改为
# This is a combination of 2 commits.
# This is the 1st commit message:

page: xxxxx、yyyyy

点击 esc、输入 :、输入 wq 退出

  1. 提交
git push -f

4 分支

git branch                        // 查看本地分支
git branch -r                     // 查看远程分支
git branch -a                     // 查看所有分支
git branch 分支名称                // 新建分支
git branch -d 分支名称             // 删除本地分支
git branch -m 分支名 新的分支名     // 修改分支名称
git push origin --delete 分支名称  // 删除远程分支
git remote prune origin           // 清理本地无效远程追踪分支,(远端分支已经删除,本地依旧能看到)
git checkout 分支名称1   // 来到 分支名称1 分支
git checkout -b 分支名称 // 从当前分支拉取出新的开发分支并命名

5 合并

5.1 合并分支

Git:合并分支----git merge 命令应用的三种情景

git merge 分支名称2      // 把 分支名称2 分支合并到当前分支里

5.1.1 快进

  • 当前分支所指向的提交是当前提交的直接上游,所以 Git 只是简单的将当前分支指针向前移动。
  • 换句话说,当你试图合并两个分支时,如果顺着一个分支走下去能够到达另一个分支,那么 Git 在合并两者的时候,只会简单的将指针向前推进,因为这种情况下的合并操作没有需要解决的分歧——这就叫做 “快进(fast-forward)”。
    在这里插入图片描述
    在这里插入图片描述

5.1.2 非快进,无冲突

两个分支分别提交修改,且无冲突,合并时自动 commit 一次
在这里插入图片描述
在这里插入图片描述

5.1.3 非快进,有冲突

两个分支分别提交修改,且有冲突,合并会暂停下来,等待解决合并产生的冲突

<<<<<<< HEAD
test master.  // ======= 的上半部分, HEAD 所指示的版本
=======
test dev.     // ======= 的下半部分, 待合并分支 (dev) 所指示的版本
>>>>>>> dev

解决冲突后手动提交

git add .
git commit -m "connection"

在这里插入图片描述
在这里插入图片描述

5.2 复制某一两个提交到其他分支

把 提交 a 从 develop 复制到 master

git checkout develop
git pull
git log                // 获取到 提交 a 的 hash
git checkout master
git cherry-pick <hash> // 

// 冲突
git cherry-pick --abort // 放弃本次复制

git add . 
git cherry-pick --continue // 修改冲突并继续

6 拉取

git pull                 // 从远程仓库获取最新版本并合并到本地
// 首先会执行 git fetch,然后执行 git merge,把获取的分支的 HEAD 合并到当前分支。

7 推送

git push -u origin 分支名称 // 将当前分支推送到origin主机的对应分支, 同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
git push                   // 推送本地提交到远程

8 日志

git log // 查看历史提交日志
  • commit xxxx (HEAD -> 分支名称)
  • Author 提交者:用户名 <邮箱>
  • Date 提交时间,+0800 是格林尼治时间,代表当前是以哪儿的时间地作为基准,这是世界时间,用它来作为基数与当前所在地时差进行计算,包括地球自转等公式。
  • 注释

wq 退出
ctrl+c 退出

9 回滚代码仓库

git reset --soft  // 头指针恢复, 已经 add 的暂存区不变, 工作空间的不变
git reset --mixed // 头指针恢复,已经 add 的暂存区丢失,工作空间的不变
git reset --hard  // 头指针恢复,已经 add 的暂存区丢失,工作空间的恢复
git reset --soft HEAD^ //回退上个版本,将上次 commit 回到暂存区

两种方法用来撤销变更 —— 一是 git reset,还有就是 git revert

10 HEAD

Git 中有一个名为 HEAD 的特殊指针,指向当前所在的本地分支(可以将 HEAD 想象为当前分支的别名)。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐