Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

126.7. 合并分支

126.7.1. 合并分支

从 development 像 testing 分支合并

			
git checkout development
git pull
git checkout testing
git pull
git merge --no-ff "development"
git push
			
		

testing 分支向 master 分支合并

获取 testing 合并请求的分支

		
git fetch origin
git checkout -b "testing" "origin/testing"		
		
		

如果此前已经执行过,使用下面命令切换分支即可,切换后 pull 代码,看看有什么新提交

		
git checkout "testing"
git pull
		
		

切换到 master 分支

		
git fetch origin
git checkout "master"
git branch --show-current
git merge --no-ff "testing"
		
		

将合并结果推送到远程

		
git push origin "master"		
		
		

126.7.2. rebase

恢复 rebase 版本

		
git rebase
git reflog
git reset --hard 5faf0ae
git push
		
		

126.7.3. 合并分支解决冲突

案例,例如我们从 testing 分支向 master 分支合并代码出现冲突,该如何解决呢?

首先,两个分支拉取最新代码

			
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git checkout testing
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git pull		
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git checkout master
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git pull
			
		

然后合并分支,从 testing 分支向 master 合并

			
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git merge --no-ff testing
自动合并 neo-incar/src/main/java/com/neo/incar/utils/PaperlessConfig.java
冲突(内容):合并冲突于 neo-incar/src/main/java/com/neo/incar/utils/PaperlessConfig.java
自动合并失败,修正冲突然后提交修正的结果。			
			
		

出现冲突,编辑冲突文件

			
vim neo-incar/src/main/java/com/neo/incar/utils/PaperlessConfig.java
			
		

保存后重看状态

			
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。

您有尚未合并的路径。
  (解决冲突并运行 "git commit")
  (使用 "git merge --abort" 终止合并)

要提交的变更:
	修改:     neo-admin/src/main/resources/application-prod.yml
	修改:     neo-admin/src/main/resources/application-test.yml
	修改:     neo-common/src/main/java/com/neo/common/enums/IncarAttachTypeEnum.java
	修改:     neo-incar/src/main/java/com/neo/incar/service/impl/IncarAttachServiceImpl.java

未合并的路径:
  (使用 "git add <文件>..." 标记解决方案)
	双方修改:   neo-incar/src/main/java/com/neo/incar/utils/PaperlessConfig.java			
			
		

将合并的文件添加到 git

			
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git add neo-incar/src/main/java/com/neo/incar/utils/PaperlessConfig.java
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git status                                                                
位于分支 master
您的分支与上游分支 'origin/master' 一致。

所有冲突已解决但您仍处于合并中。
  (使用 "git commit" 结束合并)

要提交的变更:
	修改:     neo-admin/src/main/resources/application-prod.yml
	修改:     neo-admin/src/main/resources/application-test.yml
	修改:     neo-common/src/main/java/com/neo/common/enums/IncarAttachTypeEnum.java
	修改:     neo-incar/src/main/java/com/neo/incar/service/impl/IncarAttachServiceImpl.java
	修改:     neo-incar/src/main/java/com/neo/incar/utils/PaperlessConfig.java			
			
		

提交代码

			
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git commit -a -m '手工合并分支 testing -> master'
[master 3652bf8e] 手工合并分支 testing -> master			
			
		

推送代码

			
neo@MacBook-Pro-Neo ~/workspace/api.netkiller.cn % git push
枚举对象中: 1, 完成.
对象计数中: 100% (1/1), 完成.
写入对象中: 100% (1/1), 240 字节 | 240.00 KiB/s, 完成.
总共 1(差异 0),复用 0(差异 0),包复用 0
remote: 
remote: To create a merge request for master, visit:
remote:   http://192.168.30.5/netkiller.cn/api.netkiller.cn/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote: 
To http://192.168.30.5/netkiller.cn/api.netkiller.cn.git
   fcaefaf4..3652bf8e  master -> master
			
		

126.7.4. 终止合并

			
git merge --about
			
		

126.7.5. 合并单个文件

