如何在git中合并两个提交?

3

我最近向我的git远程仓库推送了一个提交,现在我要提交另一个更改。

有没有一种方法可以将这些提交合并为一个提交?

3个回答

2
你可以使用交互式变基来实现这一点。
运行以下命令:
git rebase -i HEAD~2

您将在打开的编辑器中看到类似以下内容的东西:
pick 3e7ee36 Older commit message
pick fa20af3 Newer commit message

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
# ...

将较新的提交使用 fixupsquash 进行修正,即将较新的提交中的 pick 替换为 fixup,保存并退出文件。这将合并这两个提交并保留旧的提交信息。
pick 3e7ee36 Older commit message
fixup fa20af3 Newer commit message

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
# ...

我已经推送了之前的提交。这会有问题吗?我应该在主分支还是我当前正在工作的错误修复分支中执行“git rebase -i HEAD~2”? - Tumuluri V Datta Vamshi
git push --force 应该能为你解决这个问题。 - John Bupit
我应该在主分支还是我目前正在工作的 bugfix 分支上运行 "git rebase -i HEAD~2" 命令? - Tumuluri V Datta Vamshi
无论这2个提交在哪个分支中。 - John Bupit
感谢您的帮助,我已经成功合并了这两个提交,而且拉取请求已经自动更新。 - Tumuluri V Datta Vamshi

0

你是在使用命令行工作吗?

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


0

你需要执行 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接