为什么git在切换分支(修改,添加,删除的文件)时不断显示我的更改,无论我是否运行git add?

JPZ*_*JPZ 108 git

我是git的新手,我一直在努力理解为什么git在我运行git checkout以在分支之间切换时,在另一个分支的一个分支中继续显示我更改的内容首先我尝试不使用git add并且不起作用.但是,我尝试使用git add,但没有解决问题.我还没有使用git commit.

这基本上就是我在做的事情:

$ git clone <a_repository>  
$ git branch  
* master  
$ git branch testing  
$ git checkout testing  
...edit a file, add a new one, delete...  
$ git status  
    # On branch testing  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  
$ git branch  
  master  
* testing  
$ git checkout master  
D       file1.txt  
Switched to branch 'master'  
$ git status  
    # On branch master  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  
Run Code Online (Sandbox Code Playgroud)

我认为,在使用分支时,无论你在一个分支中做什么,它对所有其他分支都是不可见的.这不是创建分支的原因吗?

我尝试使用"git add",但两个分支都可以看到更改.在切换分支之前是否需要运行"git commit"以避免这种情况?

Sea*_*ess 131

切换分支随身携带未提交的更改.首先提交,运行git checkout .以撤消它们,或git stash在切换之前运行.(你可以回复你的更改git stash apply)

  • "切换分支随身携带未经提交的变更" - 这确实很有意义,也许是最糟糕的设计理念.如果你不能以孤立的方式工作,那么拥有分支机构有什么意义呢?! (15认同)
  • 除非你想建立一大堆藏匿处,否则git stash pop会更好. (9认同)
  • @JPZ:git stash只处理跟踪文件; 不跟踪新文件,因此它们不会被隐藏. (7认同)
  • @JPZ:如果您想隐藏未跟踪的文件,要做的是在存储之前`git add`。就是说,我不确定您是否真的想将其存储在这里-如果您打算将那些更改作为要转离的分支的一部分,请提交它们。(如果您打算切换回该分支并在提交更改之前进行更多更改,则“ stash”可能是完成此任务的正确工具。) (2认同)

Cas*_*bel 29

简短的回答:是的,你需要提交.但请确保您在正确的分支上执行此操作!

分支是指向提交的指针.当您提交签出分支时,分支将前进到指向新提交.当你签出一个分支时,你正在检查它指向的提交.(您可以将提交视为工作树的快照.)

因此,如果您没有提交更改,那么它们将不会受到切换分支的影响.当然,如果切换分支与您的更改不兼容,git checkout则只会拒绝执行此操作.

git add是一个暂存更改的命令,然后您将提交.它不会将这些更改记录到存储库的历史记录中.它只是将它们放入一个临时区域(索引); git commit然后使用该临时区域的内容来创建提交.