如何在 git 拉动中将本地提交移动到所有提交之后?
How can I move a local commit to after all commits in a git pull?
这是我的情况。我一直在研究一项功能并进行了本地提交。我继续工作。与此同时,一位同事推动了我需要的改变。其中一些更改在我正在处理的同一文件中。
我目前有一些代码需要在从源中提取之前隐藏起来。
有没有办法提取代码,以便我同事的代码在提交历史记录中最后一次本地提交之前就存在?
我知道我的本地提交比我要提取的要早。
我将以这样的方式结束:
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
的标签,所以这可能吗?
可以使用gitcherry-pick
概念:
首先从 git log
输出中复制 commit-hash-before-my-commit
、my-commit
、original-commit-1
、original-commit-2
的提交哈希。
$ 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
应该会显示您想要的提交历史记录。
撤消和重新应用一系列提交称为 rebase
。要引入更改和 rebase
而不是 merge
,您可以使用 --rebase
选项:
git stash
git pull --rebase origin master
git stash pop
这是我的情况。我一直在研究一项功能并进行了本地提交。我继续工作。与此同时,一位同事推动了我需要的改变。其中一些更改在我正在处理的同一文件中。
我目前有一些代码需要在从源中提取之前隐藏起来。
有没有办法提取代码,以便我同事的代码在提交历史记录中最后一次本地提交之前就存在?
我知道我的本地提交比我要提取的要早。
我将以这样的方式结束:
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
的标签,所以这可能吗?
可以使用gitcherry-pick
概念:
首先从 git log
输出中复制 commit-hash-before-my-commit
、my-commit
、original-commit-1
、original-commit-2
的提交哈希。
$ 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
应该会显示您想要的提交历史记录。
撤消和重新应用一系列提交称为 rebase
。要引入更改和 rebase
而不是 merge
,您可以使用 --rebase
选项:
git stash
git pull --rebase origin master
git stash pop