我不小心将一个远程分支拉入我的本地分支,解决了合并的冲突,并再次对功能分支进行了一些不同的更改。我是否可以恢复远程分支的拉力而不会丢失我之后提交的提交或者还有什么可以解决这种情况?工作流程类似于:
git checkout my_feature
git pull origin wrong_branch
git commit -am "Resolving merge conflict"
git push
git commit -m "Some other commit to my_feature"
git commit -m "Another commit to my_feature"
git push
答案 0 :(得分:0)
有很多方法可以解决这个问题;最简单的方法可能是在合并之前重置为状态,然后挑选你所做的提交。
git reset --hard abc123^ # where abc123 is the hash of the merge
# commit. The ^ refers to the first parent of
# that commit, i.e. the commit before the
# merge happened.
git cherry-pick cde234 # where cde234 is the hash of a commit that
# you made after the merge
另一种方法是使用带有git rebase
标记的--onto
;有关详细信息,请参阅man git-rebase。
请务必备份,以防万一。
请注意,这意味着您正在更改历史记录。要将这些更改发送到遥控器,您需要强制推送; man git-push寻找--force
或--force-with-lease
。请三思而后行,并注意如果有其他人在同一个分支上工作,他们已经撤消了这些更改,他们将需要采取措施通过git reset
或git rebase
更正其历史记录。另请注意,如果其他人在您上次提取后推送了更改,则可能无意中删除了这些更改。使用--force-with-lease
代替--force
可以帮助您避免这种情况。在许多情况下,改变历史是不值得的麻烦。