1

我的 git 对象图如下所示。我想将提交、、、2fb14b739224ad压缩fe9252d3e7a060一个提交中。

* 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!
4

1 回答 1

0

2021 年更新(8 年后):您将不再使用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

它试图在try_to_commit3e7a060 之上重播当前分支:这应该允许选择/压缩提交,但不要忘记在重播的分支之上重播 e2a1c13。

我宁愿重新设置所有分支 try_to_commit,由 e2a1c13 而不是 3e7a060 制成,并使用Git 2.18,Q2 2018,--rebase-merges选项

git switch -c try_to_commit c39d943
git rebase --rebase-merges --interactive 3e7a060

请注意,该消息(nothing to squash)Already up-to-date将随 git 2.32(2021 年第 2 季度)更改:信息性消息“ Already up-to-date”的一些变体已被改写。

请参阅Josh Soref ( )提交的 ad9322d(2021 年 5 月 2 日。 请参阅Eric Sunshine ( ) 的提交 80cde95(2021 年 5 月 2 日(由Junio C Hamano 合并——提交 5feebdd中,2021 年 5 月 11 日)jsoref
sunshineco
gitster

merge:修复交换的“最新”消息组件

合着:Eric Sunshine
署名:Josh Soref 署名
:Eric Sunshine

在1c7b76b ("Build in merge", 2008-07-07, Git v1.6.0-rc0 -- merge ) 中将( man )从 shell重写为 C意外地转换了消息:git-merge

Already up-to-date. (nothing to squash)

至:

(nothing to squash)Already up-to-date.

由于颠倒的printf()论点。

尽管多年来被以下问题所触及,但这个问题并未引起人们的注意:

  • 7f87aff(“教学/修复 pull/fetch -q/-v 选项”,2008-11-15,Git v1.6.1-rc1 --合并
  • bacec47(“ i18ngit-merge基本消息”,2011-02-22,Git v1.7.5-rc1 --合并
  • 切线由bef4830(“ i18n:合并:标记要翻译的消息”,2016-06-17,Git v2.10.0-rc0 --合并在批次 #5中列出)
  • 7560f54treewide:更正几个,2017-08-23,Git v2.15.0-rc0 -合并在批次 #7中列出)(树范围:将几个“最新”更正为“最新”,2017-08- 23).

通过将消息恢复到其预期顺序来修复它。

于 2021-05-15T06:48:20.150 回答