使用特定分支覆盖本地文件

时间:2015-06-25 08:39:16

标签: git

我有一个带有一些分支的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)并删除另一个分支。我怎么能从终端做什么?

3 个答案:

答案 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 backupgit reset --hard backup的位置。

但如果您 满意并且您认为自己确实不需要列表中的前三个提交,则可以使用以下命令删除backup分支:

git branch -D backup