知乎专栏 |
从 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"
案例,例如我们从 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
从 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
用法
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)