在新 Git 分支中创建新文件

Creating a new file in a new Git branch

我还在试验 Git。

现在我在 Gitlab 上只有一个本地 master 分支和一个远程 origin/master 分支。

到目前为止我做了什么:

我想创建一个新分支,所以我做了:

执行此命令后,我已经 "checked out" 在我的新分支上了,对吧?我可以用 git branch -a

确认

所以我创建了一个新文件(使用 VSCode 文件资源管理器)example.txt(在我的新分支上)。

然后我做了:

所以我可以回到我的 master 分支。

那时我预计我将无法再看到该文件,因为它是使用不同的分支创建的。但是文件还在。

我错过了什么?

您创建的文件尚未暂存或提交,因此它是一个未跟踪文件。未跟踪的文件尚不属于任何分支;它们存在于您的工作树上,并在您从一个分支切换到另一个分支时保留在那里。

(要完全理解这一点,熟悉 git 中的三个通用存储区域可能会有所帮助 - 工作树、索引(有时称为暂存区)和数据库。详细了解这有点超出了回答这个问题的范围,但我确实建议阅读这个主题。)

伴随着一句警告:在一个分支上提交的文件在另一个分支上可能不存在。例如,如果您返回 newBranch 并提交您的文件

git checkout newBranch
git add example.txt
git commit

现在 example.txt 存在于 newBranch 但不存在于 master。如果您签出 master,该文件将如您所料消失。

这意味着如果您在 master 上创建另一个 example.txt(在同一目录中以便路径完全相同),即使路径相同,这个新文件也不会被跟踪引用另一个分支上现有的已提交文件。

如果您随后尝试结帐到 newBranch git 应该拒绝并警告您有数据会因结帐而丢失。

实际上,这只是 "trying to change branches with uncommitted changes" 的一个特例,但考虑到您当前的任务,值得一提。

另一个可能的解决方案:

您可以使用 git 的 stash 命令。

git stash 有什么作用?

git 存储用于您的更改的剪贴板。

如果您必须切换上下文 - 例如因为你需要解决一个紧急的错误——你需要把这些改变排除在外。当然,您不应该只提交它们,因为这是未完成的工作。

示例:

git stash

您的工作副本现在是干净的:所有未提交的本地更改都已保存在 Git 的 Stash 所代表的这种 "clipboard" 上。您已准备好开始新任务(例如,通过从远程拉取更改或简单地切换分支)。

假设:

  1. 您在分支 newBranch 上创建了一个文件 example.txt。
  2. 现在急需切换另一个分支master,然后在切换之前应用以下命令。

    git 添加 example.txt

    git 存储

  3. 现在切换master。那么example.txt文件就会消失

  4. 当你返回你的分支 newBranch 然后应用以下命令。

    git 隐藏应用

然后你可以看到你的文件 example.txt.