2016-11-24 117 views
2

什麼是真的git staging areaGit:暫存區工作流程

我習慣於僅與unstaged files一起工作,當我認爲一切正常時,我將它們放置以構建提交。不過,我想這是出於某種原因,但我無法獲得它可以幫助我的工作流程。

任何想法?

+0

這個問題經常被問到,並且有很多可能的答案(請參閱https://www.google.com/#q=git+why+staging+area)。一般來說,版本控制並不需要臨時區域 - 例如Mercurial,它與Git非常相似,沒有一個 - 在這種情況下,部分只是Git泄漏的實現機制,Git經常會這樣做,部分原因是泄漏的實施機制提供了人們發現非常有用的能力。 – torek

回答

2

Git階段的一個有用的目的是它可以作爲一個可以容納你打算提交的工作的地方,讓工作目錄仍然可用。這可以通過一個例子來解釋。假設您完成了一項功能,並完成了所有測試和您自己的代碼審查。這項工作現在已準備就緒,所以你git add你改變了所有的文件。這將使用這些文件填充舞臺,此時,工作目錄階段都處於同步狀態。

但現在假設您在最後一刻意識到您需要做出一些小改動。或者,您可以獲得最後一刻的靈感來爲該功能添加其他功能。該功能本身基本上是完整的,所以你不想改變你已經做好的工作。由於您的工作處於暫存區域,因此您可以根據需要修改工作目錄。如果你想保留任何新的工作,你可以再次git add它。否則,你可以保持現狀,做出承諾,並推動你的工作。

順便說一句,如果中途想要將工作目錄文件重置爲舞臺中的版本,可以通過git checkout FILE來完成。

請注意,很多Git插件(例如Eclipse的eGit)似乎都是跳過舞臺,通常看起來直接從工作目錄文件直接提交。

2

程序員很難改變應該成爲下一次提交的一部分的東西。這就是臨時區域幫助很大的地方 - 只需選擇正確的位,忽略各種日誌/調試語句或不相關的更改,然後才能提交。這樣,您可以在一批更改中創建幾個完整的提交。

2

這就是說,你可以選擇你想要包含在提交中的內容不只是在文件中,而是在字符粒度。如果你正在尋找一個bug並且在整個地方都有很多臨時調試語句被添加。現在你已經解決了一些問題並想要提交修復,但是懷疑可能還有更多,所以你仍然需要調試聲明。因此,您啓動git gui並在diff的上下文菜單中使用Stage hunk/Stage line條目以僅對修復進行修復,然後進行修改。你可以從git add -i得到相同的效果,或者你可以編輯差異到git add -e階段,或者你可以用vim-fgitive這樣的東西調整舞臺。

有時您還可以使用舞臺來分隔掛起的更改。假設你正在做某件事,做了一些事情,但現在你需要嘗試一下。因此,您可以對自信的部分進行演示,或者您認爲您可能需要返回並繼續進行實驗,然後在實驗結果不符合要求的情況下輕鬆撤消實驗。