我对git很陌生。最近,我正在一个项目上,我在本地更新了一些文件,并提交了更新的文件,我尝试推送,但是远程存储库中有一个更新的文件,
README.md
我没有的。因此,我通过运行此行
git fetch
git checkout origin/client --README.md
git add README.md
git commit -m"new Commit"
git push
所以现在我在本地丢失了更新的文件,并用远程存储库中的旧文件替换了。我现在该怎么做才能取回本地更新的文件?
答案 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
并检查您的提交是否存在,如果发现它只是将其重置为该提交的状态,则从其时间表开始的所有内容都将被撤消