首页 > 解决方案 > 我把git弄得一团糟,有人能解释一下我做错了什么吗?

问题描述

我仍在学习 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 force 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 驱动器不允许忽略子文件夹(如 node_modules)。

标签: git

解决方案


可能发生的情况是您使用变基之类的东西编辑了历史记录,或者您碰巧位于没有更新的不同分支中。当您的分支历史不兼容时,Git 会向您发出警告,并--force覆盖该历史而不是简单地添加新提交。我喜欢使用git push, 并且默认使用同名的分支,而不是git push origin master. 这有助于防止诸如从错误的、过时的分支推送到 master 之类的事情。

git 的好处是它不会删除提交,它只会创建新的提交。具有正确更新的计算机仍然具有它们。您可以使用git reflog. 这向您展示了您的 HEAD 提交的历史,随着您的工作而改变。您可以找到看起来正确的提交并运行git checkout <commit-id>以查看是否是您想要的状态。然后,您可以在该提交 ( git checkout -b recovery-test) 处创建一个新分支,或者只是切换回 master 并将 master 重置为该提交 ( git checkout master; git reset <commit-id>)。


推荐阅读