我有一个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
中的任何更改,因为分支已经分歧。
有没有办法合并或挑选6d53b1c
到master
,这会使历史看起来好像提交只是同一轨道上的其他提交之一?从本质上讲,这就是我想要的结果(只要master
和origin/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>
答案 0 :(得分:2)
最好rebase
master
origin/master
在master
之上工作,就像这样(在本地git rebase origin/master
分支上时),而不是挑选:
origin/master
这将为您提供所需的线性历史记录,然后您可以转到{{1}}。
您可以阅读有关rebase
at the official Git docs的更多信息。
答案 1 :(得分:1)
从主分支运行git rebase origin/master
或git rebase @{u}
应该可以解决问题。但要小心。 Rebase默认跳过合并提交(由你在master上引入),并且使用git rebase -p
(不要跳过合并提交)通常也不是你想要的。
您可以使用git pull --rebase
一步一步获取和变基。
答案 2 :(得分:1)
$ git pull --rebase
只会在6d53b1c
之上重放origin/master
(所以你得到一个新提交,新哈希,同样的效果)。
您有一个没有合并的线性历史记录,但“语言修复”将在 726523b
之后 。