繁体   English   中英

如何修复'git-svn'分支和'origin / master'分歧

[英]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

为简单起见,我修改了上面的提交消息,但是请注意, masterorigin/master最后两个不同的提交实际上包含相同的更改。 我怎样才能解决这个问题?

我已经尝试了各种方法,例如git rebase origin/mastergit reset --hard origin/master ,但是我得到的只是masterorigin/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(起源)。

情况1的解决方案

如果您在这里:

* 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分支,并且它将再次同步。

情况2的解决方案

如果你在这里

* 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM