如何创建git分支,使添加到其中的文件不会添加到master?

如何创建git分支,使添加到其中的文件不会添加到master?,git,branch,master,git-track,Git,Branch,Master,Git Track,我想创建一个独立于主分支工作的git分支。我希望所有的代码,是目前在主,但任何进一步的变化,在主不应该反映在分支和分支的任何变化不应该反映在主 我使用此命令创建分支: git branch test 但是我在master中添加的任何文件都可以在test中看到。在test中添加的任何新文件,我都可以在master中看到。如何避免这种情况?创建分支时,我没有使用任何--track选项 git branch test git add . git checkout test git checkout

我想创建一个独立于主分支工作的git分支。我希望所有的代码,是目前在主,但任何进一步的变化,在主不应该反映在分支和分支的任何变化不应该反映在主

我使用此命令创建分支:

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

git branch test
git add .
git checkout test
git checkout master
只要您不提交,您就会在两个分支
test
master
中看到您的工作树和索引(它引用了您添加的内容)

git checkout test
git commit -m "files for test"
git checkout master
然后您将不会在
master
中看到刚刚在
test
中提交的文件

您的新分支
test
将记录一个新的提交(包含新内容),独立于
master

您所要求的正是
git分支测试的功能(两个历史不再共享)。但这里有两个层次的混淆:

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

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


    • 我想你想要的是:

      git checkout --orphan somebranch
      

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

      这根本不应该发生。您能否更详细地介绍一下您是如何进行提交和分支切换的?您确定要通过git checkout命令更改分支吗?您是否在切换之前提交了更改?然后,这种行为是预期的。如果要保存,请提交。如果您还不想提交,请使用
      git stash
      。在
      commit
      提交更改之前,不会将更改放入分支中。您只是在“工作副本”中进行更改,这是一个独立于您提交的分支的实体,比我的答案更详细+1.注意,这不是强迫症。它是CDO(与强迫症相似,但按字母顺序排列)。应该如此。(对不起,今天是星期五,忍不住)不是OP想要什么,而是大多数发现这个问题的人会做什么。