2012-04-03 100 views
2

假設我在development分支上,並且我剛剛重構了一個小時......我沒有計劃進入,但一小時後,我碰巧在一些特定功能上做了很多工作,比如說工作在MVC的routing部分。是否有辦法將該代碼提交給專門的routing分支,該分支可能或不可能存在於項目中,而沒有先將其提交給development分支?我希望它可以像過去一小時一樣,在routing分支中寫代碼。將代碼提交到特定分支_after_編寫所有代碼(git)?

在黑客/重構會話期間檢出特定分支的問題是您即將進行的工作是不可預知的。因此,無法預先知道「結賬routing分行」。所以我最終所做的只是將所有內容都保存在development分支中。但是,這個龐大分支的問題是很難一次處理多個功能而不會破壞所有功能。那麼,理想的情況就是將過去的重構過程中的cat >>轉換成新的/現有的routing分支。然後在接下來的一個小時內,我可以做一半的路由,半數據庫,因此回溯到routingdatabase

這可能嗎?您使用哪些工作流程來簡化此過程?

+0

不是你的問題的解決方案,但我認爲如果你事先知道你要編寫代碼會更好。請注意,使用git,您可以隨時創建儘可能多的分支,然後在需要時提交給那些分支。 – knittl 2012-04-03 07:14:54

回答

3

關鍵是經常提交。這是Git的一個很好的功能,你可以保留本地提交併在你認爲完成時將它們壓縮在一起。通過這種方式,您可以輕鬆地使用重構工作一段時間,只需檢出新功能的新分支即可。

在你的情況,你只能階段「重構」的變化(「git add」),並提交到開發分支。之後(在你的路由變化仍然未分配和未提交)的情況下,你可以檢出到一個路由分支並在那裏提交非分離的路由變化。

1

最簡單的辦法就是承諾不管你對我所做的develop,做git checkout -b routing讓你有2個分支(開發和路由)都在同一地點

然後git checkout develop && git reset --hard origin/develop把發展回到了它是您開始前黑客攻擊。

+1

'git reset --hard'應該總是帶着一粒鹽。它將從工作樹中刪除所有未提交的更改(如果您碰巧沒有提交所有內容)。另外,這個假設'develop'最近被推送到'origin'倉庫('origin/develop'不一定存在)。 'git checkout -b routing && git checkout develop'似乎不需要複雜,爲什麼不'git branch routing'?這樣你就可以留在'develop'分支上,而不必再次切換。 – knittl 2012-04-03 07:11:39

+0

我總是忘記'git branch'的存在來創建新的分支。我很困惑於我的'co -b'工作流程。 WRT to'reset'是的,你必須小心,但我認爲這是不言而喻的。 – richo 2012-04-04 01:25:37

1

快速流程:

git stash 
git checkout routing 
git stash pop 

否則,您可以隨時提交更改到本地分支:

git checkout -b wip #create branch wip 
git add <some files> 
git commit 
git add <some files> 
git commit 
etc... 

,一旦你COMMITED,您可以跳轉到另一個分支和cherry-pick任何你想要的中間提交,或者checkout特定的文件或目錄:

git checkout routing 
git cherry-pick 1bf56de #<- sha1 of one of your commits from your wip branch 
git checkout 2cc54aa -- path/to/myFile #<- INDEX gets updated with this version of myFile 
git checkout 2cc54aa -- whole/dir/ 
0

只是檢查出你想要的分支,並使用-m標誌:

git checkout -m routing 

然後提交更改。

0

在git中分支很便宜,所以分支提前經常

開始任何編碼之前,將'開發'分支到臨時本地分支。
在那裏工作,正如MackeiaN所說的那樣,經常犯下,你可以稍後壓扁。
請記住,在推送到公共服務器之前,您可以在本地更改您的歷史記錄。
如果你覺得不安全有關歷史的編輯,你可以這樣做之前再次分支(如果提交由標籤或分支引用,你不能失去他們,你反正引用日誌的)

當您結束編碼會話,將這個臨時本地分支合併,重新命名或重命名爲它需要去的任何地方。

如果你對git的所有基本操作都沒有信心,我建議你閱讀the "Pro Git" book,特別是它的"Git Branching" chapter