【问题标题】:Git - Commit and push local changes without losing file diffs?Git - 提交并推送本地更改而不会丢失文件差异?
【发布时间】:2022-06-11 17:11:30
【问题描述】:

我在VSCode,刚刚对我的分支进行了大量更改。我有一个粗略的草稿,由于没有在线备份而输掉会很遗憾。所以很自然地,git add . 我的更改会很聪明,然后git push origin myBranch 创建远程备份。

但是这样做会删除我的所有文件差异,Visual Studio Code 的界面在侧边栏中显示给我(见下图)。有没有一种方法可以推送到远程分支但仍然保持未暂存的更改(或将它们带回未暂存状态),或者至少保留这些差异文件的任何方法,以便我仍然可以继续在本地工作并且轻松能够看到我接触过的所有地方了吗?

【问题讨论】:

  • 你想如何在这个分支上进一步提交,你只希望徽章编号反映与master/main分支相比更改的文件
  • 这在 命令行 Git 中很容易做到:只需进行一次提交(以通常的方式)并以通常的方式将提交发送到服务器(git push ),然后使用git reset --mixedgit reset --soft(无论你喜欢哪个)在本地“取消”提交。请注意,稍后您需要git push --force-with-lease 告诉 other 存储库放弃新的提交。或者,您可以git push HEAD:newbranch 让其他存储库将提交保存在不同的分支名称下,以便您可以告诉其他存储库稍后丢弃该分支名称。
  • 是否有办法在 VSCode 中做到这一点,或者让 VSCode 看到你在做什么,不过我不知道。 (我也看到我重复了j6t's answer。)

标签: git github visual-studio-code version-control ide


【解决方案1】:

您提交并推送它以进行远程备份。

然后你在本地丢弃提交

git reset HEAD~

这会将您的分支指向上一个提交,并保留文件中的所有更改,以便您可以看到差异。

请注意,当您完成本地提交后,您必须稍后强制推送您的分支。这可能是也可能不是问题,具体取决于您的远程存储库的设置方式。

【讨论】:

    【解决方案2】:

    如果你没有任何改变,你会推送什么?

    简单的解决方案是 .保留您所做更改的所有文件的副本,然后撤消更改。

    稍后您可以参考复制文件中的更改

    【讨论】:

      【解决方案3】:

      使用git stash 保存您的工作。推送已提交的更改后,您可以将未提交的更改称为git stash pop。参见文档here

      【讨论】:

      • 使用git stash 进行提交,但是提交在no 分支上,并且不能同步到服务器(反正还没有,有一个Git 2.37 或一些的项目这样做)。 OP 希望服务器包含新的提交,所以这不会实现目标。
      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2017-02-08
      • 1970-01-01
      相关资源
      最近更新 更多