2

在 GitI 中有以下情况:

o "ok" b6ca869   [my_branch*]
|
o "ok" 479d27c
|
o "ok" c80fad5
|
o "ok" 8f7fe87
|
o "master commit message" [master][remotes/origin/master]

我想压缩这 4 个“ok”提交并更改消息

o "my_branch commit message"    [my_branch*]
|
o "master commit message" [master][remotes/origin/master]

所以我要做的是

git rebase --interactive master

并打开了 GNU nano(我在 Ubuntu 上)编辑器

GNU nano 2.2.2             File: /home/.git/modules/src/android/frameworks/base/rebase-merge/git-rebase-todo                                

pick 8f7fe87 ok
pick c80fad5 ok
pick 479d27c ok
pick b6ca869 ok

# Rebase aeedb8f..b6ca869 onto aeedb8f
#
# 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
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

据我了解,我必须编辑此文件,但实际上我不知道如何。

4

3 回答 3

2

您需要将最后 3 个提交压缩到第一个提交,因此(s代表squash):

pick 8f7fe87 ok
s c80fad5 ok
s 479d27c ok
s b6ca869 ok

保存然后退出,应该会弹出一个包含所有提交消息的新缓冲区。只需使用/修改您最后想要的提交,保存并退出。

于 2014-04-09T10:25:19.430 回答
1

您可以将最后 4 个提交压缩在一起;因为您在本地提交了它们。为此,您可以将文件编辑为:

pick 8f7fe87 ok
s c80fad5 ok
s 479d27c ok
s b6ca869 ok

之后,您将能够更改(组合)提交消息。

但是,这不会在最后一次提交时用“主提交消息”压制它们。问题是您的“主提交”已被推送到服务器;因此您不能简单地将提交附加到已推送到服务器的提交中。

该提交具有一定的“哈希”代码;并且因为其他用户可能已经提取了该代码;git 不允许(或不容易)附加到已经推送到服务器的提交。如果你想这样做,你可以看到这个问题

于 2014-04-09T10:26:54.247 回答
0

把下面三个picks 改成squash,然后保存退出。将弹出另一个编辑器,允许您更改提交消息。

如果您出于任何原因想要撤消变基,请查看git reflog. 它将向您显示变基之前状态的 sha1,您可以通过执行git reset --hard sha1. 还有一个引用 reflog 的快捷方式,git reset --hard @{1}

于 2014-04-09T10:25:56.033 回答