几周前,我将一些东西推到了 master 上,但最终需要恢复。
现在我已经进行了更改,并准备好将它们重新推向 master。我的正常工作流程是 check out master,从 origin pull 出最新版本, check out 功能分支, merge 来自 master 的新更改,然后向 master 提交 PR。
当我尝试 merge 来自 master 的更改时,还原提交删除了我需要保留的功能分支中的很多内容。
处理这个问题的最佳方法是什么?
最佳答案
那么您的意思是原点主控已恢复,但您需要将恢复的更改添加回去?喜欢
[branch feature/A-Fixed]
o commit A-fixed
[branch master] |
commit revert A * |
| /
|/
commit A o
|
.
在这种情况下,将 master merge 到您的功能分支意味着在上图中标有 *
的还原提交将添加到您的更改中,因此这就是从您的分支中删除内容的原因。
因此您可以做的是从还原提交开始创建一个新分支,然后再次还原还原 (un-revert<),将此分支 merge 到您的功能分支,然后将 master merge 到您的分支。
git checkout <reverted> -b revert-branch
git revert <reverted>
git checkout feature/fixed-A
git merge revert-branch # rebase would also work
git branch -D revert-branch
git merge master
#... continue with your normal workflow
这样,当 merge master 时,还原已经在您的功能分支中,但被 unrevert 提交取消,因此还原不会添加到您的更改中。
[branch feature/A-Fixed]
o merge revert-branch
/|
/ | [previous state of branch feature/A-Fixed]
| o commit A-fixed
| |
o commit revert revert A
[branch master] | |
new commit * | |
| / /
|/ /
commit revert A o /
| /
|/
commit A o
|
.
您可以看到,现在还原提交已经在您的功能分支上,因此 merge master 可能会添加一些上面标记为 *
的其他提交,但不会添加还原。
一般情况下,master 上的某些东西已经被还原,而你想处理它并再次推送它,你应该从还原提交开始,然后先取消还原 (git revert revert-commit)。
关于git - master 中的还原提交,如何在没有还原效果的情况下 pull 下 master?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51046214/