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

时间:2019-08-26 10:00:32

标签: git

我对git很陌生。最近,我正在一个项目上,我在本地更新了一些文件,并提交了更新的文件,我尝试推送,但是远程存储库中有一个更新的文件,

  

README.md

我没有的。因此,我通过运行此行

git fetch
git checkout origin/client --README.md

git add README.md
git commit -m"new Commit"
git push  

所以现在我在本地丢失了更新的文件,并用远程存储库中的旧文件替换了。我现在该怎么做才能取回本地更新的文件?

3 个答案:

答案 0 :(得分:0)

因此,我假设您第一次README.md时,在本地工作副本中有一个名为git clone的文件,该文件不属于存储库。

有一次,有人将文件添加到origin存储库中,因此您需要在工作历史记录中merge来防止commit / push错误。您git fetch从资源库中获取文件,现在,根据checkout documentation,您可以有效地覆盖本地README.md的内容:

  

更新工作树中的文件以匹配索引或指定树中的版本。

然后提交新版本,该新版本与您获取和签出的原始版本相同。然后,您git push开始。

这时,来自本地分支的所有编辑都在原始存储库中,并且README.md文件与获取时的原始编辑相同。

  

如何取回本地副本?

取决于。如果您创建了要在提取之前进行推送的本地提交,请尝试查找该提交的SHA并git从该提交中检出文件。然后,创建新的提交并推送(如果您愿意)。

如果没有,那么我需要进一步了解您在提取之前所做的事情。

答案 1 :(得分:0)

首先,让我开始说,您不应该通过以下操作从远程存储库获取对文件的更改:

git fetch
git checkout remote/branch -- path/to/file

除非您想用远程存储库中的文件覆盖您的文件副本。从概念上讲,这等效于通过为所有差异选择一方来解决合并冲突。

incorporate the changes from a remote repo的正确方法是:

git pull

git pull --rebase

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


现在,针对您的特定问题。 是的,您可以恢复对README.md文件的更改。

假设当前分支中的最新提交是带有消息"new Commit"的提交,这是您可以执行的操作:

1)将HEAD,索引和工作目录移至上一个提交(即,将 your 更改为README.md的提交):

git reset --hard HEAD^

2)在远程存储库的最新提交(例如,将其更改为README.md的最新提交)的基础上重新提交您的提交

git pull --rebase origin client

3)此时,您的提交将在远程存储库中进行,并且将包含您的更改(假设您已解决上一步中的所有冲突)。现在,您可以安全地将提交推送到远程存储库了:

git push origin client

答案 2 :(得分:0)

让我们开始吧,如果您在本地提交更改,并且在推送后远程存储库拒绝了更改,这是因为文件冲突,在这种情况下,要做的一件事是更新本地分支,然后合并您的分支远程分支。

git pull //updating your branch
git merge branchname //merge your branch

在那之后,如果有任何冲突,只需解决并再次进行修改,因为您的分支将与您的远程分支保持一致,并且远程分支将允许您进行推送。

如果您丢失了修改,请使用命令

git log

并检查您的提交是否存在,如果发现它只是将其重置为该提交的状态,则从其时间表开始的所有内容都将被撤消