![](/img/trans.png)
[英]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.