为什么git在切换分支(修改、添加、删除文件)时一直显示我的更改,而不管我是否运行gitadd?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (55)

我对git非常陌生,我一直在试图理解为什么git一直在显示我在另一个分支中更改的内容,当我运行git签出以在分支之间切换时,首先我尝试不使用gitadd,但是没有工作。然而,我试着使用gitadd,但没有解决问题。

这基本上就是我要做的:

$ 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")  

我认为,在使用树枝的时候,不管你在一个树枝上做什么,它对其他分支都是看不见的。这不是创建分支的原因吗?

我尝试使用“gitadd”,但是在两个分支中都可以看到更改。为了避免这种情况,我需要在分支之间切换之前运行“git COMMIT”吗?

提问于
用户回答回答于

切换分支与你一起携带未提交的更改。要么先提交,然后运行git checkout .撤销它们,或者运行git stash在切换之前。(可以通过git stash apply)

用户回答回答于

简短的回答:是的,你需要承诺。不过,你一定要在正确的树枝上做这件事!

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

因此,如果有未提交的更改,它们将不会受到切换分支的影响。当然,如果切换分支与您的更改不兼容,git checkout都会拒绝这么做。

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

扫码关注云+社区