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