Git常用命令介绍

Git常用命令介绍

九月 04, 2019

Git 常用命令介绍

version 0.4

[TOC]

1. 基础说明

git 介绍

Git简介

git 常见概念

  • commit: 提交
  • commitId: 提交对应的哈希值
  • branch: 分支
  • HEAD: 头指针
  • origin: 远端
  • conflict:冲突
  • merge: 合并
  • rebase:变基
  • fetch: 更新

工作流程

Git 可以大概分为三个区
Git 本地数据管理,大概可以分为三个区,工作区,暂存区版本库

  • 工作区(Working Directory)
    是我们直接编辑的地方,例如 Android Studio 打开的项目,记事本打开的文本等,肉眼可见,直接操作。

  • 暂存区(Stage 或 Index)
    数据暂时存放的区域,可在工作区和版本库之间进行数据的友好交流。

  • 版本库(commit History)
    存放已经提交的数据,push 的时候,就是把这个区的数据 push 到远程仓库了。

add命令

  • git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。(当前目录与子目录)

  • git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add –update的缩写)

  • git add -A :是上面两个功能的合集(git add –all的缩写)(所有目录)

.gitignore

commit/checkout

  • 检出分支
  • 检出文件
  • 还原文件

diff

git diff [<options>] [<commit>] [--] [<path>...]

reset

  • git reset : 清空git add 的文件
  • git reset HEAD:默认mixed模式

clone & fetch & pull

  • git clone [-b <name>] <repository> [<directory>]
  • fetch:
  • pull: fetch + merge

stash

  • git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

  • git stash list :查看stash了哪些存储

  • git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

  • git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p

  • git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}

  • git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

  • git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储

  • git stash clear :删除所有缓存的stash

2. merge & rebase

说明/方式 merge rebase
特点 自动创建一个新的commit,如果合并的时候遇到冲突,仅需要修改后重新commit 会合并之前的commit历史
优点 记录了真实的commit情况,包括每个分支的详情 得到更简洁的项目历史,去掉了merge commit
缺点 因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱。 如果合并出现代码问题不容易定位,因为re-write了history

合并时如果出现冲突需要按照如下步骤解决:

  • 修改冲突部分
  • git add
  • git rebase –continue/skip
  • 不要在git add 之后习惯性的执行 git commit命令

GitBook- rebase&merge

3. rebase 常见功能

梳理分支(合并提交,调整顺序,剔除等)

git pull –rebase

当我们从远程拉代码的时候如果使用:git pull –rebase,则会以rebase的方式进行更新,而不是默认的merge。

git rebase –interactive

git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>] [<upstream> [<branch>]]

  • p:保留当前commit,不做处理。
  • r:修改commit message。(git commit --amend)
  • e:修改这个commit作的修改。比如某个commit漏掉了什么配置,想要再提交新的文件; 或者删除一些无用代码,等等都可以用这个命令。
  • s:保留这个commit的修改,但是把它合并到前一个commit中。
  • d:删除commit

不要在远程推送分支使用rebase操作

Git Rebase 黄金法则问题

4. patch & cherry-pick

patch 和diff 的区别

如何使用git 生成patch 和打入patch

Git 提供了两种补丁方案,一是用git diff生成的UNIX标准补丁.diff文件,二是git format-patch生成的Git专用.patch 文件。
.diff文件只是记录文件改变的内容,不带有commit记录信息,多个commit可以合并成一个diff文件。
.patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件。

Git 打补丁– patch 和 diff 的使用

cherry-pick

  • git cherry-pick [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] [-S[<keyid>]] <commit>...

  • git cherry-pick <commitId>...

git 沙盒模式

5. 杂项

协同工作流程

在团队中使用GitLab中的Merge Request工作模式

Git工作流指南 - GitHub

revert

git revert <commitId>

git submodule

初始化
git submodule init
添加子仓库
git submodule add ssh://git@139.219.128.51:5837/zhengrong/CRBluetoothCore_android.git
更新子仓库
git submodule foreach git pull

使用Git Submodule管理子模块

提交规范

Angular 团队的规范

  • 标题行: 必填, 描述主要修改类型和内容
  • 主题内容: 描述为什么修改, 做了什么样的修改, 以及开发的思路等等
  • 页脚注释: 放 Breaking Changes 或 Closed Issues
1
2
3
4
5
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

辅助插件类

git log

changlog

6. 更新日志:

版本 时间 说明
version 0.1 2019年09月03日21:32:43 初版
version 0.2 2019年09月04日12:34:34 完善杂项介绍
version 0.3 2019年09月05日10:36:54 添加基础说明,添加部分杂项
version 0.4 2022年02月08日17:49:01 更换图床为Github