Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并没有提交日志的GIT分支_Git_Merge - Fatal编程技术网

合并没有提交日志的GIT分支

合并没有提交日志的GIT分支,git,merge,Git,Merge,目前,当我使用GIT时,我为每个作业创建一个分支,并在完成之前进行各种提交。然后我与我的主分支合并并向上游推进。我可能在任何时候都会有几个分支机构,而且在工作中途,随着事情的发生,我也会在它们之间切换 但这些承诺中的大多数只是保存点,也就是说,在大计划中没有那么重要。因此,当我合并分支时,我希望分支日志没有与主日志合并 有没有一种方法可以合并下面提交g的日志消息(而不是提交c或e) 有,但这是胡说八道。你为什么要这么做?您将丢失所有分支历史记录和信息 您可以使用g的提交消息进行合并提交,然后使用

目前,当我使用GIT时,我为每个作业创建一个分支,并在完成之前进行各种提交。然后我与我的主分支合并并向上游推进。我可能在任何时候都会有几个分支机构,而且在工作中途,随着事情的发生,我也会在它们之间切换

但这些承诺中的大多数只是保存点,也就是说,在大计划中没有那么重要。因此,当我合并分支时,我希望分支日志没有与主日志合并

有没有一种方法可以合并下面提交g的日志消息(而不是提交c或e)


有,但这是胡说八道。你为什么要这么做?您将丢失所有分支历史记录和信息

您可以使用g的提交消息进行合并提交,然后使用
--第一个父项
选项浏览历史记录

如果您真的想从分支中丢失历史记录,请使用
git merge--squash
,但我不建议这样做

编辑

如果你不高兴,因为你不认为你的历史很干净,你可以使用Git的:

您可以从现有分支追溯编辑旧提交和创建新提交(实际上是重写它)。它允许您改写提交消息、拆分提交、将提交压缩为单个提交、重新排序提交等

只有在尚未发布分支(即,它只是一个私有分支)时,才应使用重定基址,因为如果有人继续使用旧的(重定基址之前)分支,它会让其他开发人员头疼,并可能在以后导致合并问题。

如“”中所述,如果您的提交
c
e
是使用前缀为
fixup的注释完成的
,那么,
rebase--interactive--autosquash
(git1.7+,2010年2月)就可以完成您想要的功能

fixup指令,您可以在提交消息中保持压缩“不可见”,同时仍然可以使用--autosquash选项从自动提交重新排序中获益

通过
修正提交前缀,可以定义别名

[alias]
    fixup = !sh -c 'git commit -m \"fixup! $(git log -1 --format='\\''%s'\\'' $@)\"' -
    squash = !sh -c 'git commit -m \"squash! $(git log -1 --format='\\''%s'\\'' $@)\"' -
<> >代码>修复程序< /代码>别名将适用于那些“提交(哪些)只是保存点,即在宏方案中不是很重要的”。

我认为合并——Spase在使用“分支-每个特征”的方法时非常有用。我在临时分支中的提交历史完全是垃圾,毫无意义。我真的不想再看到这段历史,而不仅仅是跳过它


当提交转到代码审阅时,不要创建额外的提交,这一点很重要。

我想补充一下这个问题:
git log
是否有办法只显示非来自中间提交的消息,如
c
e
?@EOL:除非我误解了你,这正是
--first parent
选项(knittl提到)所做的。对于合并提交,第一个父级来自“合并到”分支,第二个父级来自“合并到”分支,因此遵循第一个父级(通常)意味着有效地遵循您所在分支的历史。@Jefromi:谢谢您指出这一点。实际上,我的意思与我所写的相反:如何从
git log
隐藏
d
?(我有一个设置,分支合并到一个简单的Python 2.6版本中,因此合并到分支中的日志没有那么有趣。)@Adam:我完全同意knittl;您不应该使用
merge--squash
,您应该只使用
log--first parent
来避免查看合并的提交。如果您想首先清理它,
git-rebase-i
-interactive
)确实是一种方法,我想您会发现它非常直观。您可以阅读文档,但第一次尝试时(例如,
git-rebase-i^job
),应该非常清楚您可以做什么。只是不要在已发布的分支上使用它!我认为merge-squash是完全合理的,事实上,我在OP解释的相同情况下也使用了它:当本地分支上的大多数提交都是“保存点”时,没有什么特别的东西需要共享。如果保留了执行工作的分支,就不会丢失提交历史记录。我发现,当你将一个分支合并到你的主分支中,并且提交与其他人的提交合并时,很难回到中间的某个先前的提交并成功编译。当使用“功能分支”方法时,详细的历史记录保存在特定的分支中,
master
只保存LEEP合并历史。“有,但这是胡说八道…”-为什么您希望在master从未遇到过诸如“修复内存错误”这样的消息时,在dev分支上出现在master中?不准确的日志是审计和C&A的噩梦。我不得不同意。如果您一直将提交作为WIP分支推送到远程服务器,那么就无法重新设置基础并修复历史记录。对于小功能分支,这是完全合法的。没错,这在中等规模的团队中是非常常见的工作流。据我所知,您只陈述了您的意见。您没有回答OP的问题“有没有一种方法可以只合并下面提交g的日志消息(而不是提交c或e)?”答案是“合并--挤压”,这就是OP想要的。所有其他的词都被添加进来,以解释为什么“合并——挤压”并不总是像许多人认为的那样“邪恶”。
[alias]
    fixup = !sh -c 'git commit -m \"fixup! $(git log -1 --format='\\''%s'\\'' $@)\"' -
    squash = !sh -c 'git commit -m \"squash! $(git log -1 --format='\\''%s'\\'' $@)\"' -