我有一个主分支和一个发展分支。我的生产环境使用的是主分支,而开发分支通常是几个提前提交的。
我需要在生产中添加一个快速补丁。我通常要做的是:
在这种情况下,我意外地忘记了步骤1,这意味着我在开发分支时,我创建了我的热修复。直到我走到最后一步,我才意识到这一点,并将热补并入大师。我没有得到一个小的更改,而是从开发分支收到了一些先前的提交。
我怎么才能扭转这一切?请注意,我还没有把这些变化推到上游。
注意:还有其他关于意外合并的问题。我的问题不仅仅在于此,因为我要合并的分支是从错误的分支创建的。
发布于 2018-11-21 10:26:09
您最好的选择是简单地将master和develop上的更改重置为与远程同步。所以假设你的遥控器叫做origin
git checkout master && git reset --hard origin/master
git checkout develop && git reset --hard origin/develop
然后,您可以从master创建一个新的修补程序分支,并按如下方式对提交进行git cherry-pick:
找到提交哈希:
git log my-hot-fix
然后:
git cherry-pick MY_COMMIT_HASH
然后,您可以从步骤4 (git签出开发)开始。
你很幸运,因为你还没用力。如果您曾经陷入困境,并且希望恢复本地更改,您可能也希望查看git reflog命令。它真的很强大https://git-scm.com/docs/git-reflog
发布于 2018-11-21 10:25:50
为了让你在正确的分支上做出承诺:
# in the output of next command, spot the commit you know is good and store its hash ID, let's call it <commit_hash_OK>
git log -10 --oneline master
# in the output of next command, spot the NEW hotfix commit and store its hash ID, let's call it <commit_hash_NEW>
git log -10 --oneline my-hot-fix
# we need to reset master to its previous state
git checkout master
git reset --hard <commit_hash_OK>
# finally, put onto master only the commit you needed
git cherry-pick <commit_hash_NEW>然后你就会被设定在当地,就像往常一样推。
发布于 2018-11-21 10:25:50
如果未按下更改,则可以使用git reset命令取消提交
https://stackoverflow.com/questions/53409787
复制相似问题