繁体   English   中英

通过从远程存储库中获取数据然后提交来删除某些文件,现在想还原旧文件

[英]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存储库,因此您需要mergemerge到工作历史记录中,以防止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

您可以在文档中阅读git pull命令及其工作方式。


现在,解决您的特定问题。 是的,您可以恢复对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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM