Git 签出 <commit> 然后提交并保留所有提交

Git checkout <commit> and then commit and retain all commits

我有一个问题要在 Git 上解决,这是我们执行的步骤顺序

假设我在 master 上进行了 3 次提交

- commit-1
- commit-2
- commit-3

现在我结帐到 commit-2

git checkout commit-2

然后我提交 4

现在我想保留主分支上的所有四个提交,我的主分支的 git log 应该查看以下顺序

Commit-3
commit-4
commit-2
commit-1

我如何实现它?

我会这样做

首先你提交提交 1、2、3

git commit -am "commit 1"
git commit -am "commit 2"
git commit -am "commit 3"

然后你回去提交 2

git checkout <<hash or HEAD^>

然后你提交 commit 4

git commit -am "commit 4"

然后将分离的头合并到新的头中

git merge <<reference of commit 3>>

如果有更好的方法请评论出来

结账 commit-2 后,您就进入了 detached HEAD mode

首先要做的是创建一个分支,您的 commit-4 是:

git checkout commit-2
git add ...
git commit -m "commit-4"
git checkout -b tmp

1--2--3 (master) 
    \
     4 (tmp) 

然后你可以在它上面变基 master 以便在 commit-4

上面重播 commit-3
git rebase tmp master

1--2--4--3 (master, tmp)