如何执行git重置而不丢失其他分支以前的一些提交

如何执行git重置而不丢失其他分支以前的一些提交,git,Git,这就是我的git日志现在的样子: git log --topo-order --reverse --pretty=oneline 50d035a5a12db8a0b23f4910a0e387f1ad38524c 0 49c9fef259eb54182da6d70fa0425474accb29e0 3 a1108badac40942296d9c9d734a561a645144914 7 1d7e5ea36224169db465d2e413c36895b02cafea 11 c327029ebf8c

这就是我的git日志现在的样子:

git log --topo-order --reverse --pretty=oneline
50d035a5a12db8a0b23f4910a0e387f1ad38524c 0
49c9fef259eb54182da6d70fa0425474accb29e0 3
a1108badac40942296d9c9d734a561a645144914 7
1d7e5ea36224169db465d2e413c36895b02cafea 11
c327029ebf8c442c45aaef090236650b50fb5e47 1
c64fcac8dd676084caacea4e20a0409926be7054 5
1e1f9e389341e4161f2aa8d6f868346d76b21e33 9
e98be40ea2066b65a980de20200f036d2f37b027 2
e5f8dfe7c8bd9d7e02eae85a5c534e2d2db23f4a 6
1439d018ed902b9fde247b8568dc0df1539700e5 10
663f06f969597ddf1a6eeb9ec7921775c7f1bc02 Merge branch 'b'
a9b044cf716d6de969ed0649017bf61cae3e9421 4
b8a76a56c5f29c63b82dd823ec0b5b45abcd655c 8
6c266c5bb7106821b63d7e2ddf09347022f570ac 12
9162a13adb1642f8434d0211cf15bf4ac06b9a4b Merge branch 'd'
a704f3284be8289a50468215a12f5a214ae6ab4f (HEAD -> master, 
origin/master, origin/HEAD) Merge branch 'master' into c
我想将其重置为“1e1f9e389341e4161f2aa8d6f868346d76b21e33”sha1(从顶部开始的第7次提交)。但当我这样做时,我丢失了之前发生的其他几次提交。我意识到重置应该删除给定提交之后发生的所有更改,但在本例中,它也删除了之前发生的更改

git reset --keep 1e1f9e389341e4161f2aa8d6f868346d76b21e33
git log --topo-order --reverse --pretty=oneline
50d035a5a12db8a0b23f4910a0e387f1ad38524c 0
c327029ebf8c442c45aaef090236650b50fb5e47 1
c64fcac8dd676084caacea4e20a0409926be7054 5
1e1f9e389341e4161f2aa8d6f868346d76b21e33 (HEAD -> master) 9

带有消息“3”、“7”和“11”的提交到哪里去了?如何才能不丢失这些提交?

由于您在将这些提交
合并到master之前跳到某个点,因此它们不会显示在您的
日志中。如果您只想在存储库中保持对提交
3
7
11
的简单引用,那么可以在最顶端的提交处创建
标记或
分支
(在本例中为
11

然后您需要
将它合并回master;或者
rebase
将其放在master之上(但这将重新写入提交)


您的log命令正在按正确的顺序显示提交,并且您正在使用--reverse,首先阅读关于git log[git log]()的内容是来自分支
b
d
的提交3、7和11?您跳到了合并
b
d
之前的某个点。3、7和11是从不同分支合并的提交,是的,它们是在提交“1e1f9e389341e4161f2aa8d6f868346d76b21e33”之后合并的。我如何保存更改3、7和11?您是否只想确保可以在回购中轻松地再次访问这些提交?或者您真的希望这些提交的内容位于您重置到的当前代码库中吗?我希望这些提交所做的更改与以前的SHA1相同。当我将这些更改合并回主控时,它们将显示新的提交ID(我希望所有更改都具有其原始提交ID)。我希望所有提交都达到任何sha1指定的点。有什么方法可以实现吗?合并分支
b
的提交不应该重写它们。如果您将分支
b
重设到master上,这将重写它们。这很有帮助。我意识到我做错了什么。谢谢
git tag <tag name> 1d7e5ea36224169db465d2e413c36895b02cafea 
git branch <branch name> 1d7e5ea36224169db465d2e413c36895b02cafea 
git merge 1d7e5ea36224169db465d2e413c36895b02cafea