如何在Git中将上次提交复制为新提交?

如何在Git中将上次提交复制为新提交?,git,Git,我想复制我的上一次提交,我想从复制的提交(上一次提交)中进行新的提交,以推送到远程分支 我尝试了以下代码: git rm -r . git checkout HEAD~0 . git commit -m "My new Commit" 但它没有起作用。有什么建议吗?如果您的历史记录是C-B-A(其中A是最新的),您必须更改某些内容才能在A之上进行新的提交。您可以使用--allow empty标志绕过此操作,只需执行git commit--allow empty,您将在A上获得一个空提交,但提交

我想复制我的上一次提交,我想从复制的提交(上一次提交)中进行新的提交,以推送到远程分支

我尝试了以下代码:

git rm -r .
git checkout HEAD~0 .
git commit -m "My new Commit"

但它没有起作用。有什么建议吗?

如果您的历史记录是
C-B-A
(其中
A
是最新的),您必须更改某些内容才能在
A
之上进行新的提交。您可以使用
--allow empty
标志绕过此操作,只需执行
git commit--allow empty
,您将在
A
上获得一个空提交,但提交将不同(因为父级、时间等不同)


你为什么要这样做?

如果我错了,请纠正我,但我听起来好像你在试图修改你的上一次承诺?e、 对上一次提交进行一些纠正性更改,并重新推出

您可以使用
--amend
标志执行此操作,这将更新当前分支上的最新提交。然后,您可以通过执行
git push--force
git push--force with lease
(在git 1.8.5中引入)来推送修改后的提交,以确保在修改提交时不会覆盖推送的任何更改

强制推送是必要的,因为通过修改最新的提交,您实际上是在一起替换它,因此您需要强制推送来明确声明您想要删除以前的提交

例如:

git commit --amend -a
git push --force-with-lease

如果您的目的是在推送之前对现有提交进行更改

  • 是否需要在本地进行完全更改,然后再次提交更改

  • 这将在git日志中列出两个提交

  • 将这两个提交合并为一个提交和推送

  • 要合并两个提交,请执行以下步骤

    说你的历史是

    $ git log --pretty=oneline
    a931ac7c808e2471b22b5bd20f0cad046b1c5d0d c
    b76d157d507e819d7511132bdb5a80dd421d854f b
    df239176e1a2ffac927d8b496ea00d5488481db5 a
    
    也就是说,a是第一个提交,然后是b,最后是c

    运行
    git-rebase--interactive HEAD~2
    可以为编辑器提供

    pick b76d157 b
    pick a931ac7 c
    
    # Rebase df23917..a931ac7 onto df23917
    #
    # Commands:
    #  p, pick = use commit
    #  r, reword = use commit, but edit the commit message
    #  e, edit = use commit, but stop for amending
    #  s, squash = use commit, but meld into previous commit
    #  f, fixup = like "squash", but discard this commit's log message
    #
    # If you remove a line here THAT COMMIT WILL BE LOST.
    # However, if you remove everything, the rebase will be aborted.
    #
    
    将b的“拾取”更改为“挤压”将导致出现您看到的错误,但如果改为通过将文本更改为“挤压”,将c挤压为b

    pick b76d157 b
    s a931ac7 c
    and save-quitting your editor, you'll get another editor whose contents are
    
    # This is a combination of 2 commits.
    # The first commit's message is:
    
    b
    
    # This is the 2nd commit message:
    
    c
    When you save and quit, the contents of the edited file become commit message of the new combined commit:
    
    $ git log --pretty=oneline
    18fd73d3ce748f2a58d1b566c03dd9dafe0b6b4f b and c
    df239176e1a2ffac927d8b496ea00d5488481db5 a 
    

    您可以使用
    git log
    复制上次提交

    git log --oneline -n 1
    

    您通常运行git push origin将本地更改推送到远程存储库。

    如果您只想复制上一次提交并在其他分支中作为新提交播放,尝试git cherry pick

    什么是
    --允许空的
    选项?可能的重复您想复制上一次提交并对其进行更改以创建新的提交,还是想在不做任何更改的情况下精确复制上一次提交?您的用例是什么?你想有不同的评论吗?那不会复制任何东西。它只是向你展示了你最后的承诺。