【问题标题】:Understanding git branching理解 git 分支
【发布时间】:2014-10-01 14:49:20
【问题描述】:

我有一个关于 Git 的新手问题。

场景:

1) 我在项目中创建了一个“实验”分支

2)然后我决定做一个必须影响“实验”的更改(例如:将文件添加到 .gitignore) 分支以及主分支或我将从主分支分支的任何未来分支。

在这种情况下有什么建议?

在分支之前检查主分支上的最新提交并使用--amend 提交?

为此创建一个分支,然后与 master 和实验分支合并?当我尝试这样做时,我将“实验”分支上的所有内容应用到主分支并丢失了很多文件。我现在很困惑......任何帮助将不胜感激

更新

发生了什么(我无法在上面的最后一段中解释):

我实际上已将“修补程序”分支(已提交 .gitignore)合并到“实验”分支中,然后将其从 master 合并(在“实验”分支上,我删除了一堆文件)。

所以我用了:

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

然后我从下面的答案之一中“取消”并使用 rebase 方法再次执行此操作。由于“重写历史”的东西,它对我更有吸引力,通过查看分支图对我来说更有意义。我正在独自(到目前为止)在这个项目上工作。

【问题讨论】:

标签: git branch


【解决方案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,也许可以使用脚本自动更新您忽略的定义。

【讨论】:

  • 最后一行,如果我改用“git merge master”会得到同样的结果吗?
  • 当且仅当没有其他分支合并到主分支。考虑处理 issue0 并自发打开 hotfix0,例如一个错误修正。修复后将 hotfix0 合并到 master,然后签出分支 issue0 并继续正常工作。这就像 Git SCM 参考中的示例 git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
【解决方案2】:

在将新的.gitignore 提交到主分支后,您可以使用rebase

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

这将更新experiment 分支。

但是,请仅当您是该分支的唯一工作人员时才这样做。如果其他人也在工作,则会产生冲突问题。在这种情况下,我会将master 分支合并到experimentone 中。

【讨论】:

  • 你的意思是我不需要创建一个新的分支?
  • 效果很好!就像我想的那样,就好像在将主分支分支到“实验”之前在历史中插入了一个提交。但是,通过查看 Source Tree 中的分支图,似乎只有一个分支,并且只有一种颜色(尽管 'master' 和 'experiment' 两个分支都在那里并且与它们各自的提交正确关联)
  • @zok,您仍然需要创建 experiment 分支。您可能会在图表上看到这一点,因为两者的最后一次提交是相同的。
  • 是的,就是这样。
猜你喜欢
  • 2014-04-17
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2012-06-24
  • 1970-01-01
相关资源
最近更新 更多