2014-01-25 60 views
2

我是git的新手,並且在創建/刪除分支方面領先一點,並想找出正確的過程。基本上,我開始了一個新的分支(branch_a),然後做了一些改變。然後我決定測試一個第三方軟件包,知道它可能無法正常工作。在這一點上,我在分支A中進行了一些改變,但我沒有分階段或提交。我繼續結帳一個新的分支(branch_b)。我玩弄了這個「測試分支」,然後決定刪除它。首先,我做了退房的原分公司的:Git刪除分支和所有相應的更改

git checkout branch_a 

然後,我刪除了分支想我做了會被刪除過的所有更改:

git branch -d branch_b 

所以分支被刪除,但是當我回到branch_a繼續從我離開的地方開始工作,我看到我在branch_b中所做的更改仍然存在。由於我之前沒有提交任何內容,因此我無法弄清楚如何分開branch_bbranch-b之前的更改。這仍然是可能的嗎?

而就「過程」而言,是否有更好的方式來創建和刪除測試分支?例如。我應該使用git reset --hard

+0

你確定你沒有隱藏或提交對'branch_a'的更改嗎?通常git不允許你在你的工作目錄很髒時簽出一個分支。如果你真的沒有隱藏或承諾你運氣不好,並將不得不手動恢復'branch_b'的變化,git無法知道你想保留什麼。 – dtech

+0

Nah,沒有隱藏或提交任何更改。新的結賬工作的罰款只是給我這個消息: 'M\t分貝/ schema.rb' 'M \t日誌/ development.log' '切換到新的分支「branch_b'' 看起來我應該用混帳藏! – stoneage

+0

是的,或者只是提交。使用git /分佈式版本控制,你通常希望經常提交。你可以隨時擠壓你的提交/分支,或者用['git merge --squash branchname']合併回master時整齊地整理所有內容(http://stackoverflow.com/questions/5308816/how-to-use-git-合併壁球) – dtech

回答

3

我會猜想發生了什麼事。

您在branch_a中進行了更改。你沒有提交。你簽出了新的分支branch_b,做了一些東西,沒有提交。現在您切換回branch_a。 git的確可以讓你繼承一個骯髒的工作目錄。

把它清理乾淨(假設我的猜想是正確的)

爲了清理你的爛攤子,執行git status。你需要git add你想要的所有項目爲branch_a。然後執行git commit以保存您想要的branch_a。請注意,它只提交您添加到舞臺的項目。

現在你可以自由地回到branch_bgit add你想要的東西,並承諾這一點。 git status有很好的幫助文本來幫助你。

我的建議的工作流程:

branch_a工作。你有個想法去嘗試一些不同的東西。如果您認爲您將在15分鐘內回到branch_a,請執行git stash save <message>。這使branch_a的東西分開。如果你要更長時間,只需提交。別擔心,您可以稍後使用交互式底圖對其進行清理:git rebase -i。徘徊有點讓人討厭,你可能會意外地刪除它們,或者在你不想要的時候彈出它們。

現在回到master,並創建branch_b。我最喜歡的方式是一體化命令git checkout -b branch_b。現在你可以在那裏工作。完成實驗後,再次儲存或提交。請記住,只要你不推動,你就可以提交給你,然後用交互式重新分配來清理它。

退房branch_a並繼續在那裏工作。如果你收藏了一些東西,請彈出藏品:git stash pop。否則你承諾,它已經在那裏等着你。

+0

是的,這基本上是我所做的,但我也刪除了'branch_b',認爲它會放棄在該分支中所做的更改。由於它不太複雜,我用手固定它。下一次,我會利用'git stash'並且更經常地提交(而不是在達到「里程碑」之後) – stoneage

1

使用gitk --all來查看哪個分支當前指向哪個提交。

如果你沒有提交你的改變,git不知道你的改變。

使用git status檢查工作樹中的文件是否與git已知的文件不同。它也會告訴你如何改變它。

在更改分支之前,請確保您提交更改(讓當前分支知道您的更改)或放棄更改。切勿以未提交的更改更改分支。

它也將有助於爲你的shell配置一個好的git提示符。對於bash,你可以使用類似:

PS1='\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ ' 
GIT_PS1_SHOWDIRTYSTATE=yes # show changed files as `*` 
GIT_PS1_SHOWUNTRACKEDFILES=yes # show new files as `%` 
GIT_PS1_SHOWSTASHSTATE=yes 
GIT_PS1_SHOWUPSTREAM=auto 

如果設置您提示這種方式,只要確保它不會改變分支之前顯示*%。如果它確實使用git status來幫助做什麼。

+0

酷,gitk真的很有用! – stoneage

+0

+1爲git提示提示。有沒有辦法加快速度呢?當我修改我的bash提示時,它每次需要顯示提示時都會發生激烈的反應。 –