在 Git 个分支之间切换,删除另一个分支中的文件

Switch between Git branches removing files in another branch

好的,当我在分支之间切换并从一个分支删除文件时,它会转移到另一个分支。

我创建了一个新的 repo,并使用文件“README.md”推送到远程。

然后我切换到功能分支 git checkout -b feature/hello 并添加一个文件 hello.md。我添加此文件 git add hello.md 并提交 git commit -m "hello added"。然后我推这个分支,一切都很好! git push origin feature/hello.

现在我想切换分支做一些工作,在这个功能分支上我们要删除 hello.md 并添加一个新文件 goodbye.md.

现在在 feature/hello 分支中我有文件 README.md goodbye.md.

为什么删除一个分支中的文件会从另一个分支中删除它们?

TL;DR - 更改是本地,直到您提交它们。

文件本身并未从“分支”中删除,而是仅在本地删除。

当您执行 rm [filename] 时,您只是在本地删除文件。这与 git rm [filename] 不同。 this post.

中的更多详细信息

如果你检查你推送的代码,文件仍然在那里。事实上,该文件仍在分支中——至少就 git 而言是这样,因为您尚未将删除作为更改提交。只有当您 git add [filename]git 才会将文件记录为已删除。 (事实上​​ ,即使那样,您仍然可以更改分支并且git commit文件在不同的分支中被删除!)

这就是 git 的工作方式。您可以在本地进行更改并在不同分支之间移动,然后将更改提交到您选择的分支。 (当然,过程中可能会遇到一些冲突,但原则上是可以的)

事实上,它真的很有用。比如说,您在分支 foo 中并且刚刚对几个文件进行了一些更改。但是,您真正想要做的是在您忘记创建和检出的 new 分支 bar 中进行这些更改。由于更改仍然是本地的,您可以简单地 git checkout -b bar 并按照您最初的意图在分支 bar 中提交更改。

顺便说一下,this post 讨论了恢复已删除文件的方法,以防 rm 出错。