本文验证 git checkout -- file 与 git reset -- file 命令的具体作用区域。
个人认为 git checkout -- file 是将暂存区的内容恢复到工作区;git reset -- file 是将仓库的内容恢复到暂存区
网上找个了图,觉得不错,展示下
上图中我有疑问,个人认为应该不是直接从仓库还原到了工作,而应该还是从暂时存区还原到了工作,只不过暂存区的dev.txt已经提交了,所以不显示,但文件仍然存在。
git在本地会保存两个版本的仓库,分为本地仓库和远程仓库。
1、本地仓库就是我们平时 add、commit 的那个仓库。
2、远程仓库可以用git remote -v查看(这里的远程仓库是保存在本地的远程仓库,等同于另一个版本,不是远程的远程仓库)。
说说 fetch 和 pull 的不同:
fetch 只能更新远程仓库的代码为最新的,本地仓库的代码还未被更新,我们需要通过 git merge origin/master 来合并这两个版本,你可以把它理解为合并分支一样的。
pull 操作是将本地仓库和远程仓库(本地的)更新到远程的最新版本。
如果想要更加可控一点的话推荐使用fetch + merge。
git 一个分支完全替换另一个分支
git push origin develop:master -f
把本地的 develop 分支强制(-f)推送到远程 master
但是上面操作,本地的 master 分支还是旧的,通常来说应该在本地做好修改再去 push 到远端,所以我推荐如下操作
git checkout master // 切换到旧的分支
git reset --hard develop // 将本地的旧分支 master 重置成 develop
git push origin master --force // 再推送到远程仓库