【问题标题】:How to sync only my latest commit with git?如何仅将我的最新提交与 git 同步?
【发布时间】:2018-01-25 04:07:43
【问题描述】:

我的本​​地存储库领先于远程 2 次提交 - 提交 A 和提交 B。

提交 A 是首先创建的,并且意外包含一个非常大的文件,该文件太大而无法暂存并导致 push 失败。

所以,我删除了文件,取消跟踪,然后提交 B。但是,我不能 push 提交 B,因为提交 A 和 B 都在尝试 push,这导致提交 A 导致在 B 被推送之前同样的失败。

有没有办法告诉 git 忽略这两个提交中的第一个?还是“删除”提交 A?

【问题讨论】:

  • git reset HEAD~2 重新开始,也许吧?了解 git 将您的提交建模为图形,如果没有其父 A 也在历史记录中,则无法推送子 B,因此您需要重新创建 B(我们称之为 B')从 A 的父 .

标签: git git-commit git-push


【解决方案1】:

你可以使用cherry-pick

假设您的远程分支是master,而您的两个提交的分支是master-plus-a-and-b

git checkout master
git checkout -b master-plus-b
git cherry-pick master-plus-a-and-b

现在master-plus-b 只有master 的提交和提交b,没有提交a。您可能需要在cherry-pick 过程中清除任何冲突。

【讨论】:

    【解决方案2】:

    也许您可以重置所有提交并使用干净的堆栈重新开始。

    • git reset --soft HEAD~2 然后git commit -am "cleaned commit"

    【讨论】:

    • 也许您可以重置所有提交并重新开始,使用干净的堆栈。 'git reset --soft HEAD~2' 然后 'git commit -am "cleaned commit"'。
    • 这行得通。简单易行,谢谢。如果您将此评论作为答案,我会接受。
    • 我不得不重温这个问题,想知道~2的作用是什么?
    • 表示向后两次提交。
    【解决方案3】:

    另一个选择是git rebase -i HEAD^^。如果将提交 A 和 B 压缩在一起,则在生成的有问题文件的提交中将没有记录。如果您愿意,这种方法还可以让您有机会将提交 A 的一些原始提交消息回收到新的结果提交中。

    【讨论】:

    • 上述命令打开变基文本文件,仅此而已。我不知道该怎么办。当您说“将它们压在一起”时,您是什么意思?
    • @jphollowed 在这种情况下,如果git rebase 令人困惑,您可以尝试git reset HEAD^^ --soft && git commit。该命令将 A 和 B 压缩为单个提交。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 2023-03-05
    相关资源
    最近更新 更多