我有一个带有一些分支的git服务器:
$ git log
commit 03a870730a0273f354236b4d724c4f3379b6d182
Author: Giovanni Antonioni <antonioni.giovanni9@gmail.com>
Date: Fri Jun 5 13:31:55 2015 +0200
Description 1
commit 4435b7718609c3622542b6b2a8d7a59994083044
Author: Giovanni Antonioni <antonioni.giovanni9@gmail.com>
Date: Fri Jun 5 10:30:59 2015 +0200
Description 2
commit 8a8bafdd6e0879b5ef726db13e786caffc65fb13
Author: Giovanni Antonioni <antonioni.giovanni9@gmail.com>
Date: Thu Jun 4 17:47:19 2015 +0200
Description 3
commit 3dddec8764330250cf7d57e2d18957e568a64c36
Author: Giovanni Antonioni <antonioni.giovanni9@gmail.com>
Date: Mon Jun 1 15:47:42 2015 +0200
我需要将项目状态带到第一个分支(3dddec87)并删除另一个分支。我怎么能从终端做什么?
答案 0 :(得分:2)
听起来您想要将分支重置回该提交(丢弃以后的提交)。在这种情况下,你可以做
git reset --hard 3dddec87
这会将分支和工作副本设置为指定的提交。
您可以使用git reflog
和另一个git reset
命令撤消此更改。
答案 1 :(得分:1)
可以通过
完成git checkout <commit>
所以对你来说就是
git checkout 3dddec8764330250cf7d57e2d18957e568a64c36
当然,如果你想丢弃你可以做的本地更改,但要小心:
git reset --hard 3dddec8764330250cf7d57e2d18957e568a64c36
第二种变体更好,因为它避免了最终结果 detached head.
感谢RJFalconer的评论。
答案 2 :(得分:1)
您提供的git log
的输出并未说明branches的任何内容。它显示当前分支上的最后四个提交。
如果您确实希望将项目置于提交3dddec87
的状态,那么您可以使用git reset --hard
git reset --hard 3dddec87
此命令会丢弃您在3dddec87
之后执行的三次提交。它将所有内容(工作树,索引,当前分支)置于创建提交3dddec87
之后的状态。
在执行git reset --hard
之前,您可以创建一个指向当前backup
的新分支(我将其命名为HEAD
):
git branch backup
如果您做错了,它可以作为备份。
如果您对git reset --hard
后的情况感到不满意,可以返回使用git merge backup
或git reset --hard backup
的位置。
但如果您 满意并且您认为自己确实不需要列表中的前三个提交,则可以使用以下命令删除backup
分支:
git branch -D backup