git梳理一:基础

·  阅读 253

这两天有个同事用git push -f把远端我的几次提交冲掉了,一脸懵逼,梳理一下相关问题。

git基本知识

git的详细教程推荐廖雪峰的git教程,这里只简单回顾一下相关知识。

git管理的本地内容里,有工作区、暂存区、版本库的概念。

  • 工作区:其实就是我们直接能看到的文件。我们的修改都是直接体现在工作区的。
  • 暂存区:存放在.git/index目录,我们使用git add命令时,会把工作区的内容更新到暂存区。
  • 版本库:使用git commit时,会把暂存区的内容更新到版本库。

通常开发中总会有个远程仓库,使用git push命令会把本地版本库的内容推送到远程仓库。

下面这张图很好地反应了git的状态切换。

img

常用命令

提交相关

提交代码时常用命令有git addgit commitgit pull (--rebase)git push


另外几个就不多说了,这里讨论一下pull的时候rebase参数。

如果本地和远端都有新的提交,pull时带rebase参数的话,本地与远端做的是rebase,解决冲突后,相当于把本地的几次提交移动到远端提交之后,提交记录会更清晰。

pull时不带rebase参数的话,做的是merge,本地和远端的提交会分两条线,最终合并到一个新的merge节点。

我个人经历的项目来看,通常更推荐使用git pull --rebase,提交记录更清晰。

一般性回滚

1. 代码尚未commit

没提交的时候怎么搞都是小事。视情况checkoutreset --hardstash命令都可以拿来用。

2. 代码已经commit,尚未push

通常使用git reset回滚到指定commitID,注意区分混合合并(mix)/强行合并(hard),要保留代码时用混合合并(mix),不保留代码时可以强行合并。

3. 已push代码需要回滚

通常使用git revert创建一次回滚提交。基本原则就是不影响远端提交记录。

为什么

为什么有暂存区的设计

参考为什么要先 git add 才能 git commit ? - Ivony的回答 - 知乎
本质上是为了在命令行下能够选择部分文件进行提交。

分类:
开发工具
标签:
分类:
开发工具
标签:
收藏成功!
已添加到「」, 点击更改