Git:把旧提交拉成主人

时间:2018-02-12 16:47:36

标签: git commit vcs-checkout

我在共享驱动器上初始化了一个裸存储库并将其克隆到我的本地驱动器上。我在本地进行更改,添加,提交并推送(git push origin master)。我在另一台计算机上执行相同的操作,只需git pull即可在计算机之间进行任何更改。我正在努力学习如何恢复旧的版本"在我需要的情况下,我的代码。

首先我结帐

git checkout "commit #"

然后我尝试git add -Agit commit -m "msg"

当我git push origin master我得到"一切都是最新的"当我git checkout master并尝试在主人身上拉出旧的变化时,它并没有得到它们。关于如何让它发挥作用的任何想法?

1 个答案:

答案 0 :(得分:0)

提交由SHA-1哈希引用。您可以使用这些哈希来引用任何提交。例如,您可以使用

签出特定提交
git checkout <sha-1 hash>

其中<sha-1 hash>是您的仓库中任何提交的有效哈希。请谨慎使用此命令,因为您所做的任何新提交都不属于任何分支。如果要进行更改并提交它们,则应首先创建分支:

git checkout -b new-branch

new-branch更改为描述您正在进行的工作的任何名称。

如果要将master重置为先前的提交,则可以使用

git checkout master
git reset <sha-1 hash>

这将保留本地副本中的所有更改,同时删除您所做的所有提交。如果您还要清除所有更改,请使用--hard

git reset --hard <sha-1 hash>

现在您需要强制推送到遥控器:

git push -f origin master

对这些命令要非常小心。如果您正在与团队合作,并且您的任何团队成员已经撤消了之前的更改,那么他们仍会拥有这些更改的本地副本。强制推动掌握将导致与其他人的本地副本冲突,并且总体上会引起每个人的头痛。