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显示给你看