我想复制我的最后一次提交,我想从复制的提交(最后一次提交)进行新的提交以推送到远程分支。
我试过这段代码:
git rm -r .
git checkout HEAD~0 .
git commit -m "My new Commit"
但它没有用。有什么建议吗?
答案 0 :(得分:4)
如果您的历史记录为C-B-A
(其中A
是最新的),则必须更改某些内容才能在A
之上进行新的提交。您可以使用--allow-empty
标记绕过此标记,然后执行git commit --allow-empty
并在A
之上获得空提交,但提交将有所不同(因为父级,时间等等是不同的)。
你为什么要这样做?
答案 1 :(得分:1)
如果我错了,请纠正我,但我听起来像你一样,试图修改你的最后一次提交?例如对最后一次提交进行一些修正,并重新推出。
您可以使用--amend
标志执行此操作,这将更新当前分支上的最新提交。然后,您可以通过执行git push --force
或git push --force-with-lease
(在git 1.8.5中引入)推出修改过的提交,以确保您不会覆盖在修改您的位置时推出的任何更改提交。
强制推送是必需的,因为通过修改最新的提交,你实际上是将它们全部替换在一起,因此你需要强制推送以明确声明你想要摆脱之前的提交。
示例:
git commit --amend -a
git push --force-with-lease
答案 2 :(得分:1)
如果您的目的是在推送之前更改现有提交,
需要在本地进行完整更改并再次提交更改
这将在您的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&#39的选择更改为壁球将导致您看到的错误,但是如果您通过将文本更改为
而将c压缩为bpick 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>
将本地更改推送到远程存储库。