git - 我把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 会向您发出警告,并--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>
)。
推荐阅读
- xslt - XSLT:将字符串的特定字符单独转换为字符串*包括*它们的十六进制值
- javascript - 更改对象数组中的键 || javascript
- android - 从片段中隐藏父活动底部导航不起作用
- javascript - 使用 Blob 将对象下载为 JSON 而不创建 DOM 元素
- c++ - 调用 setVisible(false) 在 QWidget 的构造函数中不起作用
- c - 如何为 C 中的结构正确分配内存?
- header - 如何通过 In Flow 调解器将标头参数添加到 wso2 apim 2.6.0 中的 REST API
- laravel - 如果没有数据 Laravel 如何抛出异常?
- r - 小标题中的管道功能不起作用
- java - 仅当 status_id = 1 否则没有 onClickListener 时,我如何在 Recyclerview 中设置 onClickListener