10

我想创建一个独立于 master 分支的 git 分支。我想要到目前为止存在于 master 中的所有代码,但是 master 中的任何进一步更改都不应该反映在分支中,并且分支中的任何更改都不应该反映在 master 中。

我使用此命令创建分支:

git branch test

但是我添加的任何文件master,我都可以在test. 并且任何新添加的文件test,我都可以在master. 如何避免这种情况?创建分支时我没有使用任何 --track 选项。

4

3 回答 3

27

我想你想要的是:

git checkout --orphan somebranch

这将创建一个somebranch没有任何历史记录的文件,您可以将您想要的文件添加到该文件中,它们可能与您之前的分支有 100% 的不同。

于 2014-04-28T12:23:10.737 回答
5

您所要求的正是这样git branch test做的(这两个历史不再共享的点)。但是这里有两个层次的混淆:

  • 当您git add newfile将其添加到索引中时,您不会提交它或使用它的内容更新任何分支。然后,当您签出新分支时,只要没有冲突,git 就不会从索引中重置这些更改。这是一种理想的行为,例如,如果您在另一个分支上工作并且只想将未提交的更改的子集转移到另一个分支。如果您git commit是原始分支上的索引状态,那么当您返回测试分支时,索引将不会保留这些更改。

  • 当您在添加或删除了新文件的树之间移动时,agit checkout不一定会将它们从文件系统中删除(如果有重置操作)。然后,当您切换分支时,您可能会“看到”这些文件,例如在lsor的输出中git status- 但它们是“未跟踪的”并且 git 不会尝试对它们做任何事情(git commit -a例如,不会将此文件添加到索引中在写一棵新树之前)。这没什么好担心的,但如果你对此有强迫症,你可以删除它们(或使用git clean)。

于 2012-01-27T14:58:13.640 回答
3
git branch test
git add .
git checkout test
git checkout master

只要您不提交,您就会在两个分支testmaster.

git checkout test
git commit -m "files for test"
git checkout master

然后你不会在master你刚刚提交的文件中看到test.
您的新分支test将记录一个新的提交(带有新内容),独立于master.

于 2012-01-27T14:52:56.277 回答