推送到远程Git存储库而不记录单个本地更改

时间:2017-11-24 09:15:25

标签: git

我想将更改推送到远程Git存储库,使得自上次提取以来所有对本地存储库的提交都不会被远程记录。

实际上,一旦我推入远程注册表,就应该忘记多个本地更改日志消息(或总结为例如"big change 2",如下例所示)。许多“小”本地提交应该显示为一个“大”远程提交。所以我想阅读这样的日志消息:

git log remote branch
# big change 1
git log branch
# small change 1
# small change 2
# big change 2
git push remote branch
git log remote branch
# big change 1
# big change 2

这可以使用git命令,如果可以,怎么做?

1 个答案:

答案 0 :(得分:2)

是的,它被称为挤压。我通常会使用交互式rebase功能。

首先,在之前找到提交,这是你想要成为压缩提交的最早提交的一部分:

$ git log --oneline
701c7f8 (HEAD -> master) commit c
4c0270a commit b
8ca1f6e commit a
bb0a92c (origin/master) previous commit

然后执行git rebase -i <commit>

$ git rebase -i bb0a92c

您配置的编辑器将打开一个列表,其中列出了作为rebase操作一部分的提交,从最旧的提交开始:

pick 8ca1f6e commit a
pick 4c0270a commit b
pick 701c7f8 commit c

# Rebase bb0a92c..701c7f8 onto bb0a92c (3 commands)
#
# 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
# d, drop = remove commit

将前三行更改为:

pick 8ca1f6e commit a
squash 4c0270a commit b
squash 701c7f8 commit c

或者,实际上,第一个字母就足够了:

pick 8ca1f6e commit a
s 4c0270a commit b
s 701c7f8 commit c

保存并退出编辑器。另一个编辑器实例将为您提供编辑结果压缩提交的提交消息的机会,最终结果将是一个提交,其中包含提交8ca1f6e4c0270a701c7f8的更改。< / p>