【问题标题】:Isolate git changes from one branch to another by specific commit通过特定提交将 git 更改从一个分支隔离到另一个分支
【发布时间】:2019-02-14 20:01:20
【问题描述】:

我一直在四处寻找不同的选择,试图找到答案,但我正在为如何完成这个功能而苦苦挣扎。我们有大量变更,有时某些变更在周期内没有获得批准,而其他变更则获得批准,我们的团队希望转向敏捷方法。

我们的 git 存储库中有这个当前设置:

Master  - C1           
 \         \ 
  \      Release1 - C1
   \        
Develop - C1 - C2 - C3 - C4 - C5 - C6

我们在某个时间点从 Master 创建了 Develop 以及第一个 Release,所有这些都处于相同的提交级别。然后,Develop 会获得持续的提交流,其中一些通过了测试,而另一些则没有。我们如何单独将特定提交从 Develop 移动到 Release1?

类似这样的:

Master  - C1 -   -    -    -    -  Master
 \         \                        /
  \      Release1 - C1 - C3 - C5 - C2 
   \        
Develop - C1 - C2 - C3 - C4 - C5 - C6 - C7 - C8 - C9

例如,我在 C3 上尝试过樱桃挑选,但它带来了 C2。任何帮助将不胜感激。

编辑:这里的 cmets 是步骤和输出。我试图选择一两个提交并总是得到相同的结果。我做错了吗?

 ~/git/cherrypick_test (Develop)
$ git log
commit 9d296fb748731c9252b55bcb52a14d2638112bd1 (HEAD -> Develop, origin/Develop)
         Change3 123
commit 3e01cdf9d11043fd58e4684742a3f69ee350b037
         Change 125
commit 62ab4c96a767113d22fb2f78d20b6d72587fff86
         Change 124
commit c28ce2ea753611f5f5b559f4f6598b2584f3e2f6
         Change2 123
commit 7763c4ef9c01b7b7c5189d9b9fa2cedaeff62d68
         Change 123
commit 2a60e37761ed3de745e760d5a472fd593c4c9b26 (origin/release/Sprint1, release/Sprint1)

$ git checkout release/Sprint1
Switched to a new branch 'release/Sprint1'
Branch 'release/Sprint1' set up to track remote branch 'release/Sprint1' from 'origin'.

~/git/cherrypick_test (release/Sprint1)
$ git log
commit 2a60e37761ed3de745e760d5a472fd593c4c9b26 (HEAD -> release/Sprint1, origin/release/Sprint1)

~/git/cherrypick_test (release/Sprint1)
$ git cherry-pick 3e01cdf9d11043fd58e4684742a3f69ee350b037 62ab4c96a767113d22fb2f78d20b6d72587fff86
error: could not apply 3e01cdf9d... 
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

我不明白为什么会有冲突,因为这只是将代码添加到单个文件中进行演示,但是从 SourceTree 打开文件后,我在合并冲突中看到以下内容:

<<<<<<< HEAD
=======
//adding change 123
//second change 123

//change 124

//change 125

>>>>>>> 3e01cdf9d... SG7-125 test cherry picking function

在这个例子中,我应该只得到 124 和 125,但两个 123 都伴随着它们。

【问题讨论】:

  • 您需要发布实际的命令和输出。如果你真的做了git cherry-pick C3,它就不会带来C2。
  • 添加示例显示。

标签: git repository rebase cherry-pick


【解决方案1】:

这样做

git checkout Release1
git cherry-pick C1 C3 C5 C2

然后做一个简单的合并。

【讨论】:

  • 这是我在上面尝试过的,但是当我尝试 C5 时仍然得到 C2/C4。在这种情况下,更改可能会一次发布一个,并且可能会出现问题,这是我正在努力的地方。
猜你喜欢
  • 2021-04-10
  • 2016-06-04
  • 2011-09-16
  • 1970-01-01
  • 2020-06-03
  • 2016-09-15
  • 2013-06-08
  • 1970-01-01
  • 2018-12-19
相关资源
最近更新 更多