2014-10-01 104 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