Git分支包含来自其他分支的文件

时间:2013-12-10 14:16:06

标签: git svn version-control

最近,一些项目需要一个特定的功能A,我正在与另一个功能B一起工作,现在是分开的。因为这对svn来说是相当麻烦的,所以我决定花时间用git设置我的开发环境。

我用git-svn检查了svn,创建了一个分支“localconf”,提交了eclipse特定的更改,再次分支并从分支“feature-a-b”中的前svn工作区复制了所有更改。现在我做了

git checkout localconf
git branch feature-a

从localconf开始一个新的分支“feature-a”,以便从我需要的“feature-a-b”中删除这些更改。

但是现在localconf包含了属于feature-a-b的所有文件......这让我感到很困惑,是不是那些以前提交的feature-a-b分支的一部分? git status / log没有指出任何遗漏,要更新......

谷歌搜索关于git和分支的东西很多很简单的教程或很多关于这个主题的文档。我如何从这里进步?可能我在概念上遗漏了一些东西......

修改: 找到http://www.gitguys.com/topics/creating-and-playing-with-branches/之后我试过了

git checkout master

并且瞧:来自feature-a-b的那些文件没有被跟踪。

git checkout localconf

即使

也会恢复它们
git log --name-status

没有提及任何一个......

EDIT2: 卫生署!

这不是分支/概念/任何问题:有一个.gitignore文件,不包括localconf中feature-a-b的所有更改...

感谢所有人的努力!

3 个答案:

答案 0 :(得分:0)

git branch branch_name创建一个新分支但不切换到它。

git checkout -b branch_name创建一个新分支并切换到它。

如果您在git branch branch_name之后进行了更改然后提交,则他们将被提交到您已签出的最后一个分支。

答案 1 :(得分:0)

假设您在克隆存储库时处于提交A

 - A
    \
     master - HEAD

然后您创建并签出了分支localconf。分支是指向提交的指针。如果您没有另外指定,它将指向您当前所在的位置(HEAD)。

 - A - localconf - HEAD
    \
     master

然后你将提交B提交给该分支。

 - A - B - localconf - HEAD
    \
     master

master仍指向Alocalconf现在指向B。然后你创建了另一个分支feature-a。如果您使用HEAD之类的命令,该分支(指针)指向同一位置git branch feature-a。这就是为什么你看到你在localconf上所做的工作。

 - A -      B - feature-a - HEAD
    \        \
     master   localconf

如果您从此处继续使用feature-a并进行提交C,则您的历史记录如下所示。

 - A -      B - C - feature-a - HEAD
    \        \
     master   localconf

masterAlocalconfBfeature-aC

如果您要保存feature-a的提交,git rebase --onto master localconf feature-a将生成以下内容。

     C - feature-a - HEAD
    /
 - A -      B
    \        \
     master   localconf

如果您尚未提交feature-a,则在概念上删除并在正确的位置重新创建分支可能更有意义。

研究像git log --decorate --graph --all --oneline这样的命令的输出,或经常使用像gitk --all这样的gui来了解分支和提交到存储库时发生了什么。

答案 2 :(得分:0)

在localconf和feature-a-b中检查了.gitignore个文件,阻止了切换分支时的任何更改...