所有git本地分支都共享同一个工作目录吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了所有git本地分支都共享同一个工作目录吗?相关的知识,希望对你有一定的参考价值。

情况:

我从master分支创建了一个新的本地分支,然后在新分支中检出时创建并保存了一个新文件。然后,我切换回master分支并运行git status。

在这一点上,我似乎有不同的结果:

  1. 有时文件显示为未跟踪的文件,我可以在我的工作目录文件夹中'物理地'看到该文件。
  2. 其他时候它没有显示为未跟踪的文件,并且我在工作目录文件夹中看不到它。

目前我无法复制2,尽管我很肯定这正在发生,所以我怀疑当发生这种情况时我正在做一些不同的事情。我想知道是什么导致这些混合结果?

注意:我正在RStudio终端中运行它,但是我认为这与正在发生的事情无关。

答案

有时文件显示为未跟踪的文件,我可以在我的工作目录文件夹中'物理地'看到该文件。

如果在工作目录中创建文件,则该文件是“未跟踪的”。这意味着git对它一无所知,并且不会对其进行管理。因此,当您切换分支时,未跟踪的文件仍将在那里。

例如,这里我们刚刚在名为newfeature.c的分支上创建了名为newfeature的文件:

$ ls
newfeature.c  README
$ git status
On branch newfeature
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        newfeature.c

nothing added to commit but untracked files present (use "git add" to track)

由于未跟踪,因此当我们切换到master时仍将可见:

$ git co master
Switched to branch 'master'
$ ls
newfeature.c  README
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        newfeature.c

nothing added to commit but untracked files present (use "git add" to track)

其他时候它没有显示为未跟踪的文件,并且我在工作目录文件夹中看不到它。

如果已将文件提交到分支,然后切换到该文件不存在的分支,它将从工作目录中删除。它仍然是您存储库的一部分,当您切换回该存储库所在的分支时,它将被替换。

如果返回上一示例的newfeature分支,然后将newfeature.c添加到存储库:

$ git co newfeature
Switched to branch 'newfeature'
$ git add newfeature.c
$ git commit -m "this is a new feature"
[newfeature 10525e6] this is a new feature
 1 file changed, 1 insertion(+)
 create mode 100644 newfeature.c
$ git status
On branch newfeature
nothing to commit, working tree clean
$ ls
newfeature.c  README

然后切换到master分支:

$ git co master
Switched to branch 'master'
$ ls
README
$ git status
On branch master
nothing to commit, working tree clean
$

我们不再看到该文件,因为它现在是newfeature分支的一部分。由于它是存储库的一部分,因此它由git管理。


您可能还会看到另一种情况。考虑一下您在一个分支中明确地removed一个文件,但在另一个分支中仍然存在该文件的情况。您对文件进行了更改(在文件所在的分支上),但是随后尝试切换到另一个分支而不提交这些更改。在这种情况下,您将获得:

error: Your local changes to the following files would be overwritten by checkout:
        testfile
Please commit your changes or stash them before you switch branches.
Aborting

以上是关于所有git本地分支都共享同一个工作目录吗?的主要内容,如果未能解决你的问题,请参考以下文章

Git的使用

Git的使用

Git的优点

vscode 用git 拉取代码,提示:在签出前,请清理存储库工作树。请问是啥问题,如何解决。

Git使用实例分析

git怎么查询当前分支的版本号