【问题标题】:Switch between Git branches removing files in another branch在 Git 分支之间切换删除另一个分支中的文件
【发布时间】:2021-03-27 22:26:10
【问题描述】:

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

我创建了一个新的存储库,并使用文件“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

  • git checkout -b feature/goodbye
  • rm hello.md
  • git checkout feature/hello

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

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

【问题讨论】:

标签: git github git-branch


【解决方案1】:

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

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

当您执行rm [filename] 时,您只是在本地删除文件。这与git rm [filename] 不同。 this 帖子中的更多详细信息。

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

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

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

顺便说一句,this 帖子讨论了找回已删除文件的方法,以防rm 出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2013-03-10
    • 2017-02-21
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多