从 development 到 testing

			
git checkout development
git pull
checkout testing
git checkout development public/doc/UserGuide.pdf 
git status
git commit -a -m '手工合并'
git push			
			
		

从 testing 到 staging

			
git checkout staging
git pull
git checkout testing public/doc/UserGuide.pdf 
git commit -a -m '手工合并'
git push			
			
		

从 stage 到 master

			
git checkout master
git pull
git checkout staging public/doc/UserGuide.pdf 
git commit -a -m '手工合并'
git push			
			
		

126.7.6. Git 合并特定 commits 到另一个分支

用法

		
git cherry-pick [<options>] <commit-ish>...

常用options:
    --quit                退出当前的chery-pick序列
    --continue            继续当前的chery-pick序列
    --abort               取消当前的chery-pick序列,恢复当前分支
    -n, --no-commit       不自动提交
    -e, --edit            编辑提交信息		
		
		

操作步骤

		
git log --oneline -3
git switch test		

git log --oneline -3
git cherry-pick 2c0a8637a46c2f22eb703a9be7f09d005ed390ff
git push
git log --oneline -3
		
		

找到我们需要合并的 commit,我需要合并的是 2c0a8637a46c2f22eb703a9be7f09d005ed390ff

		
neo@MacBook-Pro-M2 ~/w/netkiller (master)> git log -3
commit 2c0a8637a46c2f22eb703a9be7f09d005ed390ff (HEAD -> master, origin/master)
Author: Neo Chan <netkiller@msn.com>
Date:   Tue Mar 7 13:59:26 2023 +0800

    [TASK#12773 定时任务增加日志输出和执行结果钉钉通知](https://zentao.netkiller.cn/zentao/task-view-12773.html)

commit ada2c7e1c8cd1b9f306050e6ad95a7fe1406ab41
Author: Neo Chan <netkiller@msn.com>
Date:   Mon Mar 6 18:54:26 2023 +0800

    [TASK#12744 Excel 生成错误](https://zentao.netkiller.cn/zentao/task-view-12744.html)

commit e0b828fa3941bb7d8698322a4e4b2c96aa3fe841 (origin/branch_order_gross_profit_20230302, origin/branch_dongguan_shell_20230302)
Merge: bf3e45a d00eefb
Author: Neo Chan <netkiller@msn.com>
Date:   Tue Feb 28 09:51:55 2023 +0800

    Merge branch 'grey'		
		
		

切换道目的分支

		
neo@MacBook-Pro-M2 ~/w/netkiller (master)> git switch test
Switched to branch 'test'
Your branch is up to date with 'origin/test'.
neo@MacBook-Pro-M2 ~/w/netkiller (test)> git pull
Already up to date.		
		
		

查看目的分支的日志

		
neo@MacBook-Pro-M2 ~/w/netkiller (test)> git log --oneline -3
f8bf5e1 (HEAD -> test, origin/test) [TASK#12744 Excel 生成错误](https://zentao.netkiller.cn/zentao/task-view-12744.html)
a42d15d Merge branch 'bugfix-online-20230214' into test
c8229b1 [BUG #0] 收入成本excel优化		
		
		

合并代码,然后push代码

		
neo@MacBook-Pro-M2 ~/w/netkiller (test)> git cherry-pick 2c0a8637a46c2f22eb703a9be7f09d005ed390ff
[test 235aa71] [TASK#12773 定时任务增加日志输出和执行结果钉钉通知](https://zentao.netkiller.cn/zentao/task-view-12773.html)
 Date: Tue Mar 7 13:59:26 2023 +0800
 8 files changed, 66 insertions(+), 13 deletions(-)
neo@MacBook-Pro-M2 ~/w/netkiller (test)> git push	
		
		

合并成功

		
neo@MacBook-Pro-M2 ~/w/netkiller (test)> git log --oneline -1
235aa71 (HEAD -> pre, origin/pre) [TASK#12773 定时任务增加日志输出和执行结果钉钉通知](https://zentao.netkiller.cn/zentao/task-view-12773.html)