[英]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
所在的相同位置。 这就是为什么您看到您在localconf
上localconf
的工作的原因。
- A - B - feature-a - HEAD
\ \
master localconf
如果您从此处继续处理feature-a
-a并进行提交C
,则历史记录如下。
- A - B - C - feature-a - HEAD
\ \
master localconf
master
点A
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.