最近,一些项目需要一个特定的功能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的所有更改...
感谢所有人的努力!
答案 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
仍指向A
。 localconf
现在指向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
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
,则在概念上删除并在正确的位置重新创建分支可能更有意义。
研究像git log --decorate --graph --all --oneline
这样的命令的输出,或经常使用像gitk --all
这样的gui来了解分支和提交到存储库时发生了什么。
答案 2 :(得分:0)
在localconf和feature-a-b中检查了.gitignore
个文件,阻止了切换分支时的任何更改...