如何执行git reset而不丢失其他分支的先前提交

时间:2018-08-21 20:11:55

标签: git

这是我的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”的提交到哪里去了?我怎么不丢失那些提交?

1 个答案:

答案 0 :(得分:1)

由于您在将这些提交merged提交到主提交之前跳到了某个点,因此这些提交未显示在您的log中。如果您只是想轻松参考存储库中的提交3711,则可以在以下位置创建tagbranch最高的提交(在本例中为11)。

然后,您需要merge将其恢复为主节点;或rebase将它放在master之上(但这会重写提交)。

git tag <tag name> 1d7e5ea36224169db465d2e413c36895b02cafea 

git branch <branch name> 1d7e5ea36224169db465d2e413c36895b02cafea 

您需要将--all传递给log命令以查看所有分支。


除了创建branchtag之外,您还可以merge11提交给master。

git merge 1d7e5ea36224169db465d2e413c36895b02cafea