【问题标题】:Deleting a git commit but preserve change [duplicate]删除 git 提交但保留更改 [重复]
【发布时间】:2021-09-17 18:21:18
【问题描述】:

我有这样的提交,1 是最新的,3 是最旧的:

  • 提交 1
  • 提交 2
  • 提交 3

如何删除提交 1 和 2,但保留更改并将其提交到 commit 3

【问题讨论】:

标签: git


【解决方案1】:

要重置最后两个提交,您可以使用git reset HEAD~2,它将删除提交。删除提交后,您可以修改最旧的提交,使其包含提交 1 和提交 2 的更改,git add --all 然后 git commit --amend

【讨论】:

  • 如果你重置两个提交然后修改而不是仅仅提交,你将在历史上进行一次提交并影响commit 3的父级。
  • 不知道你说的one commit too farimpact commit 3 parent是什么意思,能详细点吗?我认为如果我们 git reset HEAD~3 而不是 2 就会发生这种情况。如果我们只是进行新的提交,不是 commit 3, new commit 而不是 commit 3 自己拥有所有更改吗?
  • 第一个 reset 返回 2 次提交,所以此时 HEAD 指向 commit 3。然后git commit --amend 意味着重新做之前的提交,所以commit 3parent
  • @RomainValeri git commit --amend 重做 current 提交。我不确定如何重做前一个(因为它也会影响当前的,所以在这种情况下每个--amend 都会改变 2 个提交)
  • 我在这里检查了oreilly.com/library/view/git-pocket-guide/9781449327507/…,它根本不会影响父母,我想你@RomainValeri 可能在某处读过并且在这种情况下对previous commitprevious commit 有错误的理解表示last commit,不表示last 提交的previous
【解决方案2】:

您可以运行 git reset --soft HEAD~2 将 HEAD 分支移回较旧的提交(您要保留的最新提交)。

然后简单地再次运行 git commit 并更改您的愿望。在此之前添加您要保留更新提交的所有文件。

如果您想了解这方面的详细信息,请通过下面的链接。 Git-Reset Demystified

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 2016-08-10
    • 2012-04-28
    • 2018-07-20
    • 2013-03-24
    • 2014-02-02
    • 2016-01-11
    • 2011-11-01
    相关资源
    最近更新 更多