返回存储库中的特定修订后提交并推送更改?

时间:2016-07-06 17:13:25

标签: git git-commit

我们需要及时回到特定的提交。掌握了一些意外的变化。尝试将它还原得太深,所以主人处于糟糕状态。我们现在想让主人回到66ada4cc61d62afc。

根据git revert back to certain commit

$ git reset --hard 66ada4cc61d62afc
HEAD is now at 66ada4c Updated documentation

然后,尝试提交它:

$ git add *.h *.cpp
$ git commit -m "Go back to Commit 66ada4cc61d62afc"
On branch master
Your branch is behind 'origin/master' by 16 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working directory clean

最后:

$ git push
To https://github.com/weidai11/cryptopp.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/weidai11/cryptopp.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

现在,一切都正是我想要的。我不知道为什么Git遇到麻烦,以及Git正在谈论什么。如果Git做了它被告知的事情,那肯定会很好。但是,唉,Git使每一项简单的任务变得困难,并且会造成不必要的痛苦和痛苦。

如何提交并推送更改?

3 个答案:

答案 0 :(得分:4)

git reset无法恢复您的更改。它会回到一个较旧的州。由于最新的提交已经在遥控器中,并且您没有进行任何本地更改,因此您无法推送。

使用git revert <hash>git revert <hash1>..<hash2>。这将创建一个新的提交,它将恢复您指定的提交的更改。然后推送代码。

答案 1 :(得分:3)

快速解决方案:git push -f

这会强制推送并覆盖远程历史记录。 如果还有其他人使用此远程存储库:请勿执行此操作!

从远程存储库中提取的其他人将遇到问题,因为他们的历史记录不再是存储库历史记录的子集。大多数项目都禁止强行推动。

更好的解决方案是为您的更改创建新提交。任

  • git revert hashes
  • git checkout oldversion .; git add/commit

然后,在历史记录之上创建一个新的提交,描述返回到您想要的任何版本所需的更改。

答案 2 :(得分:-2)

为了避免将一组错误交换为另一组错误的部分解决方案,我执行了以下操作:

git clone https://github.com/weidai11/cryptopp.git cryptopp-old
git clone https://github.com/weidai11/cryptopp.git cryptopp-new

cd cryptopp-old
git checkout 66ada4cc61d62afc

cd ../cryptopp-new
cp ../cryptopp-old/*.h ../cryptopp-old/*.cpp .

git commit -am "Go back to Commit 66ada4cc61d62afc"