我仍在学习git,我正在将它用于实践,并将其作为保存项目进度的工具。我在办公室的电脑上和家里的电脑上使用同一个应用程序。我是唯一一个在努力的人。昨天,我在家完成工作后,一如既往地推动了我的更改,但出于某种原因,git抱怨道(我之前肯定做错了什么)。所以我做了(如果我没记错的话) git push origin master --force。
今天在工作的时候,我试着更新我的本地文件,我得到了这样的信息:
C:\Users\nova\Desktop\ez-class>git pull origin master
From https://github.com/sickdyd/ez-class
* branch master -> FETCH_HEAD
+ ace98f3...145956d master -> origin/master (forced update)
Already up to date.但是..。它不是最新的。所以我在谷歌上搜索了如何解决这个问题,我有点着急,我认为这是正确的方法:Git pull after forced update
这就是我所做的(叹气):
C:\Users\nova\Desktop\ez-class>git fetch
C:\Users\nova\Desktop\ez-class>git reset origin/master --hard
HEAD is now at 145956d hello
C:\Users\nova\Desktop\ez-class>git pull
Already up to date.
C:\Users\nova\Desktop\ez-class>git pull origin master
From https://github.com/sickdyd/ez-class
* branch master -> FETCH_HEAD
Already up to date.所以我很高兴地告诉大家,显然我在远程存储库上的所有更新都像本地更新一样消失了。我不知道这里发生了什么..。有没有什么办法可以解决这个问题,或者我必须回家重新推送这些更改?
编辑:最后,我不得不承认,仅仅是为了保持文件同步,git已经是一个相当痛苦的问题;你有没有更好的解决方案?Google drive不允许忽略子文件夹(如node_modules)。
发布于 2019-09-28 13:07:01
我在远程存储库上的所有更新都已删除
当您强制从家里推送到办公室时,您将覆盖办公室主分支的历史记录。
当您要访问您的办公室时,您可以使用git reflog列出最近一次强制推送之前的提交。你可以使用reset it to its old state。
然后,在家里:
更普遍的是,对于同步文件,Steve Gibson在中提到了几种替代方案:
中的文字记录
主要有:
的自由层
发布于 2019-09-28 15:13:39
可能发生的情况是,您使用诸如rebase之类的东西编辑了历史记录,或者您碰巧在另一个分支中没有您的更新。当分支的历史记录不兼容时,--force会给出警告,Git会覆盖该历史记录,而不是简单地添加新的提交。我喜欢使用git push,并且默认使用具有相同名称的分支,而不是git push origin master。这有助于防止从错误的、过时的分支推送到master之类的事情。
git的好处是它不会删除提交,它只会创建新的提交。您的计算机上仍有正确的更新。你可以用git reflog找到它们。这向你展示了你的头提交的历史,它随着你的工作而改变。您可以找到看起来正确的提交,然后运行git checkout <commit-id>查看这是否是您想要的状态。然后,您可以在提交时创建一个新分支(git checkout -b recovery-test),也可以切换回master并将master重置为该提交(git checkout master;git reset <commit-id>)。
https://stackoverflow.com/questions/58143402
复制相似问题