AI编程生活评测

git branch分支的相关操作

编程笔记 / 2019-04-11 / 4 min
这里记录一下常见的Git针对相关的操作,更多的分支操作和原理分析请看这里:Git 分支

基本操作

查看当前所有分支 * 表示当前检出分支
git branch -a
查看远端分支
git remote show origin
每个分支的最后一次提交
git branch -v
查看已经合并到当前分支的分支,可以安全删除不带 * 的分支
git branch --merged
尚未合并到当前分支的分支,无法删除
git branch --no-merged
创建分支test
git branch test
切换到test分支
git checkout test
创建分支test并切换过去
git checkout -b test
删除已合并的分支
git branch -d test
强制删除未合并的分支
git branch -D test
删除远程分支
git push origin --delete test
删除本地分支存在但远程分支已经不存在的分支
git remote prune origin
更新远程分支列表
git remote update origin --prune
创建并切换到分支serverfix,serverfix跟踪分支origin/serverfix
git checkout -b serverfix origin/serverfix
显示所有分支跟踪详情
git branch -vv
将当前本地分支跟踪指定远程分支
git branch --set-upstream-to=origin/test

高阶用法示例

将本次修改提交到新建分支

有时候出现我在某个分支上做了修改,但是这些修改需要一个新分支来存放。 需要这么操作: 在当前修改的分支上新建分支并切换过去,commit,push之后,修改就被提交到了新分支,并且当前分支不会保留在这些修改。 代码:
git status

# 正在修改的分支上新建分支dev并切换过去
git checkout -b dev

git add .

git commit -m '将修改存到新建分支dev'

# 由于远程没有dev分支,需要指定push分支,远程仓库会创建dev分支
git push origin dev

合并分支流程:

# 列出远程追踪及本地分支,* 表示当前分支
[root@localhost]# git branch -a
* interview
  master
  remotes/origin/interview
  remotes/origin/master
# 切换到需要合并的分支
[root@localhost]# git checkout master
切换到分支 'master'
您的分支落后 'origin/master' 共 1 个提交,并且可以快进。
  (使用 "git pull" 来更新您的本地分支)
# 更新到最新版本
[root@localhost]# git pull
更新 1aca3c3..83ffca8
Fast-forward
 models/Call.php             |  7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)
# 切换到当前分支
[root@localhost]# git checkout interview      
切换到分支 'interview'
您的分支领先 'origin/interview' 共 134 个提交。
  (使用 "git push" 来发布您的本地提交)
# 合并分支
[root@localhost]# git merge master
Merge made by the 'recursive' strategy.
 models/Call.php             |  7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)
至此, master 分支合并到 interview 分支完成。

将一个分支上的某次提交合并到另一个分支

这个场景很常见,比如正在开发分支 dev 上开发一个模块,目前还不能上线,但是突然提出要将模块中已经写完的一个小部分提交到 master 上去,已提前记录数据;我们就需要将这部分代码从 dev 中找出来,然后把这些提交合并到 master 上去。
# 查看当前dev分支提交记录
git log
commit cafef4004fc466db01093eb6f105beab01de4eba
Author: hasone <52722222@qq.com>
Date:   Fri Mar 6 21:40:29 2020 +0800
    新功能,处理数据

commit d55e4f89a8346e587181d301358531a7962fa6bf
Author: hasone <52722222@qq.com>
Date:   Fri Mar 6 17:43:24 2020 +0800
    新功能,自动分配

commit effec5046c2a39b67ba387f538d9f58bc17b5692
Author: xinxin <kaka888999@gmail.com>
Date:   Fri Mar 6 17:39:24 2020 +0800
    回调记录数据

# 复制需要的代码commitId,比如我需要回调记录数据这次提交
git checkout master

# 合并代码
git cherry-pick effec5046c2a39b67ba387f538d9f58bc17b5692
[master aef364f] 回调记录数据
 Date: Mon Mar 9 20:17:18 2020 +0800
 2 files changed, 41 insertions(+), 16 deletions(-)

# 推送代码
git push
这其中可能会出现冲突,需要跟正常合并一样解决冲突然后再提交。 参考: Git 分支 – 分支管理 Git详解之分支使用