我的git对象图如下所示。我想将提交2fb14b7
,39224ad
,fe9252d
和3e7a060
压缩到一次提交中。
* 650c464 (temp) adding hw2.txt
| * dd3674a (master) added hw3
| | * 8dc0857 (FIX_REVIEW_COMMENTS) added hwa
| |/
| * c39d943 hw2 added in master
| | * e2a1c13 (HEAD, refs/stash, trying_to_squash) WIP on temp: 2fb14b7 hw7
| | |\
| | | * 429b1de index on temp: 2fb14b7 added hw7
| | |/
| | * 2fb14b7 <-- added hw7
| | * 39224ad <-- (another_branch) added hw3
| | * fe9252d <-- hw2 added in master
| | * 3e7a060 <-- adding hw2.txt
| |/
|/|
* | ba55177 (old_fixes) added hw4
|/
* a1ede1f added another hello world to hw1
* 2ea750a added hw1
以下是我的尝试(并且不明白为什么它不起作用)。
Q1。为什么这不会挤压?
$ git checkout 2fb14b7 -b try_to_commit
$ git merge --squash 3e7a060
(nothing to squash)Already up-to-date.
$
Q2。这对我的存储库有什么作用?
$ git rebase --interactive 3e7a060
$ # I choose pick for the first commit object, and squash for the rest
$ # but somehow this complicates my repository graph even more!
答案 0 :(得分:0)
从 2021 年(8 年后)更新:您将不再not use git checkout
,但是 git switch
git switch -c try_to_commit 2fb14b7
<块引用>
为什么这不挤压?
因为您要将父(过去)提交 (3e7a060) 合并到新的 2fb14b7
| | * e2a1c13 (HEAD, refs/stash, trying_to_squash) WIP on temp: 2fb14b7 hw7
| | |\
| | | * 429b1de index on temp: 2fb14b7 added hw7
| | |/
| | * 2fb14b7 <-- added hw7 (more recent commit)
| | * 39224ad <-- (another_branch) added hw3
| | * fe9252d <-- hw2 added in master
| | * 3e7a060 <-- adding hw2.txt (past old commit)
我宁愿在过去的提交上创建分支,并压缩合并最近的提交:
git switch -c try_to_commit 3e7a060
git merge --squash 2fb14b7
这对我的存储库有什么影响?
git rebase --interactive 3e7a060
它尝试在 3e7a060 之上重放当前分支 try_to_commit
:这应该允许选择/压缩提交,但不要忘记然后在重放分支之上重放 e2a1c13。
我宁愿重新设置由 e2a1c13 而不是 3e7a060 制成的所有分支 try_to_commit,并使用 Git 2.18, Q2 2018, --rebase-merges
option:
git switch -c try_to_commit c39d943
git rebase --rebase-merges --interactive 3e7a060
请注意,消息 (nothing to squash)Already up-to-date
将随 git 2.32(2021 年第二季度)发生变化:信息性消息“Already up-to-date
”的一些变体已被改写。
请参阅 commit ad9322d 的 Josh Soref (jsoref
)(2021 年 5 月 2 日)。
请参阅commit 80cde95的Eric Sunshine (sunshineco
)(2021 年 5 月 2 日)。
(2021 年 5 月 11 日于 Junio C Hamano -- gitster
-- 被 commit 5feebdd 合并)
merge
:修复交换的“最新”消息组件合著者:Eric Sunshine
签字人:Josh Soref
签字人:Eric Sunshine
在 git-merge
中将 man(1c7b76b) 从 shell 重写为 C(“Build in merge”,2008-07-07,Git v1 .6.0-rc0 -- merge) 意外地转换了消息:
Already up-to-date. (nothing to squash)
到:
(nothing to squash)Already up-to-date.
由于相反的 printf()
参数。
尽管多年来受到以下方面的影响,但这个问题并未引起注意:
i18n
:git-merge
基本消息”,2011-02-22,Git v1.7.5-rc1 -- merge)i18n
:合并:标记要翻译的消息”,2016 年 6 月 17 日,Git v2.10.0-rc0 -- merge 列在 {{3} }})treewide
: 更正几个 , 2017-08-23, Git v2.15.0-rc0 -- 7560f54 列在 merge 中) (treewide: 更正几个“最新”到“最新”,2017-08-23)。通过将消息恢复到其预期顺序来修复它。