【问题标题】:Recover uncommited changes in Git from accidentally switching to another branch从意外切换到另一个分支中恢复 Git 中未提交的更改
【发布时间】:2019-05-06 02:51:12
【问题描述】:

我有一个项目,我在分支 A 中做了很多更改。我从未提交过这些更改,因为我遵循了仅在工作状态下提交代码的建议做法。

今天,我犯了一个愚蠢的错误,切换到另一个分支,忘记存储或提交我的更改。

代码在 PyCharm 中打开,我没有单击 PyCharm 窗口使其成为焦点,因为我知道它会监听更改并清除屏幕上的所有内容。我也没有切换回分支 A,因为害怕造成更多伤害。

我刚刚完成了一大堆工作吗?我可以通过 Git 或 PyCharm 的当前状态恢复其中的任何一个吗?

【问题讨论】:

  • git statusgit diff 怎么说?
  • 欢迎来到 SO,阿米什人。让我们强调一下,因为我遵循了仅在工作状态下提交代码的建议做法,并不是要让您感到羞耻,而是要警告人们这种方法的后果。经常提交。
  • @eftshift0 如果我没看错的话,它会显示来自分支 A 的更改(我已经有一段时间没有查看其他分支了)。
  • @RomainValeri 谢谢罗曼。我现在看到遵循这种做法是多么愚蠢。我以前从来没有犯过这个错误,并且相信我永远不会自动驾驶这么糟糕。
  • @Amish 只是为了添加一些东西:如果你不想用很多无关紧要的提交来弄乱你的分支历史(这可以说是你在这里遵循的建议的根源),那就不要' t 推动他们。经常在你的本地环境中提交,当你有一个工作状态时,一些特定的里程碑,然后花一点时间(不是那么多,真的)根据你的需要组织你的提交,然后推送想要分支的最终状态。

标签: git pycharm


【解决方案1】:

当您切换到另一个分支时,您的更改将继续。您只需切换回您的分支并提交或存储。

如果你当前的更改会与另一个分支发生冲突,git 将拒绝切换分支。

您可以通过git status查看您当前的更改。

某些命令可以删除您的作品,例如git cleangit resetgit checkout --force mybranchgit checkout . 请注意点,此命令将丢弃工作树中的所有更改(由 git 跟踪的文件,文件是例如,通过添加git add 来跟踪它们。)。

总结一下:

git checkout MyBranch 不会覆盖或删除您的更改

【讨论】:

  • 根据您的回答,您声明使用 git checkout 将消除更改。我专门使用了git checkout BranchA,因为这就是我学会切换分支的方式。那不是意味着我已经清除了我的更改吗?
  • 哦,对不起,我的意思是如果你使用git checkout . 它会清除你的更改。点很重要。我更新了我的答案。做git checkout mybranch 没问题。
  • 答案应该改写成明确的关于git checkout 命令的这种形式。您所演示的是 git checkout _applied to paths in the work tree` - 因为点 . 表示工作树的根。
  • git checkout --force mybranch 也会擦除本地更改。但据我所知,PyCharm 的 git 客户端并没有这样做。所以,OP 应该是安全的。
  • 我编辑了我的答案,现在应该更清楚了。谢谢
【解决方案2】:

根据OP的要求详细说明@Nitixx的答案,让我们引用手册:

git checkout <branch>

要准备处理<branch>,请通过更新工作树中的索引和文件并将HEAD 指向分支来切换到它。 保留对工作树中文件的本地修改,以便它们可以提交到<branch>

(强调我的)。

所以,是的,除非您还以某种方式明确地弄乱了覆盖受影响文件的内容,只需签出原始分支即可进行本地修改。

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 2018-12-19
    • 2016-06-04
    • 2018-06-21
    • 2020-06-03
    • 2022-08-18
    • 2011-03-15
    • 2020-12-27
    • 2013-06-08
    相关资源
    最近更新 更多