如何在git pull中的所有提交之后移动本地提交?

时间:2017-12-01 10:04:19

标签: git git-pull git-rewrite-history

这是我的情况。我一直在研究一个功能并进行了本地提交。我继续工作。与此同时,一位同事推动了我需要的改变。其中一些更改与我正在处理的文件相同。

我目前有一些代码,在我从原点退出之前我需要藏匿 有没有办法提取代码,以便我的同事代码存在于我在提交历史记录中的最后一次本地提交之前? 我知道我的本地提交比我要提取的更早 我最终会得到这样的结果:

older commits -> my commit -> origin commit 1 -> origin commit 2 -> popped stash

但我想要的是:

older commits -> origin commit 1 -> origin commit 2 -> my commit -> popped stash

我能看到如何做到这一点的唯一方法是撤消我的本地提交,藏匿整个,然后拉出然后弹出存储。有没有办法做到这一点,以维持我的旧提交?

我刚看到git-rewrite-history这里有一个标签,所以有可能吗?

2 个答案:

答案 0 :(得分:3)

撤消并重新应用一系列提交称为rebase。要引入更改rebase而不是merge,您可以使用--rebase选项:

git stash
git pull --rebase origin master
git stash pop

答案 1 :(得分:1)

您可以使用git cherry-pick概念:

首先从commit-hash-before-my-commit输出中复制my-commitoriginal-commit-1original-commit-2git log的提交哈希值。

$ git log                 # First copy the commit hashes

$ git checkout -b b1      # create a new branch b1 (just for experiment)

$ git reset --hard <commit-hash-before-my-commit>

$ git cherry-pick <original-commit-1>
$ git cherry-pick <original-commit-2>
$ git cherry-pick <my-commit>
$ git stash pop

现在,git log应该根据需要显示提交历史记录。