Github:还原后忽略更改(git cherrypick、git rebase)
假设我有两个分支Github:还原后忽略更改(git cherrypick、git rebase),git,github,Git,Github,假设我有两个分支A和B (A)--------(A+B)--------------(A+B+R) \ / merge \ revert / \ / \ / (B)----(B+) (R)---- 首先,我将分支B合并到A, 然后,我用GitHub的revert特性还原了合并请求 现在,当我修复分支B上的一些代码并需要再次合并到A时,几乎所有的更改(我修复的新更改除外)都被忽略。如何再次获取更改?您需要还原还
A
和B
(A)--------(A+B)--------------(A+B+R)
\ / merge \ revert /
\ / \ /
(B)----(B+) (R)----
首先,我将分支B
合并到A
,
然后,我用GitHub的revert特性还原了合并请求
现在,当我修复分支
B
上的一些代码并需要再次合并到A
时,几乎所有的更改(我修复的新更改除外)都被忽略。如何再次获取更改?您需要还原还原,即还原上一次还原创建的提交
原因是合并实际上做了两件事:它更改文件内容以反映合并,还创建了一个包含两个父级的提交,以告诉git合并了什么。恢复时,它会撤消第一件事,但不会撤消第二件事。因此,当您尝试重新执行合并时,git不知道您恢复了以前的合并,因此它会忽略之前的所有内容。阅读此处如何“重置”您的更改
一旦获得了所需的代码,就将其再次推送到存储库中。由于您进行了恢复而不是重置,因此可以简单地推送代码,而不会出现任何问题
如果您已经执行了重置
,并且希望更新远程分支,则必须强制
使用git push-f origin master
进行推送,这将导致重新基础,这也将影响您的所有同事
我怎样才能再次获得更改
git cherry pick
最简单的方法是简单地执行git cherry pick
,再次选择所需的提交回分支
# Find out the range of commits you wish to re-add to your branch.
# then use cherry-pick to add them back to the branch
git cherry-pick start..end
# If you wish to include the start commit as well add the ^
# This will result in a cherry-pick of the start commit included as well
git cherry-pick start^..end
git-rebase--on
(Carefull=rebase)
在阅读了大量答案后,urs让我们非常简单地知道为什么会发生这种情况,以及如何解决它。谢谢
# reset it to the start commit
git reset --hard start
# rebase every commit after b and transplant it onto a
git rebase --onto commit1 commit2 commit3 ... commitN