2011-05-23 36 views
0

我想做的是將2次提交之間的更改合併到當前沙箱中作爲本地更改。這可能並且容易嗎?如何強制git合併更改爲「本地修改」用於審查目的?

我知道你可以使用差異,但不像審查本地更改那麼簡單。通過本地更改,您可以在審閱過程中輕鬆恢復/修改/添加更改。我得到了我想要的東西最接近的是這樣的:

1結賬我的分支產生

2 chreate一個新的臨時黨支部(只是爲了安全)

3創建起點和終點之間的補丁之前提交像

git diff f9802a30b589503cd61e..4f6ee3fb127d958b5621 --patience --ignore-space-at-eol > diff.txt 

4分支的應用補丁的本地沙箱(仍處於臨時黨支部)

git apply diff.txt 

雖然這種方法存在問題。 (A)它非常緩慢而痛苦。 (B)即時獲得大量空白警告。 (C)可能這不是這樣做的方式;)

有沒有更好的方法來做到這一點?

+0

你能畫出回購協議當前狀態的ascii-graph,並解釋你想要的方式嗎? – fbstj 2011-05-23 08:49:41

回答

3

既然你創建了一個臨時黨支部(我開始在這之前git的狀態是乾淨,以免冒失去任何本地更改假設。)

無論如何,你爲什麼不只需使用git merge othercommit在其他提交合並?您的工作樹和索引將隨合併結果一起更新 - 當然,它會創建一個新的提交,但如果您不喜歡該提交,則只需簽出您的原始分支即可取回。如果您想進行其他更改以修復合併結果,那麼應該確實在合併的頂部進行額外的提交。

或者,您甚至不需要創建臨時分支 - 您始終可以使用git reset --hard(小心!)將分支移回到原來的位置。 (B)您可以通過--whitespace=nowarngit apply停止這些警告,或通過更改配置選項core.whitespace來更改被認爲是空白的錯誤。


以上是我會建議,但回答你問問題的確切形式,你可以嘗試以下方法:

你可以做一個合併,而不使用提交的結果:

git merge --no-commit othercommit 

...這將與合併的結果更新你的工作副本和索引(臨時區域),但不會創建一個提交。但是,這有點冒險 - 如果您繼續進行父母雙方都沒有的進一步變更,然後進行確認,那麼您將創建an evil merge,這會在您檢查歷史記錄時導致各種問題後來。

同樣,如果你只是想看到一個合併的效果將是什麼,你可以這樣做:

git merge --squash othercommit 

...這將您的工作樹更改爲合併的結果,和舞臺所有這些更改,但不會創建提交。但是,與--no-commit不同,如果您確實接着提交,那麼不會將othercommit記錄爲新提交的父項。

相關問題