繁体   English   中英

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

[英]Git branch contains files from other branch

最近,一些项目需要一个特定的功能A,我正在将其与另一个功能B分开使用。 因为这对svn很麻烦,所以我决定花时间再次用git设置我的开发环境。

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

git checkout localconf
git branch feature-a

以localconf开头的新功能“ feature-a”开始,使我需要的“ feature-ab”更改不再起作用。

但是现在localconf包含了属于Feature-ab的所有文件...这让我感到困惑,那些以前的提交不是Feature-ab分支的一部分吗? git状态/日志不表示缺少任何内容,进行更新...

仔细搜索有关git和branch的内容,会发现教程过于简单,或者文档很多,但与主题无关。 我如何从这里开始? 可能我在概念上错过了一些东西...

编辑 :找到http://www.gitguys.com/topics/creating-and-playing-with-branches/后,我尝试了

git checkout master

和瞧:来自feature-ab的文件没有被跟踪。

git checkout localconf

恢复它们,即使

git log --name-status

没有提到他们中的任何一个...

edit2: Do!

这不是分支/概念/任何问题。:存在一个.gitignore文件,排除了localconf中feature-ab的所有更改...

感谢大家的努力!

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

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

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

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

 - A
    \
     master - HEAD

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

 - A - localconf - HEAD
    \
     master

然后,您将提交B提交到该分支。

 - A - B - localconf - HEAD
    \
     master

master仍然指着A localconf现在指向B 然后,您创建了另一个分支feature-a 如果您使用了git branch feature-a类的命令,则该分支即该指针指向HEAD所在的相同位置。 这就是为什么您看到您在localconflocalconf的工作的原因。

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

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

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

masterA localconf指向B feature-a指向C

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

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

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

经常研究git log --decorate --graph --all --oneline之类的命令的输出,或者经常使用gitk --all类的gui来了解分支和提交到存储库时的情况。

在localconf和feature-ab中都检查了一个.gitignore文件,以防止在切换分支时进行任何更改...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM