我和我的同事在同一个存储库上工作,而我的同事确实犯了错误,他编辑了我的文件然后推了推。
问题是我目前也在同一个文件上工作,所以如果我提取它,它将删除我的所有作品。
文件是二进制的,因此我无法从文本编辑器进行编辑。这正是对当前情况的准确解释:
提交1.我制作了一些二进制文件,例如:a.bin,b.bin,c.bin,并按提交推送到主分支[1]
提交2.我的同事拉了提交[1]并推动了他的工作[2]
提交3.我的同事不小心编辑了我的二进制文件:a.bin,b.bin,c.bin但他只是按提交推送[3]
承诺4+:我的同事只是继续推..
所以我想要的只是回滚提交,回到旧的特定提交。我搜索了git rebase和git revert,但它似乎对我不起作用。
我听说使用合并也有效,但我希望我的历史保持清洁!
我想要的只是将所有内容都恢复到旧提交,但它一直说你有一些未合并或未上传的文件,并且保持失败。我只想覆盖旧文件。
我该如何解决这个问题?
答案 0 :(得分:3)
尝试对旧提交执行git reset
。然后,您可以执行git push --force
更新遥控器。但是,这会导致对项目历史记录进行一些修改,并且您的同事可能必须再次克隆回购而不是拉动。此外,如果出现未合并/未合并的路径,请尝试事先执行git stash
。
答案 1 :(得分:1)
在回滚到旧提交之前,请git status
确保您的工作树现在已清理。
然后您可以通过以下命令回滚到指定的提交(例如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
强制将远程仓库更改为指定的提交。
答案 2 :(得分:0)
您可以使用以下命令从提交[1]恢复二进制文件:
$ git show SHA1:path/to/file >path/to/file
示例,前提是二进制文件的“好”版本在commit 7bb43ac:
中$ git show 7bb43ac:bin/a.bin >bin/a.bin
对他们三个中的3个做同样的事情,然后提交并推送。