如何创建一个git分支,以便我添加到它的文件不会添加到master?

use*_*433 9 git branch master git-track

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

我用这个命令来创建分支:

git branch test
Run Code Online (Sandbox Code Playgroud)

但是我添加的任何文件master,我都可以看到test.test我添加了任何新文件,我可以看到master.怎么避免这个?创建分支时我没有使用任何--track选项.

Val*_*rio 20

我想你想要的是:

git checkout --orphan somebranch
Run Code Online (Sandbox Code Playgroud)

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

  • 不是*OP*想要的,但大多数人发现这个问题的确如此. (3认同)

Mat*_*ght 5

你所要求的是究竟是什么git branch test(两个历史不再共享的点).这里有两个层次的混乱:

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

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

  • 比我的答案更详细.+1.注意,它不是强迫症.它是CDO,即像强迫症,但按字母顺序排列.**因为它应该是**.(对不起,现在是周五,无法抗拒) (2认同)