Git 常用命令介绍

在已存在目录中初始化仓库

$ cd your_project
$ git init

克隆现有仓库

$ git clone https://github.com/libgit2/libgit2

克隆远程仓库并自定义本地仓库的名字

$ git clone https://github.com/libgit2/libgit2 mylibgit

查看当前文件状态

$ git status

查看当前文件状态简览

$ git status -s

添加文件到暂存区,比如 README 文件

$ git add README.md
查看工作区的文件和暂存区快照之间的差异
$ git diff
查看暂存区的文件和最近一次提交之间的差异
$ git diff --staged

提交更新

$ git commit

提交更新,并添加提交说明

$ git commit -m "some description"

跳过使用暂存区域,直接提交更新

$ git commit -a

从暂存区域移除某个文件并在工作区删除该文件

$ git rm README.md

从暂存区域移除某个文件,之后该文件不会被版本控制

$ git rm --cached README.md

在 git 中对文件改命

$ git mv file_from file_to
# 相当于
$ mv README.md README
$ git rm README.md
$ git add README

查看提交历史

$ git log

查看提交历史,并显示每次提交的差异

$ git log -p

显示最近的两次提交

$ git log -2

查看提交历史,并显示每次提交的简略信息

$ git log --stat
查看提交历史,并将每个提交放在一行展示(显示完整的 hash)
$ git log --pretty=oneline
查看提交历史,并将每个提交放在一行展示(显示简短的 hash)
$ git log --oneline

pretty 的值除了 online 之外,还有 short,full,fuller,format 等,不再一一描述,详情参考官方文档

提交后发现忘记提交某些文件,可以追加文件到这次提交
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
取消暂存某个文件
$ git reset HEAD CONTRIBUTING.md
撤销对文件的修改
$ git checkout -- CONTRIBUTING.md
版本回退
# 仅仅把 head 指向指定 commit 的版本,暂存区不动,工作现场不动
$ git reset --soft <commitID>
# 把 head 指向指定 commit 的版本,暂存区改动,工作现场不动
$ git reset --mixed <commitID>
$ git reset <commitID>
# 把 head 指向指定 commit 的版本,暂存区改动,工作区改动
$ git reset --hard <commitID>
# 回退到指定 commit 之前的那次提交,该回退会产生一个新 commit
$ git revert <commit>
# 版本回退到上一次 commit
$ git reset HEAD
# 版本回退到上上次 commit
$ git reset HEAD~
$ git reset HEAD^
# 版本回退到上上上次 commit
$ git reset HEAD~2
$ git reset HEAD~~

查看所有远程仓库

$ git remote
查看所有远程仓库,并显示 git URL
$ git remote -v

添加远程仓库,并起名为 origin

$ git remote add origin https://github.com/paulboone/ticgit

同步远程仓库

$ git fetch origin

同步远程仓库,并创建一个分支与远程分支对应

$ git fetch origin testing:testing

当前分支设置了跟踪远程分支的前提下,快速拉取本地还没有的数据

$ git pull

将 master 分支推送到 origin 远程仓库

$ git push origin master

保存工作现场

$ git stash

查看工作现场存储列表

$ git stash list

应用最新存储的工作现场

$ git stash apply

应用最新存储的工作现场,并删除

$ git stash pop

应用某个工作现场

$ git stash apply stash@{2}
# 带 --index 参数会

移出某个工作现场

$ git stash drop stash@{0}

查看 origin 远程仓库的详情

$ git remote show origin

将远程仓库 origin 重命名为 neworigin

$ git remote rename origin neworigin

移除 origin 远程仓库

$ git remote remove origin

列出标签

$ git tag

使用通配符列出想要的标签

$ git tag -l  "v1.8.5*"
# v1.8.5.1
# v1.8.5.2
# v1.8.5.3

创建附注标签

$ git tag -a v1.0 -m "my version 1.0"

创建轻量标签

$ git tag v1.0

对过去的提交打标签

$ git tag -a v1.0 9fceb02

查看标签信息

$ git show v1.0

推送标签到仓库

$ git push origin v1.0

一次性推送多个标签

$ git push origin --tags

删除本地仓库的标签

$ git tag -d v1.0

删除远程仓库的标签

$ git push origin --delete v1.0

创建一个 testing 分支

$ git branch testing

切换到 testing 分支

$ git checkout testing

创建新分支的同时切换过去

$ git checkout -b testing

拉取远程分支到本地,并切换到该分支

$ git checkout -b testing origin/testing

把 testing 分支合并到当前分支

$ git merge testing

删除 testing 分支

$ git branch -d testing

强制删除 testing 分支

$ git branch -D testing

查询本地当前分支列表

$ git branch

查询本地当前分支列表,并显示最后一次提交

$ git branch -v

查询远程仓库的所有分支

$ git branch -r

查询本地和远程仓库的所有分支

$ git branch -a

删除远程分支

$ git push origin --delete testing

将 experiment 分支变基到 master 上

$ git checkout experiment
$ git rebase master

选中在 client 分支里但不在 server 分支里的修改,将它们在 master 分支上变基

$ git rebase --onto master server client

直接将 server 分支变基到 master 上

$ git rebase master server

将某个提交比如 e43a6 拉取(拣选)到当前分支

$ git cherry-pick e43a6

对已经加入版本控制的文件,修改后希望不被提交办法

# 执行命令将 db.php 加入不提交队列
$ git update-index --assume-unchanged include/db.php
# 执行命令将 db.php 取消加入不提交队列
$ git update-index --no-assume-unchanged include/db.php

查看所有的配置

$ git config --list

查看所有的配置以及它们所在的文件

$ git config --list --show-origin

设置用户名和邮件地址

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

查看某个配置项,比如用户名

$ git config user.name

查看某个配置项以及哪一个配置文件最后设置了该值

$ git config --show-origin rerere.autoUpdate

获取某个命令的语法手册,比如 config 命令

$ git help config
# 或
$ git config --help

获取某个命令的快速参考,比如 config 命令

$ git config -h

Git 设置别名

$ git config --global alias.co checkout
$ git config --global alias.last 'log -1 HEAD'

SSL certificate problem: self signed certificate

$ git config --global http.sslVerify false

git 添加全局 ignore 方法

$ git config --global core.excludesfile ~/.gitignore_global
除特殊说明外本人博客均属原创,转载请注明出处:http://blog.johnhan.cn/blog_1089.html
京ICP备19044523号-1