如何将最后一次提交复制为Git中的新提交?

时间:2016-06-21 04:25:23

标签: git

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

我试过这段代码:

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

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

5 个答案:

答案 0 :(得分:4)

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

你为什么要这样做?

答案 1 :(得分:1)

如果我错了,请纠正我,但我听起来像你一样,试图修改你的最后一次提交?例如对最后一次提交进行一些修正,并重新推出。

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

强制推送是必需的,因为通过修改最新的提交,你实际上是将它们全部替换在一起,因此你需要强制推送以明确声明你想要摆脱之前的提交。

示例:

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

答案 2 :(得分:1)

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

  1. 需要在本地进行完整更改并再次提交更改

  2. 这将在您的git日志中列出两个提交。

  3. 将这两个提交合并为一个提交并推送。

  4. 要合并两个提交,请按照以下步骤进行操作

    说出你的历史

    $ 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&#39的选择更改为壁球将导致您看到的错误,但是如果您通过将文本更改为

    而将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 
    

答案 3 :(得分:1)

如果您只想复制最后一次提交并将其作为其他分支中的新提交播放,请尝试git cherry-pick

答案 4 :(得分:0)

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

git log --oneline -n 1

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