git-svn 撤消未提交的合并
git-svn undo a non-dcomitted merge
在 git-svn
结帐时,我不小心将一个分支合并到 trunk
:
git checkout -b my_branch
# make and commit changes
git checkout trunk
git svn rebase
git merge my_branch
# resolve conflicts
我还没有 dcommit
但对我来说现在我已经丢失了原来的 trunk
并且有一个混乱的提交历史:
$ tig
2016-09-19 15:09 other-dev o {trunk} remote changes
2016-09-19 15:01 me o changes on my_branch
2016-09-19 14:55 other-dev o remote changes
2016-09-19 14:33 me o changes on my_branch
2016-09-19 13:58 me o changes on my_branch
2016-09-19 13:44 other-dev o remote changes
2016-09-19 11:48 me o changes
2016-09-16 07:41 other-dev o changes
我现在认为,如果我尝试 dcommit
这种状态,将会发生不好的事情。
我想 'undo' 整个合并,返回到 my_branch
,变基 trunk
并重新合并。
我想到的唯一想法是结帐 remote/trunk
、删除 local/trunk
并从 remote/trunk
重新分支 local/trunk
。
在这种情况下,是否有更简单的方法来 'undo' 合并?
我想知道为什么 tig
实际上没有显示合并。我试图重现这一点,tig
尝试按日期对提交进行排序,即使来自不同的分支也是如此。但是在分支视图中,它向我显示了如下分支:
2016-09-20 13:31 me M─┐ [master] Merge branch 'foo'
2016-09-20 13:31 me o │ f
2016-09-20 13:30 me │ o [foo] e
2016-09-20 13:29 me o │ d
2016-09-20 13:28 me o │ c
2016-09-20 13:27 me │ o b
2016-09-20 13:17 me I─┘ a
如果我用 'G'
关闭分支视图
2016-09-20 13:31 me [master] Merge branch 'foo'
2016-09-20 13:31 me f
2016-09-20 13:30 me [foo] e
2016-09-20 13:29 me d
2016-09-20 13:28 me c
2016-09-20 13:27 me b
2016-09-20 13:17 me a
与您的类似,只是没有 o
提交标记并且显示了合并提交。
除此之外,只需使用 git reflog master
查看 master
的 reflog 即可在合并之前找到 master 提交的 SHA,然后使用 git reset --hard <good commit-ish>
将 master 重置为该提交在 master
签出时,或者 git branch -f master <good commit-ish>
如果你不在 master 上并且不想现在签出它。
在 git-svn
结帐时,我不小心将一个分支合并到 trunk
:
git checkout -b my_branch
# make and commit changes
git checkout trunk
git svn rebase
git merge my_branch
# resolve conflicts
我还没有 dcommit
但对我来说现在我已经丢失了原来的 trunk
并且有一个混乱的提交历史:
$ tig
2016-09-19 15:09 other-dev o {trunk} remote changes
2016-09-19 15:01 me o changes on my_branch
2016-09-19 14:55 other-dev o remote changes
2016-09-19 14:33 me o changes on my_branch
2016-09-19 13:58 me o changes on my_branch
2016-09-19 13:44 other-dev o remote changes
2016-09-19 11:48 me o changes
2016-09-16 07:41 other-dev o changes
我现在认为,如果我尝试 dcommit
这种状态,将会发生不好的事情。
我想 'undo' 整个合并,返回到 my_branch
,变基 trunk
并重新合并。
我想到的唯一想法是结帐 remote/trunk
、删除 local/trunk
并从 remote/trunk
重新分支 local/trunk
。
在这种情况下,是否有更简单的方法来 'undo' 合并?
我想知道为什么 tig
实际上没有显示合并。我试图重现这一点,tig
尝试按日期对提交进行排序,即使来自不同的分支也是如此。但是在分支视图中,它向我显示了如下分支:
2016-09-20 13:31 me M─┐ [master] Merge branch 'foo'
2016-09-20 13:31 me o │ f
2016-09-20 13:30 me │ o [foo] e
2016-09-20 13:29 me o │ d
2016-09-20 13:28 me o │ c
2016-09-20 13:27 me │ o b
2016-09-20 13:17 me I─┘ a
如果我用 'G'
关闭分支视图2016-09-20 13:31 me [master] Merge branch 'foo'
2016-09-20 13:31 me f
2016-09-20 13:30 me [foo] e
2016-09-20 13:29 me d
2016-09-20 13:28 me c
2016-09-20 13:27 me b
2016-09-20 13:17 me a
与您的类似,只是没有 o
提交标记并且显示了合并提交。
除此之外,只需使用 git reflog master
查看 master
的 reflog 即可在合并之前找到 master 提交的 SHA,然后使用 git reset --hard <good commit-ish>
将 master 重置为该提交在 master
签出时,或者 git branch -f master <good commit-ish>
如果你不在 master 上并且不想现在签出它。