如何找到恢复的git提交代码,我这样做了吗?

时间:2015-12-13 06:34:00

标签: git

我有一些遥控器,以及github的起源。我在一个遥控器上做了几次提交(A),我把它推到了原点但没有拉到另一个遥控器(B)。

即。远程A和原点都在C3:

C1->C2->C3

远程B在C1。我希望每个人都回到C1,所以提交链看起来像:

C1->C2->C3->C1

现在我想使用revert将所有内容恢复到状态B在(C3)。但要做到这一点,我需要提交代码或哈希或其他任何调用。我尝试了git show-refgit for-each-ref,但是它们显示了一些非常长的哈希值,而不是我认为表示每次提交的短代码,我会在还原时使用它?

如何在B上找到最新本地提交的代码,以便我可以将其用于还原,然后推送到原点?

根据我的理解,我应该能够在B处git fetch更新我的远程跟踪分支。然后我应该能够做一个恢复并推送到原点,然后在我的其他遥控器上pull以使所有内容都在同一页面上。正确?

3 个答案:

答案 0 :(得分:1)

很难遵循,所以我希望我能正确理解这个问题。

散列

首先 - 短和长哈希是相同的,都代表一个提交。短哈希只是长哈希的前几个字母。 从统计上来说,短哈希是唯一足以区分提交的。

你甚至可以使用较短的哈希值(我认为4个字符是最小长度)。只要只有一个长哈希匹配它。

我只使用一次提交创建的测试存储库示例:

git log --oneline
8ade0365763ae62667cbbf3aeb3c1753ac956450 Test

git show 8ade

还原

在我看来,你的建议方式是正确的。

B上的

fetchrebase revert所有最后的更改。你不需要git show-ref一个简单的git log --oneline就足够了。 push更改回原点。

B机器上的完整流程:

git fetch
git rebase origin/master
git log --oneline
git revert <hashs you want to revert>
git push origin master

强制推动

另一个选择是强制将B存储库推送到远程存储库:

git push origin master --force

这将从远程存储库中删除C2 / C3及其历史记录。 这种推动有点风险。 我建议在做之前先阅读一下: Force "git push" to overwrite remote files

答案 1 :(得分:0)

似乎存在术语混淆。如果分支A和B位于本地计算机上,则它们不会被称为遥控器。我对你的情况的解释:你有一个远程回购和两个本地分支:A和B.如果是这样,那么

git checkout A
git log
// find the commit you want to revert and copy it's hash
// format is like:
//  commit commit_sha <- that's what you need to copy
//  Author: ... 
//  Date:  
//
//        Commit name here
git revert commit_sha
git push
git checkout B
git pull

在您的情况下,您需要在执行push步骤之前还原2次提交:C2和C3

答案 2 :(得分:0)

首先,短和长可以用作同一件事。所以你使用它并不重要。

似乎你想在c3之后添加一个提交来将代码恢复到c1的状态。

我个人会查看c1的代码

 git checkout c1 -- .

检查c1中的代码,然后可以提交结果而不重写历史记录