2012-11-18 23 views
27

我正在尋找一種方法來'隱藏'對Git中的幾個文件所做的微小更改,以便它們不會在git狀態中顯示,直到對這些文件做出不同更改文件。Git - 暫時忽略對文件的微小更改

例如:我有一個java文件,其中唯一的改變是刪除一個未使用的導入(一個貢獻者在提交之前忘記運行一個組織導入)。現在我已經刪除了該導入,並且該變化(顯然)在git中顯示。由於我沒有對該文件做任何其他更改,因此我不太願意將該文件作爲另一個(不相關)更改的一部分提交或單獨提交此更改。當然,我可以恢復更改,並且只在需要對該文件進行更改時才應用它,但是我可能會「冒險」而忘記它。

是否存在執行此任務的命令?它會有點像假設不變的命令,但不是永久性的。

如果沒有這樣的命令可用,解決這個問題的正確方法是什麼?

在此先感謝。

+1

你爲什麼不乾脆創建一個「平凡的修復」分支? – Mat

+0

@Mat這樣一個分支的收益是什麼?我仍然不得不將它合併到主要的瑣碎更改中才顯示出來。 – Zelgadis

+0

你會保留所有微不足道的變化,並在開發週期中將它們合併。這樣他們就不會干涉「正確」的提交,但它們也不會被遺忘。 – Mat

回答

36

在我的使用情況(使用我的個人計算機上的編輯過的配置文件開發,與不變配置另一臺機器上運行),這是對我的解決方案:

開始忽略對文件的更改:

git update-index --assume-unchanged path/to/file 

保持跟蹤再次:

git update-index --no-assume-unchanged path/to/file 
+2

哈,謝謝你的複製粘貼示例。我經常忘記它們的確切語法,因爲它不經常使用它:p –

+0

這是最好的解決方案。最初發佈於2009年2月18日,資料來源:http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html –

1

有多種方法[雖然可能不乾淨,整潔,就需要您注意]

  1. 在關注添加文件.gitignore在你的回購協議,這樣它不露面提交。當您準備好提交文件時,請小心將其從.gitignore中刪除。
  2. 確保在提交其餘更改時不會「暫存」文件。你可能想寫一個包裝,通過git這將確保像git commit -agit add .這樣的命令運行除了所述的文件之外的所有文件。另一種方法是使用git guigit citool,您可以在視覺上確保您的文件不在「分段」區域,因此永遠不會被提交。
  3. 另一種方法是提交所有「可提交」的更改,然後執行您唯一的工作文件。稍後當您準備更改文件時,您可以git stash pop並繼續工作並提交。

希望幫助:)

+1

不幸的是,第一種解決方案不起作用,因爲文件已經被跟蹤。 2和3的組合是我現在使用的,但我想要更自動的東西。無論如何感謝您的答案! – Zelgadis

+0

不幸的是,'git'還不能讀取開發人員的想法來確定一個變化是否重要(並且應該被提交)還是不需要(保留)。最乾淨的選項是(a)「微小修補」的單獨分支,定期重新設置併合併到某些點; (b)在提交消息中將變化標記爲「微不足道」。恕我直言(b)是可取的,因爲它避免了沒有人測試過的歪斜和版本。 – vonbrand

3

保持你的變化是不是在一個單獨的分支準備。 git rebase這個分支必要時在主歷史的新變化之上。

無論是在進步發展,暫時的東西,連東西,是永遠不會被包含在主體工程的歷史 - 同樣的過程同樣適用。

如果/當分支的變化準備好被包括在主歷史中時;將其合併。如果不是,請將它們保留在單獨的分支中並繼續重新綁定。

(邊注:git merge --no-ff可能是使用的創建即使快進合併是可能的合併提交 - 這取決於你的項目的規則,這可能是最好)

+0

這就是我發現的最適合我的解決方案。謝謝! – Zelgadis

+0

不客氣!我很高興我能提供幫助。 – jsageryd

1

就是不」加上微不足道的變化。

在提交之前仔細檢查您添加的內容是一種很好的做法。

你甚至可以忽略文件中的一些變化,同時添加其他使用

git add -p. 

如果使用gitx (R)這是更容易。