簡體   English   中英

git merge vs rebase using git svn

[英]git merge vs rebase using git svn

我很困惑,我已經閱讀了幾篇帖子,博客和文章,不知道去哪里。 我正在使用一個svn服務器repo,我用git svn下拉並繼續工作。 我目前是唯一一個開發此項目的人(即沒有上游變化)。

所以我有一個本地git主題分支vacation ,我需要合並回主人dcommit,但我不想將所有提交壓縮成一個大的。

我試着做一個git rebase -i master ,它刪除了90%的更改。

我做了嗎

git checkout master
git rebase vacation
git svn docmmit

或者a

git checkout vacation
git rebase master 
git checkout master 
git merge vacation --ff-only 
git svn docmmit?

我害怕那樣b / c我以前嘗試過的事情可以請一些人簡單解釋我應該做什么以及為什么我必須這樣做?

所以我想我想通了。

git checkout vacation
git rebase master 
[ masters's chages put behind this branches, replay every commit ]
git checkout master
git merge --ff-only vacation
git svn dcommit 
[ each change goes into svn as seperate commit ]

我沒有上游的變化,但這正是我想要的。

你應該合並或櫻桃選擇master而不是rebase。

至於為什么,這是一個有序的問題。 Rebase意味着您要更改歷史記錄,以使主題分支在歷史記錄中顯示在master之前。 如果您合並或者挑選提交,那么它將在master上添加您的提交。

所以一個完整的循環就像是

git checkout -b vacation
[make changes]
git commit -a -m "Commit message"
git checkout master
git merge vacation
git svn dcommit

從我的個人設置中更全面地解釋rebase:除了master之外,我還維護一個本地分支工作,我將其用作本地配置out項目的基礎。 它有自定義屬性文件之類的東西,我不想提交。 我需要保持與主分支同步所以我從master開始這樣做:

git svn rebase
git checkout work
git rebase master

現在git重建工作分支的歷史記錄,將所有本地配置提交放在堆棧的頭部。 它通常在主分支上重新創建分支BASEd。 如果我要發出

git merge master 

而不是重新定位然后結果到拉面眼將是相同的,但歷史將確實非常不同。 這兩個歷史記錄將被解決,可能導致合並提交,而不是基於另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM