Fork me on GitHub

Git 基本操作

1. 写在前面

  • 本文章是对《Pro Git(Second Edition)》的简单总结。因此,只是记录我认为重要的内容,用来当作目录,方便自己忘记时,快速找到。如果你对我所记录的内容不是很明白,请阅读书籍中的具体内容。

2. Git 简介

  • 实际上,Git 是一种分布式版本控制技术(Version Control);
  • 版本控制分为本地版本控制,集中式版本控制以及分布式版本控制;
  • Git 中保存的是在某一时刻,全部文件的"快照(snapshot)"

2.1 Git 的安装及配置

  • Git 的安装
  • Git 配置文件说明:
    • /etc/gitconfig: 系统级配置文件;对应的参数 --system
    • ~/.gitconfig(或~/.config/git/config): 用户级配置文件;对应的参数 --global
    • config: 也就是 Git 仓库中的配置文件(.git/config);对应的参数 --local
  • git config --list:查看当前git配置;
  • git config --global user.name "noodlescnliu": 设置用户名
  • 常见配置:
user.name=noodlescnliu
user.email=noodlescnliu@gmail.com
alias.lg=log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit    # 用于日志格式化输出的别名

3. Git 操作文件

3.1 Git 操作文件的三个区域

  • Git 仓库(.git 位置): 用来存储文件"快照";
  • 工作区(Working Directory): 对文件执行增删改操作;
  • 待提交区(Staging Area): 文件修改完成,首先提交到该区,然后提交到Git仓库;

3.2 Git 文件中的状态

3.3 常用命令解释(以my_project/a.txt为例)

  • git init:初始化本地Git仓库,创建.git隐藏文件夹;
  • 新建文件a.txt,并没有纳入到Git仓库的管理,属于Untracked状态;
  • git add a.txt:将a.txt的状态变为Staged,进入到"待提交区域(Staging Area)";
  • git commit -m 'my first commit': 将a.txt的状态变为Unmodified,进入Git仓库"快照";
  • git status: 检查当前目录下,各个文件正在处于哪种状态;
  • 当你发现a.txt中存在错误,或者需要添加新内容,修改之后的a.txt,与存储在Git仓库中的"快照"内容发生了变化,因此,状态变为Modified,需要重新git add a.txt,git commit -m 'add new message to a.txt';
  • git commit -am a.txt 'skipping the staging area': 是 git add a.txtgit commit -m 'skipping the staging area' 两个命令的简写。但是,文件被Git仓库管理之后,才能执行成功;

3.4 .gitignore文件

  • 有一些文件是没有必要被Git仓库管理的,例如,日志输出文件(.log),Java编译后生成的.class文件等;
# 示例:
# Log file
*.log

# Package Files #
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar

3.5 日志输出格式

  • git log -p -2: 输出最近提交的两条日志;
  • git log --pretty=format:"%h - %an, %ar : %s"
    • %h: Abbreviated commit hash;
    • %an: 作者姓名;
    • %ar: 提交相对日期;
    • %s: commit 时,输入的提交信息;
  • git log --pretty=format:"%h %s" --graph
  • git log --abbrev-commit --pretty=oneline: 只显示哈希值的前几位,以及提交的说明;

3.6 远程协作

  • git clone https://github.com/Noodlescn/guava: 从 GitHub 中下载项目;
  • git remote: 查看已配置远程服务器的名称,默认下载的项目的远程服务器名称为origin;
  • git remote -v: 当提交或获取项目时,origin所代表的URL地址;
  • git remote add <shortname> <url>: 新增自定义远程服务器地址;
  • git remote rename <oldname> <newname>: 重命名远程服务器;
  • git remote remove <shortname>: 移除远程服务器;
  • 当从远程Clone项目后,张三又向远程中提交了一些内容。这时,需要使用 git fetch <remote> 来更新自己本地项目内容;而由于在自己Clone项目时,Git默认将远程服务器设置为"origin",因此,可以简写为git fetch origin;然后,需要手动进行合并操作git merge;
  • git pull: 将 git fetch 操作和 git merge操作合为一步进行;
  • git push <remote> <branch>: 将项目分享出去, git push origin master;
  • git remote show "https://github.com/google/guava": 用于查看远程项目的信息;

3.6.1 打标签(Tagging)

  • 标签主要用来标记产品版本号;
  • git tag: 列出所有的标签;
  • git tag -l "v1.8.*": 列出以"v1.8"开头的标签;
  • git tag -a v1.4 -m "my version 1.4": 创建 Annotated Tags;

4. Git 分支(Branching)

  • 示例:向Git仓库中提交三个文件:
    • git add README test.rb LICENSE
    • git commit -m 'The initial commit for my project'
  • 提交之后,Git仓库中多了五个实体:
    • 三个Blob: 分别代表三个提交的文件内容;
    • 一个树: 指向三个Blob;
    • 一个指针: 指向树;


  • git branch testing: 新建testing分支;
  • git branch -d hotfix: 删除hotfix分支;
  • git branch: 查看当前所有分支;
  • git branch -v: 查看每个分支最后提交的信息;
  • git branch --merged: 查看已合并的分支;
  • git branch --no-merged: 查看未合并的分支;


- `git checkout testing`: 切换分支;


- `git merge iss53`: 合并分支;

4.1 Git 分支远程协作


**参考资料:** - [Git Pro](https://git-scm.com/book/en/v2)
posted @ 2018-08-05 16:54  小a的软件思考  阅读(147)  评论(0编辑  收藏  举报