git 常用命令总结。

开始使用

设置git的姓名和邮箱地址

git config --global user.name "Firstname Lastname"
git config --global user.email "your_email@example.com"

使命令输出可读性更高

git config --global color.ui auto

使用本地版本库

初始化git仓库

将当前目录变为由git管理的目录

git init 

把文件添加到仓库暂存区

-f参数可以强制添加文件到git

git add <file>

把所有文件添加到暂存区

git add .

把暂存区的文件添加到仓库

’-m’后的字符串为本次提交的描述
‘–amend’修正先前的提交

git commit -m ""

重设第一个commit

清空所有commit, 将所有改动放回工作区

git update-ref -d HEAD

查看仓库当前状态

git status

查看文件具体修改内容

不添加参数表示工作区和暂存区的different

git diff [file]

查看工作区和版本库最新版本区别

git diff HEAD -- <file>

查看本地仓库任意两个commit的文件改动

git diff <commit-id> <commit-id>

查看暂存区和本地最近的版本(commit)的different

git diff --cached

查看工作区、暂存区和本地最近的版本(commit)的different

git diff HEAD

查看历史记录

加上–pretty=oneline可以简化输出

git log [--pretty=oneline]

回退历史版本

上一个版本为HEAD^, 上上版本为HEAD^^, 往上100个版本为HEAD~100, 或者加上git log查看的commit id

git reset --hard HEAD^

查看历史操作

git reflog

将文件在工作区的修改撤销

-×-> 未添加到暂存区:回到和版本库同样的状态
—-> 已添加到暂存区:回到添加到暂存区后的状态
当误删文件时,因为文件仍然存在于版本库,因此可以通过版本库复原

git checkout -- <file>

回到分支中的最新版本

回到master分支中的最新版本

git checkout master

将暂存区的修改撤销,重新放回工作区

git reset HEAD <file>

从版本库删除文件

git rm <file>

使用远程仓库

将本地仓库和远程仓库关联

添加完成后,远程库的名字为origin

git remote add <origin> <git@@server-name:path/repo-name.git>

将本地仓库的内容推送到远程仓库上

把当前分支master推送到远程库origin上, -u参数将本地master分支和远程master分支合并, 之后推送可以去除-u参数

git push -u origin master

将远程仓库克隆到本地

git clone <git@@server-name:path/repo-name.git>

分支

创建新分支

创建dev分支, -b参数表示创建并切换

git checkout -b dev 
===等价于
git branch dev
git checkout dev

删除分支

git branch -d <name>

强行删除分支

git branch -D <name>

查看当前分支

列出所有分支, 当前分支前标记[*]
-a(all)表示列出所有本地分支
-r(remote)表示列出所有远程分支

git branch 

切换分支

<name>为’-‘表示快速切换分支

git checkout <name>

把A分支的某个commit放到B分支上

git checkout <branch-name> && git cherry-pick <commit-id>

合并分支

将开发分支dev合并到主分支master
Fast-forward表示本次合并为快进模式, 即直接把master指向dev的当前提交

git merge dev
Updating 0b6f0d1..3214328
Fast-forward
 readme.txt | 2 ++

禁用Fast-forward模式, 合并后的历史有分支

git merge --no-ff -m "" <name>

查看分支合并情况

git log --graph --pretty=oneline --abbrev-commit

存储工作区

将当前工作区存储起来

git stash

查看stash存储的工作区

git stash list

恢复工作区

恢复工作区, 再将stash删除

git stash apply
git stash drop

恢复工作区的同时将stash内容删除

git stash pop

恢复指定的stash

git stash list
git stash apply stash@{?}

多人协作

查看远程库信息

-v:显示更详细的信息
fetch和push分别为抓取和推送的origin的地址.

git remote -v

创建远程分支到本地

此时dev上的修改可以push到远程的dev分支

git checkout -b dev origin/dev

从远程仓库抓取分支

git pull

展示本地分支关联远程仓库的情况

git branch -vv

将本地dev分支与远程库dev分支关联

#git branch --set-upstream dev origin/dev
git branch --set-upstream branch-name origin/branch-name

本地仓库同步远程仓库的状态

抛弃本地所有更改, 回到远程仓库的状态

git fetch --all && git reset --hard origin/master

标签

打标签

默认标签打在最新的commit上
-a指定标签名
-m指定说明文字
-s用私钥签名一个标签——签名采用PGP, 需先安装gpg(GNUPG)

git tag [-s] [-a] <name> [-m] [""]

为某次提交打标签

git log --pretty=oneline --abbrev-commit
git tag v0.9 <commit id>

查看所有标签

git tag

查看标签信息

git show <tag>

删除标签

git tag -d <tagname>

删除已推送到远程库的标签

git tag -d <tagname>
git push origin :refs/tags/<tagname>

推送标签到远程仓库

git push origin <tagname>

一次性推送全部未推送的本地标签

git push origin --tags

通过标签回滚

使用 ^ 来表示标签v1的父提交

git checkout v1^

自定义

检查.gitignore规则错误

git check-ignore -v <file>

参考链接

Git的奇技淫巧

廖雪峰的Git教程