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

时间:2011-04-03 17:55:02

标签: git

我是git的新手,我一直在努力理解为什么git在我运行git checkout以在分支之间切换时,在另一个分支的一个分支中继续显示我所改变的内容首先我尝试不使用git add和didn'工作。但是,我尝试使用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")  

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

我尝试使用“git add”,但这些更改在两个分支中都可见。 在切换分支之前是否需要运行“git commit”以避免这种情况?

3 个答案:

答案 0 :(得分:123)

切换分支会随身携带未提交的更改。首先提交,运行git checkout .以撤消它们,或在切换之前运行git stash。 (您可以使用git stash apply

返回更改

答案 1 :(得分:26)

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

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

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

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

答案 2 :(得分:-1)

即使我遇到了同样的问题。如果需要,您需要提交任何更改。更改分支并提取新更改。如果您没有添加gitignore,甚至删除node_modules文件夹。拉出新的更改后,运行npm i。应该可以。