1

我有一个 git 存储库,它git log --graph --all为我提供了树的顶部:

* 726523b - (HEAD, master) Clean-up in .gitignore (2013-05-23 15:46:51 +0200) <Tomas Lycken>
* 5585a01 - Removed build-dependent elements (2013-05-23 15:13:16 +0200) <Tomas Lycken>
| * 6d53b1c - (origin/master) Language fix (2013-05-22 22:08:26 +0200) <Tomas Lycken>
|/  
* 3e6650e - Minor changes to readme and license, after moving back to github (2013-05-22 21:29:44 +0200) <Tomas Lycken>

现在,我想将提交提交6d53bcmaster中,但是为了获得我想要的历史记录,我更愿意选择将该提交提交到 master 分支(以避免合并提交和复杂的分支历史记录,当工作真的是线性时) . 但是当我这样做时,仍然保持原样,并且由于分支已经发散origin/master,我无法推动任何更改。master

6d53b1c有没有一种方法可以合并或挑选master,使历史看起来好像提交只是同一轨道上的其他提交之一?本质上,这就是我想要的结果(提交的顺序并不重要,只要masterorigin/master在同一个地方):

* 726523b - (HEAD, master, origin/master) Clean-up in .gitignore (2013-05-23 15:46:51 +0200) <Tomas Lycken>
* 5585a01 - Removed build-dependent elements (2013-05-23 15:13:16 +0200) <Tomas Lycken>
* 6d53b1c - Language fix (2013-05-22 22:08:26 +0200) <Tomas Lycken>
* 3e6650e - Minor changes to readme and license, after moving back to github (2013-05-22 21:29:44 +0200) <Tomas Lycken>
4

3 回答 3

3

与其挑选樱桃,不如在 上进行rebase本地master工作origin/master,就像这样(在本地master分支上时):

git rebase origin/master

这将为您提供所需的线性历史,然后您可以推送到origin/master.

您可以rebase在官方 Git 文档中了解更多信息。

于 2013-05-23T14:12:09.000 回答
2

运行git rebase origin/mastergit rebase @{u}从您的主分支运行应该可以解决问题。不过要小心。默认情况下,Rebase 会跳过合并提交(由您在 master 上引入),并且使用git rebase -p(不要跳过合并提交)通常也不是您想要的。

您可以使用git pull --rebase.

于 2013-05-23T14:13:45.377 回答
1
$ git pull --rebase

只会6d53b1corigin/master.

您有一个没有合并的线性历史,但“语言修复”将 726523b.

于 2013-05-23T14:15:01.533 回答