git 常用命令梳理

70 阅读5分钟

写在前面

大多数事情追求二八定律(最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的)。

git是我们平时都会用到,但是又不需要用的很深的工具。

常用的功能必须要用的很熟练才行。

基本概念

GIT是分布式版本控制系统,我们需要了解是git的命令是哪一块和哪一块在交互,网上有很多教程,讲的很详细,这里只是回顾一下基本结构。

主体内容是四个部分

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

git-command.jpg

常用命令

  1. git add . 添加当前目录下的所有文件到暂存区
  2. git commit -m [message] 提交暂存区到本地仓库
  3. git push origin master 本地仓库master分支上传到远程并合并
  4. git pull origin master 从远程获取master代码并合并到本地的版本
  5. git checkout newFix 切换到分支newFix
  6. git checkout -b newFix 创建并切换到新分支newFix
  7. git clone -b [分支名] [url] 拷贝一个指定分支的远程git仓库到本地
  8. git merge bugFix 将bugFix合并到当前分支
  9. git init 初始化仓库

以上是经常用到的命令,还有一个比较实用的功能是cherry-pick,不过一般会通过工具来进行可视化操作

更多

基本命令

  1. 添加文件 git add

    功能:将文件添加到暂存区

    • git add [file1] [file2] ... 添加一个或多个文件到暂存区
    • git add [dir] 添加指定目录到暂存区,包括子目录
    • git add . 添加当前目录下的所有文件到暂存区
  2. 提交 git commit

    功能:提交暂存区到本地仓库

    • git commit -m "提交内容说明" 提交暂存区到本地仓库
    • git commit [file1] [file2] -m "提交内容说明" 提交暂存区的指定文件到本地仓库
  3. 分支 git branch

    • git branch newFix 只能创建新分支newFix,并没有切换到新分支newFix
    • git branch -f master HEAD~3 强制修改分支位置,将master分支强制指向HEAD的第3级父提交
  4. 合并 git merge

    • git merge bugFix 假设我们当前在master,那就是将bugFix合并到master
  5. 合并2 git rebase

    取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个放下去。和merge的区别是这样的提交记录是线性的,更清晰,但是会丢失真正的顺序。

    • git rebase master 假设我们当前在bugFix,那就是将bugFix合并到master。刚好和merge相反,参数是目标分支
  6. 切换指向 git checkout

    功能:切换分支,本质是改变HEAD的指向

    • git checkout -b newFix 创建并切换到新分支newFix
    • git checkout c1 这里的c1可以是某个提交记录,也可以是分支名称
    • git checkout master^ 指向master的父节点,两个^是再向上的第二个父节点
    • git checkout HEAD~4 是一次退4步
  7. 撤销变更 git resetgit revert

    • git reset HEAD~1 删除,用在本地,回退1步
    • git revert HEAD 回滚,用在远程,再新增一次提交记录,新提交即改回之前的更改内容

高级用法

  1. cherry-pick git cherry-pick

    功能:指定提交记录合并

    • git cherry-pick c1 c2 c1、c2代表某两个提交记录的哈希
    • git cherry-pick origin/master 合并远程master到当前分支
  2. 调整排序 git rebase -i

    • git rebase -i HEAD~4 最近4条提交做个排序
  3. 标签 git tag

    • git tag v1 c1 给c1打标签v1

远程命令

  1. 克隆 git clone

    • git clone [url] 拷贝一个远程仓库
    • git clone -b [分支名] [url] 拷贝指定分支的远程仓库
  2. 拉取 git fetch

    功能:将本地仓库的远程分支更新成了远程仓库相应分支最新的状态

    • git fetch 下载所有的提交记录到各个远程分支
    • git fetch origin foo 从远端foo分支,获取所有本地不存在的提交,放到本地origin/foo上
    • git push origin <source>:<destination> 指定了远程的源和本地的目的
  3. 拉取并合并 git pull

    功能:从远程获取代码并合并到本地的分支

    • git pull=git fetch+git merge 拉取全部远程分支并合并
    • git pull origin foo=git fetch origin foo+git merge origin/foo 拉取指定的foo分支并合并
    • git pull origin bar:bugFix=git fetch origin bar:bugFix+git merge bugFix
  4. 推送 git push

    功能:本地分支变更上传到远程仓库,并在远程仓库合并你的提交记录

    • git push 不带参数,对应的就是HEAD的当前分支和远程分支
    • git push <remote> <place>切到本地 place 位置,获取所有提交,再到远程仓库remote中找到place分支,将远程仓库没有的提交都添加上去
    • git push origin <source>:<destination>切换到本地source位置,上传未被包含到远程仓库里destination分支的提交记录

常用工具

完全通过命令行来操作的话,无法提高效率,还是需要借助工具。

  1. TortoiseGit 小乌龟,首推
  2. GitHub Desktop 特别好用,常用功能都有
  3. Git Extensions 需要做一些配置,可视化也更好一些
  4. Git GUI 官方的,不如第三方好用
  5. Sourcetree 很多人推荐,个人没用过
  6. 编辑器插件,比如vscode的插件Git Extensions for VS Code就是上面提到的集成到vscode

萝卜白菜各有所爱,挑自己顺手的用就好

练习网站

看的多,不如练的多。很多时候学知识就是脑子理解了,手不会,也没记住。

  1. learngitbranching 这是一个可以直接操作,有及时反馈的在线练习git命令的可视化网站。

东西在精不在多,git本来就是学习常用内容就可以了,好好把这个网站过一遍,完全够用了。

参考链接

  1. git官方文档 最详细的解释来自于官方
  2. git 菜鸟教程git 廖雪峰教程,类似教程有很多,找个合适的就好