git init

进入一个项目目录,执行git init,会在本地新建一个repo,在当前文件夹下创建一个.git文件夹。

git clone

格式

  • git clone [url]

    取一个url对应的远程Git repo, 创建一个local copy,以url最后一个斜线后面的名称命名。

  • git clone [url] newname

    以指定特定的名称命名local copy。

git push

将新分支推送至远程仓库。

格式

  • git push [alias] [branch]

将当前分支merge到alias上的[branch]分支。如果分支已经存在,将会更新。 如果不存在,将会添加这个分支。

如果有多个人向同一个remote repo push代码, Git会首先在你试图push的分支上运行git log,检查它的历史中是否能看到server上的branch现在的tip,如果本地历史中不能看到server的tip,说明本地的代码不是最新的,Git会拒绝你的push,让你先fetch-merge之后再push,这样就保证了所有人的改动都会被考虑进来。

git status

格式

  • git status -s

查询repo的状态,-s的输出标记会有两列。

第一列是对staging区域而言,第二列是对working目录而言。

git add

将修改加入暂存区(staging area)。

格式

  • git add -A

将所有modified和new加入暂存区。

git commit

提交已经被add进来的改动。

格式

  • git commit -m “the commit message”

  • git commit -a

会先把所有已经track的文件的改动add进来。

  • git commit –amend

增补提交. 会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消。

git diff

比较工作目录中当前文件和暂存区域快照之间的差异。

格式

  • git diff –cached 命令

查看已经暂存起来的文件和上次提交时的快照之间的差异

  • git diff HEAD

比较woking directory和上次提交之间所有的改动

  • git diff [version tag]

返回从某个版本之后改动

  • git diff [branchA] [branchB]

返回一个由A到B的patch

  • git diff [branchA]…[branchB]

返回两个分支各自改动

git rm

格式

  • git rm file:

从staging区移除文件,同时也移除出工作目录

  • git rm –cached:

从staging区移除文件,但留在工作目录中

git clean

格式

  • git clean -df:

从工作目录中移除没有track的文件,-d表示同时移除目录,-f表示force

git branch

列出,创建和删除分支

格式

  • git branch -v

返回每一个分支的最后一次提交.

  • git branch

列出本地所有分支,当前分支会被星号标示出.

  • git branch (branchname)

创建一个新的分支(当你用这种方式创建分支的时候,分支是基于你的上一次提交建立的).

  • git branch -d (branchname)

删除一个分支.

git checkout

切换分支

格式

  • git checkout (branchname)

切换到一个分支

  • git checkout -b (branchname)

创建并切换到新的分支

git revert

反转撤销提交,将出错的提交(commit)的名字(reference)作为参数传给命令

格式

  • git revert HEAD

撤销最近的一个提交

git merge

将一个分支merge进当前的分支

格式

  • git merge [alias]/[branch]

把远程分支merge到当前分支

如果出现冲突,需要手动修改,可以用到git diff,解决完之后用git add添加,即表示冲突已经被resolved

git remote

为每一个remote repo的url都建立一个别名,用git remote来管理这个list

如果clone一个project,Git会自动将原来的url添加进来,别名就叫做origin

格式

  • git remote

列出remote aliases

  • git remote -v

可以看见每一个别名对应的实际url

  • git remote add [alias] [url]

添加一个新的remote repo

  • git remote rm [alias]

删除一个存在的remote alias

  • git remote rename [old-alias] [new-alias]

重命名

  • git remote set-url [alias] [url]

更新url,可以加上—push和fetch参数,为同一个别名set不同的存取地址

git fetch

fetch将会取到所有你本地没有的数据,所有取下来的分支可以被叫做remote branches,它们和本地分支一样(可以看diff,log等,也可以merge到其他分支),但是Git不允许你checkout到它们

格式

  • git fetch [alias]

取某一个远程repo

  • git fetch –all

取到全部repo

git pull

git pull会首先执行git fetch,然后执行git merge,把取来的分支的head merge到当前分支。这个merge操作会产生一个新的commit

pull == fetch + merge FETCH_HEAD

git tag

在一个提交上建立永久性的书签,通常是发布一个release版本之后加tag

格式

git tag -a v1.0

-a参数允许你添加一些信息

push的时候是不包含tag的,如果想包含,可以在push时加上–tags参数

fetch的时候,branch HEAD可以reach的tags是自动被fetch下来的,如果想确保所有的tags都被包含进来,需要加上–tags选项

git log

展示log

格式

  • git log –oneline –number

每条log只显示一行,显示number条,git log –oneline –graph:可以图形化地表示出分支合并历史

  • git log branchname

可以显示特定分支的log

  • git log –oneline branch1 ^branch2

可以查看在分支1,却不在分支2中的提交.^表示排除这个分支(Window下可能要给^branch2加上引号)

  • git log –decorate

会显示出tag信息

  • git log –author=[author name]

可以指定作者的提交历史

  • git log –since –before –until –after

根据提交时间筛选log

  • git log –grep=keywords

根据commit信息过滤log

  • git log -p

每一个提交都是一个快照(snapshot),Git会把每次提交的diff计算出来,作为一个patch显示给你看