簡體   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