2013-04-27 19 views
0

有時我最終會得到一個有很多變化的工作樹,主要是在編碼後很急 - 變化很多,可以容納20個提交,遍佈2個或3個分支。要清理工作樹,並很好地犯下的一切,我遵循這個不愉快的工作流程:從工作樹中的一大堆變化中做出乾淨的承諾

  1. 使用git add -p檢查在工作樹中的所有帥哥,沒有保存任何的指數(即回答「沒有,不要把這個「放到每一個大塊頭」)。與此同時,我嘗試將hunks進行精神分組,並採取我應該用我所看到的人體構建的提交文件(在文本文件中)。

  2. 當我將每個塊都分配給一個提交(在我的筆記中)後,我再次開始git add -p,並且回答「yes,stage this」僅適用於進入第一個提交的塊。在完成了所有的選擇並選擇了我想要的選項後,我實際上做了提交。

  3. 只要在git add -p中有剩餘的剩餘部分,重複步驟2。這意味着我會在我的筆記中提交所有提交的

這顯然是一次處理很多變化的非常愚蠢的方式。有沒有一種很好的方式,從很多變化開始,將它們整理出來,然後在他們正確的分支中完成一組好的提交?

也許有一種方法可以同時在多個索引中增量構建多個提交。或者,也許我應該將所有更改都歸入一個大提交,然後以某種方式將其分成多個?或者也許有辦法(ab)使用git stash來幫助將更改分組在一起?

+2

我不認爲,除了我基本上從不使用筆記,這個工作流程有很多錯誤。但我喜歡用'git citool'來直觀地選擇每個單獨提交中包含的文件或文件行。是的,像下面提到的'git rebase -i',有時候與'git commit --fixup'或'git commit --squash'一起幫助排序。 – 2013-04-27 20:23:48

+0

啊,最後,你可以切換到你的主題分支和'git cherry-pick'從你的「工作分支」提交相應的提交。 – 2013-04-27 20:25:49

回答

2

沒有多大的改善,但你可以開始在第一步中將文件添加到第一次提交中,即使這並不是您真正想要的第一次提交,因爲您可以通過交互式重新排序對提交進行重新排序來完成。

+0

我不知道互動底座。我想我可以先結賬到一個新的分支,以我能做的任何順序提交,用交互式分配(也許擠壓一些)重新排序,最後合併爲快進到原始分支,假裝我從不分支/壓扁/對提交進行手術。我會更多地考慮重新排序提交。這是一個改進,因爲我不必保留「潛在承諾」的清單。 – CamilB 2013-04-27 19:02:01

+0

是的,互動式底座給你很多自由。你也可以分裂提交。因此,您可能會創建一個「雜項」提交的更改,您將等待直到要分解的重新分配。 – 2013-04-27 19:13:18

0

如果你可以稍微修改您的工作流程是這樣的:

    沒有多個
  1. 您在多個文件中實現多種「功能」,但
  2. 你「特色」在一個實施文件

那麼你可以使用:

git commit -m 'feature 1' -- foo.c bar.c 
git commit -m 'feature 2' -- bing.c bang.c 
... 

這可以避免整個'大塊頭'問題 - 但它需要你改變你的工作流程。

請注意,這樣做的「git的方式」是創建一個分支每個特徵,制定各自獨立功能,所有功能合併回去。

+2

我的功能很好地劃分爲模塊,很好,層次分明。我使用「git方式」正確地進行更改,每個功能都有分支。但是有時候,如果出現問題,我不會進行任何版本控制,只是編碼而已。這樣,許多變化累積起來。它偶爾會發生。這不是一個正常的情況。通常,我出於一個原因更改文件,並導致一次提交。但是,在這些情況下,文件中會有很多變化,考慮到不同的,不相關的目的。它們適合單次提交。但他們是_many_。 – CamilB 2013-04-27 18:01:00