[英]Deleted some files by fetching data from remote repository and then commiting them, now want to restore old files
我是git的新手。 最近,我正在一个项目上,我在本地更新了一些文件,并提交了更新的文件,我尝试推送,但是远程存储库中有一个更新的文件,
自述文件
我没有的。 所以我通过运行此行来获取
git fetch
git checkout origin/client --README.md
git add README.md
git commit -m"new Commit"
git push
因此,现在我在本地丢失了更新的文件,并用远程存储库中的旧文件替换了。 我现在该怎么做才能取回本地更新的文件?
因此,我假设您在本地工作副本中第一次名为README.md
的文件时,该文件不属于存储库,而git clone
时。
有时,有人将文件添加到origin
存储库,因此您需要merge
其merge
到工作历史记录中,以防止commit
/ push
错误。 您git fetch
从存储库中git fetch
文件,现在,根据checkout
文档 ,实际上,您已经覆盖了本地README.md的内容:
更新工作树中的文件以匹配索引或指定树中的版本。
然后,提交新版本,该新版本与您获取和签出的原始版本相同。 然后,您git push
to origin。
此时,来自本地分支的所有编辑都在原始存储库中,并且README.md文件与获取时的原始文件相同。
我如何取回本地副本?
要看。 如果您创建了要在提取之前进行推送的本地提交,请尝试查找该提交的SHA并git从该提交中检出文件。 然后,如果有必要,创建一个新的提交并推送它。
如果没有,那么我需要了解有关您在提取之前所做的事情的更多信息。
首先,让我开始说,您不应该通过执行以下操作从远程存储库获取对文件的更改:
git fetch
git checkout remote/branch -- path/to/file
除非您想用远程存储库中的文件覆盖您的文件副本。 从概念上讲,这是解决通过选择自己身边所有的差异合并冲突的等价物。
合并来自远程仓库的更改的正确方法是:
git pull
要么
git pull --rebase
现在,解决您的特定问题。 是的,您可以恢复对README.md
文件的更改。
假设当前分支中的最新提交是消息"new Commit"
,则可以执行以下操作:
1)移动HEAD
,索引和工作目录到以前的承诺(即一个与您的更改README.md
):
git reset --hard HEAD^
2)在远程存储库的最新提交(例如, 其对README.md
进行了更改的提交)的基础上重新提交您的提交
git pull --rebase origin client
3)此时,您的提交将在远程存储库中的提交之后进行,并且它将包括您的更改(假设您已解决上一步中的所有冲突)。 现在,您可以安全地将提交推送到远程仓库了:
git push origin client
放手吧,如果您在本地提交更改,并且在推送后远程存储库拒绝了更改,这是因为文件冲突,在这种情况下,要做的一件事是更新本地分支,然后将分支与远程分支合并。
git pull //updating your branch
git merge branchname //merge your branch
之后,如果存在任何冲突,请解决并再次进行修改,因为您的分支将与您的远程分支保持一致,并且远程分支将允许您进行推送。
如果您丢失了修改,请使用以下命令
git log
并检查您的提交是否存在,如果找到它,只需将其重置为该提交的状态,则从其时间表开始的所有操作都将被撤消
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.