将origin / master移动到HEAD而不是合并

时间:2013-05-23 14:08:09

标签: git branching-and-merging git-merge

我有一个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>

现在,我希望将提交6d53bc转换为master,但是为了获取我想要的历史记录,我宁愿选择提交到主分支(以避免合并)提交和复杂的分支历史,当工作真的是线性的)。但是当我这样做时,origin/master仍然保持原样,我不能推动master中的任何更改,因为分支已经分歧。

有没有办法合并或挑选6d53b1cmaster,这会使历史看起来好像提交只是同一轨道上的其他提交之一?从本质上讲,这就是我想要的结果(只要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>

3 个答案:

答案 0 :(得分:2)

最好rebase master origin/mastermaster之上工作,就像这样(在本地git rebase origin/master 分支上时),而不是挑选:

origin/master

这将为您提供所需的线性历史记录,然后您可以转到{{1}}。

您可以阅读有关rebase at the official Git docs的更多信息。

答案 1 :(得分:1)

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

您可以使用git pull --rebase一步一步获取和变基。

答案 2 :(得分:1)

$ git pull --rebase

只会在6d53b1c之上重放origin/master(所以你得到一个新提交,新哈希,同样的效果)。

您有一个没有合并的线性历史记录,但“语言修复”将在 726523b之后