这是我的情况。我一直在研究一个功能并进行了本地提交。我继续工作。与此同时,一位同事推动了我需要的改变。其中一些更改与我正在处理的文件相同。
我目前有一些代码,在我从原点退出之前我需要藏匿 有没有办法提取代码,以便我的同事代码存在于我在提交历史记录中的最后一次本地提交之前? 我知道我的本地提交比我要提取的更早 我最终会得到这样的结果:
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
这里有一个标签,所以有可能吗?
答案 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-commit
,original-commit-1
,original-commit-2
,git 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
应该根据需要显示提交历史记录。