[英]master branch and 'origin/master' have diverged, how to 'undiverge' branches'?
[英]How to fix 'git-svn' branch and 'origin/master' have diverged
在工作中,我使用git svn
将Git用作SVN的客户端。 另外,我将Git存储库推送到远程。 SVN存储库供我办公室中的一组人员使用,而Git远程存储库目前仅由我使用。 这是从SVN迁移到Git的所有过程。
我的工作流程包括将更改提交到本地Git存储库,然后由其他人通过SVN更改更新我的工作副本,提交到SVN,最后推送到Git远程。 像这样:
$ git commit
$ git svn rebase
$ git svn dcommit
$ git push origin
这一直没有问题。
但是今天,由于错误,我调换了最后两个步骤,所以我git svn dcommit
,然后做了git svn dcommit
。 这导致origin/master
节点与master
节点脱离,但更重要的是与git-svn
远程节点脱离。 现在, git log
如下所示:
$ git log --oneline --decorate --graph --all -5
* 613ffa60 (HEAD -> master, git-svn) Fix typo on message displayed to user
| * db2e67ef (origin/master) Fix typo on message displayed to user
|/
* 24d8fab9 Commit C
* c0c1b598 Commit B
* e31c07c0 Commit A
为简单起见,我修改了上面的提交消息,但是请注意, master
和origin/master
最后两个不同的提交实际上包含相同的更改。 我怎样才能解决这个问题?
我已经尝试了各种方法,例如git rebase origin/master
或git reset --hard origin/master
,但是我得到的只是master
和origin/master
指向同一提交。 像这样:
$ git log --oneline --decorate --graph --all -5
* 613ffa60 (git-svn) Fix typo on message displayed to user
| * db2e67ef (HEAD -> master, origin/master) Fix typo on message displayed to user
|/
* 24d8fab9 Commit C
* c0c1b598 Commit B
* e31c07c0 Commit A
如果您不使用git-svn
,那将是解决方案,但是如何使git-svn
也指向同一提交? 在所有内容都合并的情况下,我需要额外提交吗?
如前所述,目前我是Git遥控器的唯一用户,因此我不介意在必要时在遥控器中重写历史记录。
就像一个背景一样:您处于这种情况的原因是git svn dcommit
更改了本地git commit,以将相应的SVN版本号添加到git commit消息中。
解决问题的方法非常简单。 您需要确保您的git master与SVN处于相同的提交,然后将其强制推入您的git repo(起源)。
如果您在这里:
* 613ffa60 (HEAD -> master, git-svn) Fix typo on message displayed to user
| * db2e67ef (origin/master) Fix typo on message displayed to user
|/
* 24d8fab9 Commit C
* c0c1b598 Commit B
* e31c07c0 Commit A
您只需要执行git push --force
,它将用您当前的本地分支覆盖origin/master
分支,并且它将再次同步。
如果你在这里
* 613ffa60 (git-svn) Fix typo on message displayed to user
| * db2e67ef (HEAD -> master, origin/master) Fix typo on message displayed to user
|/
* 24d8fab9 Commit C
* c0c1b598 Commit B
* e31c07c0 Commit A
执行以下操作,将本地master
带回SVN提交,然后将其强制推到远程Git存储库:
$ git checkout master && git reset --hard git-svn && git push --force
请注意,由于您是远程Git存储库的唯一用户,因此git push --force
没问题。 如果其他人也使用它,那么他们将与各自的master
不同步,这将需要更多工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.