同江佳木斯网站制作,找做金融的网站有哪些,保网官网,seo推广薪资Git(8)之分支间同步特定提交
Author#xff1a;Once Day Date#xff1a;2024年4月7日
漫漫长路有人对你微笑过嘛…
全系列文章可查看专栏: Git使用记录_Once_day的博客-CSDN博客 文章目录 Git(8)之分支间同步特定提交1. 分支间同步提交2. cherry-pick同步分支间的特定提交…Git(8)之分支间同步特定提交
AuthorOnce Day Date2024年4月7日
漫漫长路有人对你微笑过嘛…
全系列文章可查看专栏: Git使用记录_Once_day的博客-CSDN博客 文章目录 Git(8)之分支间同步特定提交1. 分支间同步提交2. cherry-pick同步分支间的特定提交3. 实例展示 1. 分支间同步提交
在使用Git这个强大的分布式版本控制系统时经常会遇到需要将一个分支的提交同步到另一个分支的情况。
第一种情况是同步分支上所有改动到另外一个分支非常常见这里只是简单介绍一下。 最直接的方法是使用git merge命令。例如想要把一个分支比如feature上的改动合并到另一个分支比如master时可以先切换到目标分支master然后执行git merge feature。这样feature分支上的所有提交就会被合并到master上。如果遇到冲突Git会提示需要手动解决。 另外一种方法是使用git rebase命令。Rebase的意思是变基简单来说就是把一个分支上的修改放到另一分支的最前面。这样做的好处是能够创建一个更干净、线性的提交历史。使用方法是先切换到要同步的分支比如feature然后执行git rebase master。这样feature分支就会把master分支上新的提交应用到feature分之前。在变基的过程中如果发生冲突也需要手动解决。
第二种情况是同步某一个特定的提交例如需要把develop版本分支上的auto-test测试代码提交同步到temp版本分支上。
最常见的方式是手动把auto-test代码全部复制一遍然后再提交新的commit到temp版本分支上这个方式效率较低需要人工同步每个改动也容易产生遗漏。通过git stash命令暂存提交然后在temp版本分支应用修改(apply stash)效率较好但是需要提前保存改动信息而且commit信息也还是需要在输入一遍。使用git cherry-pick命令选择一个或几个提交然后在temp分支上重新应用。这个方式效率最高代码改动和提交信息都是直接照搬原有develop分支不需要额外输入信息。
在实际工作中上述的几种方法都可以使用。不管是全自动化的同步还是手动同步最好都人工再审核一遍毕竟一旦出了问题耗费时间和精力远比人工检查要多。
2. cherry-pick同步分支间的特定提交
git cherry-pick是一个非常实用的Git命令它允许选择性地将某个分支上的单个提交或一系列提交应用到当前分支上。
这个命令的名称来源于“挑选樱桃”的比喻意味着可以从众多提交中精选出需要的那几个。
git cherry-pick命令的基本格式如下其中commit-hash是希望应用的提交的哈希值:
# 通过git log或者其他手段来获取commit iD
git cherry-pick commit-hash如果这个提交能够顺利地应用到当前分支上而没有任何冲突那么可以看到一个新的提交出现在当前分支的提交历史中。这个新提交的内容与通过cherry-pick命令选取的原始提交的内容相同但是它会有一个新的提交哈希值。
如果在应用某个提交时遇到了冲突Git会停止cherry-pick操作并需要手动编辑冲突的文件最后使用git add命令来标记冲突已经解决。在解决完所有冲突并更新索引后可以通过git cherry-pick --continue来继续应用提交。
如果决定不应用当前的cherry-pick操作可以使用git cherry-pick --abort来取消。
git cherry-pick还支持一些有用的选项例如
-n 或 --no-commit应用更改但不自动创建提交允许手动合并多个提交的更改并最终作成一个提交。-e 或 --edit在提交时打开编辑器让你可以编辑提交信息。-x在提交信息中包含一个说明指出提交是通过cherry-pick从哪个提交哈希值应用过来的。
git cherry-pick常用于修复bug当在测试分支上发现了一个bug并在该分支上修复后可以通过cherry-pick将修复的提交应用到生产分支上。
3. 实例展示
首先确认需要同步的源分支和目标分支。
ubuntu-tdata:$ git branch -adevelop
* masterremotes/origin/HEAD - origin/masterremotes/origin/master从上述命令中有四个分支两个远程分支两个本地分支。我们主要从develop分支同步最新提交到master分支上。
在master分支上通过git log获取提交commit(或者其他手段)如下所示
ubuntu-tdata:$ git log develop
commit bc75713f30a34e292f59f39d439c08f7ea6b21ed (develop)
Author: Once Day oncedayqq.com
Date: Sun Apr 7 22:55:59 2024 0800save filescommit d71a12145f1ccd8d8f93f1cc937b70fa22d3ce27 (HEAD - master, origin/master, origin/HEAD)
Author: Once Day oncedayqq.com
Date: Sat Mar 9 21:50:05 2024 0800save some
......第一个提交就是需要同步的提交复制其commit值然后使用git cherry-pick命令同步。
ubuntu-tdata:$ git cherry-pick bc75713f30a34e292f59f39d439c08f7ea6b21ed
[master 69dc035] save filesDate: Sun Apr 7 22:55:59 2024 08009 files changed, 405 insertions(), 29 deletions(-)create mode 100644 cs-test/alias-test.ccreate mode 100644 cs-test/hash-test.ccreate mode 100644 perf-ana/git-sync-simple.shcreate mode 100755 perf-ana/git-sync.shcreate mode 100644 perf-ana/objdump-func.shubuntu-tdata:$ git log
commit 69dc035383d742c95ea2814972191d82ba9a91a3 (HEAD - master)
Author: Once Day oncedayqq.com
Date: Sun Apr 7 22:55:59 2024 0800save files一般情况下都是非常顺利直接同步如果存在冲突手动merge即可。