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

wgmfuz8q  于 2023-11-15  发布在  Git
关注(0)|答案(4)|浏览(134)

我们需要及时返回到某个特定的提交。对master进行了一些意外的更改。尝试将其还原的操作太深,因此master处于错误的状态。我们现在希望master返回到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让每一个简单的任务都变得困难,而且它会给你带来不必要的痛苦和折磨。
如何提交和推送更改?

lyr7nygr

lyr7nygr1#

快速解决方案:git push -f
这将强制推送并覆盖远程历史记录。如果有其他人使用此远程仓库:请不要这样做!
其他从远程仓库拉取的人会遇到问题,因为他们的历史不再是仓库历史的子集。

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

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

然后,这会在你的历史记录上创建一个新的提交,描述回到你想要的版本所需的更改。

qlvxas9a

qlvxas9a2#

git reset不会还原你的更改。它只会回到一个旧的状态。由于最新的提交已经在远程,而你没有做任何本地更改,你将无法推送。
使用git revert <hash>git revert <hash1>..<hash2>。这将创建一个新的提交,恢复您指定的提交的更改。然后推送代码。

vyswwuz2

vyswwuz23#

分支main到不需要的。在本地和远程删除main在好的版本 checkout 。在好的版本创建新的主分支并作为main推送到远程。
不知道这是什么操作要求,但它的工作。

t3psigkw

t3psigkw4#

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

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"

字符串

相关问题