我最近向我的git远程仓库推送了一个提交,现在我要提交另一个更改。
有没有一种方法可以将这些提交合并为一个提交?
git rebase -i HEAD~2
pick 3e7ee36 Older commit message
pick fa20af3 Newer commit message
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
# ...
fixup
或 squash
进行修正,即将较新的提交中的 pick
替换为 fixup
,保存并退出文件。这将合并这两个提交并保留旧的提交信息。pick 3e7ee36 Older commit message
fixup fa20af3 Newer commit message
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
# ...
你是在使用命令行工作吗?
1)如果你刚刚提交了分支my-branch
的提交A
并将其推送上去,然后你做了一些工作,你可以使用:
git add -A
然后跟着 git commit --amend
,这将把你的更改添加到你已经推送的提交中。然后使用 git push -f origin my-branch
2)如果你已经推送了提交A
,然后已经提交了B
到分支my-branch
,那么你可以执行以下操作:
git rebase --soft HEAD~
这将撤销提交B
,然后使用 git commit --amend
将更改添加到提交A
中,然后像上面一样使用 git push -f origin my-branch
你需要执行 rebase
命令
$ git init
$ touch readme
$ git add readme
$ git commit -m "Initial Commit"
[master (root-commit) 6dde006] Initial Commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme
$ touch a
$ touch b
$ git add a
$ git commit -m "First commit"
[master 74296cb] First commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
$ git add b
$ git commit -m "Second commit" --squash=HEAD
[master 9ba46ab] squash! First commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 b
$ git rebase HEAD~2 -i
简单地保存并关闭重新基础的编辑器,然后 Git 会询问您是否要为合并提交编写新消息,如有需要,您可以进行编辑。
[detached HEAD f855a0f] First commit
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
create mode 100644 b
Successfully rebased and updated refs/heads/master.
$ git log --oneline
cf855a0f First commitinsertions(+), 0 deletions(-)
6dde006 Initial Commit
如果你推送了第一个提交,你可以使用 force
选项更新远程分支,但要小心,如果有人已经拉取了你的更改,他们在你强制推送更改时将遇到大量问题:
git push origin master --force
git push --force
应该能为你解决这个问题。 - John Bupit