2014-10-01 106 views
1

我有一個關於Git的新手問題。瞭解git分支

場景:

1)我在項目中創建

2的「實驗」分支)然後我決定做的改變(例如:添加文件的.gitignore)必須影響「實驗「 分支以及主分支或將從主分支分支的任何未來分支。

在這種情況下推薦什麼?

簽出之前在主分支上籤出最新的提交併提交--amend

創建一個分支來做到這一點,然後與主和實驗分支合併?當我試圖做到這一點時,我將所有在我的「實驗」分支上的東西都應用到主分支上,並丟失了大量文件。我現在很迷茫...任何幫助將不勝感激

更新

發生了什麼事(我不能在我的最後一段上述解釋):

其實我已經合併了'hotfix'分支(其中有.gitignore提交)放入'實驗'分支,然後從主分支合併(在'實驗'分支上我刪除了一堆文件)。

所以我用:

git checkout master 
git reset —hard [hash for the previously last commit on master] 
git branch -d hotfix 
git checkout -b hotfix (now from master) 
git add .gitignore 
git commit -m 「add .gitignore」 
git checkout master 
git merge hotfix 
git checkout experiment 
git merge hotfix 
git branch -d hotfix 

然後我有種「解開」這一點,再次使用底墊的方法,從下面的答案之一做到了。由於「歷史重寫」的原因,它對我更有吸引力,通過查看分支圖,這對我來說更有意義。而且我正在單獨工作(迄今爲止)這個項目。

+0

可能重複的[我如何做一個錯誤修正主,並將其整合到我不太穩定的分支?](http://stackoverflow.com/questions/25933056/how-can-i-do-a -bugfix-on-master-and-integrate-it-into-my-less-stable-branches) – Jubobs 2014-10-01 15:32:06

回答

1

不知道我是否理解你最後一段的權利內容。你有沒有在正確的方向合併?下面的過程應該工作

git branch MaintainGitIgnore 
git checkout MaintainGitIgnore 

//manipulate .gitignore file 
git commit -a .gitignore -m "Ignoring new files now" 

git checkout master 
git merge MaitainGitIgnore 

git checkout experiment 
git merge MaintainGitIgnore 

現在你可以保持分支MaintainGitIgnore,也許用一個腳本來自動更新你忽略的定義。

+0

在最後一行,如果我使用「git merge master」,我會得到相同的結果嗎? – zok 2014-10-01 18:18:57

+1

當且僅當沒有其他分支合併到主設備上。考慮處理issue0並自發打開hotfix0,例如一個錯誤修正。修復後,將hotfix0合併到master,然後簽出分支issue0並繼續正常工作。這就像Git SCM參考中的一個例子http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging – Guardian667 2014-10-01 19:16:00

1

將新的.gitignore委託給主分支後,您可以使用rebase

git checkout master git add .gitignore git commit -m 'Updates ignore list' git checkout experiment git rebase master

這將更新experiment分支。

但是,請只做這個,如果你是這個分支的唯一工作人員。如果其他人也在工作,這會產生衝突問題。在這種情況下,我會合並experiment之一的master分支。

+0

你的意思是我不需要創建一個新的分支呢? – zok 2014-10-01 18:20:07

+0

工作很好!就像我想的那樣,好像在將主分支到'實驗'之前在歷史中插入了一個提交。但是,通過查看源代碼樹中的分支圖,似乎只有一個分支,並且只有一種顏色(儘管兩個分支的「主」和「實驗」都存在並正確地與其各自的提交關聯) – zok 2014-10-01 20:04:12

+0

@zok,你仍然必須創建'實驗'分支。 您可能會看到,在圖表上,最後一次提交在兩者中都是一樣的。 – gabra 2014-10-01 21:01:04