Git 命令简记

虽然现在各种 Git 可视化工具都很好用,但是常用命令能熟练使用还是比较好的。好记性不如烂笔头,这里记下 git 命令,方便日后快速翻阅。

Git 工作流程

初始配置

1. 初始化目录

进入相应目录,使用命令 git init,会在目录下生成 .git 目录,里面都是 git 的记录信息,切不可乱删除。

2. 设置库级别签名

仅在当前本地库有效:

1
2
git config user.name ChiFuYong
git config user.email g3545616@gmail

详细信息保存于当前库目录的 .git/config 中,使用 cat conf 即可查看。

3. 设置全局级签名

对登录系统的当前用户全局有效:

1
2
git config --global user.name ChiFuYong
git config --global user.email g3545616@gmail

详细信息保存于 ~/.gitconfig 中,使用 cat ~/.gitconfig 可看到如下信息。

注:库级别优先于全局级别,二者都有时采用库级别。签名用于区分不同开发人员身份,与远程 Git 服务器上的账号密码无关。

设置全局级签名

4. .gitconfig 中配置忽略文件(java.gitignore)

编辑 vim ~/.gitconfig,所有 git 库都会忽略相应文件,添加内容如下:

1
2
[core]
excludesfile = /home/guan/Java.gitignore

java.gitignore 内容如下(详细可参考 Github 项目):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs
hs_err_pid*
# Eclipse ignore
.classpath
.project
.settings
# Maven Compiled Directory
target
# IDEA ignore
.idea
*.iml
out

常用命令速查表

命令说明示例
git init初始化仓库git init
git status查看工作区、暂存区状态git status
git add [file]添加文件到暂存区git add .
git commit -m "msg"提交暂存区到本地库git commit -m "feat: add login"
git log查看提交历史git log --oneline
git diff比较工作区与暂存区git diff file.txt
git reset版本回退/前进git reset --hard HEAD^
git branch分支操作git branch dev
git checkout切换分支git checkout dev
git merge合并分支git merge dev
git pull拉取远程代码git pull origin master
git push推送代码到远程git push origin master

基本操作命令

版本管理

  • git init:初始化仓库
  • git status:查看工作区、暂存区状态
  • git add [file name]:将工作区的文件(新建或修改)添加到暂存区,git add . 表示添加所有修改过的文件到暂存区
  • git commit -m "commit message" [file name]:将暂存区的文件提交到本地库,-m 表示此次提交的修改概述

查看历史

  • git log:查看 commit 的详细历史记录,其他常用命令参数如下:
1
2
3
git log --pretty=oneline
git log --oneline
git reflog

三者区别如下图:

基本操作命令

比较差异

  • git diff [file name]:比较工作区中文件和暂存区差别
  • git diff [版本号] [file name]:工作区文件和本地库历史版本比较

版本回退

  • git reset:版本回退/前进,有三种方式,参数作用如下:
1
2
3
--soft    # 仅仅在本地库移动 HEAD 指针
--mixed # 1. 在本地库移动 HEAD 指针 2. 重置暂存区(默认方式)
--hard # 1. 在本地库移动 HEAD 指针 2. 重置暂存区 3. 重置工作区

git reset --hard [局部版本索引] 可直接恢复到相应版本,git reset --hard HEAD^ 表示回退到上个版本(多少个 ^ 代表回退多少个版本),git reset --hard HEAD~n 表示后退 n 步。

分支管理命令

命令说明
git branch -v查看全部分支
git branch [branch name]创建分支
git branch -d [branch name]删除分支
git checkout [branch name]切换分支
git merge [branch name]把指定分支合并到当前分支
git rebase [branch name]变基合并,保持线性历史

git rebase 与 merge 的区别:rebase 会把 commit 内容暂存起来然后再合并,合并后不会导致分叉,保持线性历史。

暂存操作命令

命令说明
git stash save "info"暂存当前工作区和暂存区内容
git stash list显示暂存过的所有列表
git stash pop恢复最新暂存数据并删除记录
git stash apply恢复暂存数据但保留记录
git stash drop stash@{X}删除指定暂存记录
git stash clear删除所有暂存记录

开发时在需要排查其他分支的 bug 问题时常用。

远程相关命令

命令说明
git remote -v查看当前所有远程地址别名
git remote add [origin] [url]添加远程服务器关联地址
git remote remove [origin]删除远程关联地址
git clone [url]克隆远程仓库代码
git fetch更新本地的远程跟踪分支
git pull相当于 fetch + merge
git push [alias] [branch]推送代码到远程服务器

git clone:克隆远程服务器仓库代码(默认拉取 master 分支),加上 -b [branch name] 参数可以拉取指定分支。

git pull:相当于 fetch + merge,先更新远程跟踪分支(例如 origin/master),再合并到本地分支,有冲突需要解决冲突。

git push:推送代码到远程服务器,有冲突需要 pull 解决代码冲突后再 push 到远程服务器。