删除推送的提交并回滚到特定的提交
Remove pushed commits and rollback to specific commit
我和我的同事在同一个存储库上工作,我的同事犯了错误,他编辑了我的文件然后就推送了。
问题是我目前也在处理同一个文件,所以如果我提取提交,它会删除我的所有作品。
文件是二进制的,所以我无法从文本编辑器中进行编辑。这就是对当前情况的确切解释:
提交 1. 我制作了一些二进制文件,例如:a.bin、b.bin、c.bin 并作为提交 [1]
推送到主分支
提交 2。我的同事拉取提交 [1] 并推送他作为 [2]
工作的内容
提交 3。我的同事不小心编辑了我的二进制文件:a.bin、b.bin、c.bin 但他只是作为提交 [3]
推送
提交 4+:我的同事一直在推动..
所以我想要的只是回滚提交,回到旧的特定提交。我搜索了 git rebase 和 git revert,但它似乎对我不起作用。
我听说使用合并也可以,但我希望我的历史保持干净!
我想要的只是将所有内容恢复到旧提交,但它一直说你在那里有某种未合并或未暂存的文件,并且保持失败。我只想覆盖旧文件。
我该如何解决这个问题?
尝试对旧提交执行 git reset
。然后你可以做一个 git push --force
来更新遥控器。但是,这会导致对您的项目历史进行一些修改,并且您的同事可能不得不再次克隆存储库而不是拉取。此外,如果出现未合并/未暂存的路径,请尝试事先执行 git stash
。
您可以使用以下方法从提交 [1] 中恢复二进制文件:
$ git show SHA1:path/to/file >path/to/file
示例,前提是二进制文件的 "good" 版本在提交 7bb43ac 中:
$ git show 7bb43ac:bin/a.bin >bin/a.bin
对所有三个 3 执行相同的操作,然后提交并推送。
在回滚到旧提交之前,请确保您的工作树现在是干净的 git status
。
然后可以通过命令回滚到指定的commit(比如commit 2):
git reset --hard HEAD~2
注意: git reset --hard HEAD~n
会将当前分支重置为第 n
前一次提交作为 HEAD。如果要重置为提交 3,可以使用 git reset --hard HEAD~1
.
因此提交历史将如下所示:
Commit 2. My co-worker pull commit [1] and pushed what he worked as [2]
Commit 1. I made some binary files, for example: a.bin, b.bin, c.bin and pushed to master branch as commit [1]
要更新对远程仓库的更改,您可以使用git push -f
强制将远程仓库更改为指定的提交。
我和我的同事在同一个存储库上工作,我的同事犯了错误,他编辑了我的文件然后就推送了。
问题是我目前也在处理同一个文件,所以如果我提取提交,它会删除我的所有作品。
文件是二进制的,所以我无法从文本编辑器中进行编辑。这就是对当前情况的确切解释:
提交 1. 我制作了一些二进制文件,例如:a.bin、b.bin、c.bin 并作为提交 [1]
推送到主分支提交 2。我的同事拉取提交 [1] 并推送他作为 [2]
工作的内容提交 3。我的同事不小心编辑了我的二进制文件:a.bin、b.bin、c.bin 但他只是作为提交 [3]
推送提交 4+:我的同事一直在推动..
所以我想要的只是回滚提交,回到旧的特定提交。我搜索了 git rebase 和 git revert,但它似乎对我不起作用。
我听说使用合并也可以,但我希望我的历史保持干净!
我想要的只是将所有内容恢复到旧提交,但它一直说你在那里有某种未合并或未暂存的文件,并且保持失败。我只想覆盖旧文件。
我该如何解决这个问题?
尝试对旧提交执行 git reset
。然后你可以做一个 git push --force
来更新遥控器。但是,这会导致对您的项目历史进行一些修改,并且您的同事可能不得不再次克隆存储库而不是拉取。此外,如果出现未合并/未暂存的路径,请尝试事先执行 git stash
。
您可以使用以下方法从提交 [1] 中恢复二进制文件:
$ git show SHA1:path/to/file >path/to/file
示例,前提是二进制文件的 "good" 版本在提交 7bb43ac 中:
$ git show 7bb43ac:bin/a.bin >bin/a.bin
对所有三个 3 执行相同的操作,然后提交并推送。
在回滚到旧提交之前,请确保您的工作树现在是干净的 git status
。
然后可以通过命令回滚到指定的commit(比如commit 2):
git reset --hard HEAD~2
注意: git reset --hard HEAD~n
会将当前分支重置为第 n
前一次提交作为 HEAD。如果要重置为提交 3,可以使用 git reset --hard HEAD~1
.
因此提交历史将如下所示:
Commit 2. My co-worker pull commit [1] and pushed what he worked as [2]
Commit 1. I made some binary files, for example: a.bin, b.bin, c.bin and pushed to master branch as commit [1]
要更新对远程仓库的更改,您可以使用git push -f
强制将远程仓库更改为指定的提交。