目录
git config --global user.name/user.email
git config --list
git help config
git add file/dir
添加到暂存区
git restore file
撤销文件的修改(还未添加到暂存区的文件,相当于Ctrl-Z);--staged
从暂存区中撤销。.gitignore
*
0个或多个字符;[ab]
其中一个字符;[0-9]
范围;?
任意一个字符;!
代表取反。
git diff
显示的是还没有暂存起来的改动。--staged
查看已暂存的文件和上次提交时的快照之间的差异。--no-index -- src dst > temp.diff
生成diff
文件;git diff [old-commit] [new-commit] > 001.diff
,导出两个提交之间的差异到文件。git rm --cached
删除该文件在git目录中的索引,也就意味着git不再跟踪该文件,但保留在本地文件系统中。git log -p -2
详细显示最近两次提交的内容。--stat
只显示增减行差异;--pretty=oneline
每个提交只显示一行;--graph
显示提交所在的分支。
git commit --amend
可以重新修改刚才的提交。如果刚才的提交忘加了几个文件,可以git add xxx
后再git commit --amend
重新修改刚才的提交,可以修改说明,然后顺便把新暂存区的内容提交了。git remote
显示关联的远程仓库。-v(verbose)
显示详细信息;git remote add [shortname] [url]
添加远程仓库并指定仓库名字shortname
;git remote show [remote-name]
查看远程仓库信息;git remote rename [old-name] [new-name]
修改远程仓库的名字;git remote rm pb
删除远程仓库;git push origin HEAD:master
push到指定仓库的指定分支。
git tag
列出所有标签git tag -l "v1.4.2.*"
查找符合的标签;git tag v0.0.1 -m "original version"
给最新的commit
打上一个普通的标签,-a(annotated)
打上一个注解标签;git show [tag-name]
显示标签信息
git branch testing
创建一个新分支;-d/-D testing
删除/强制删除指定分支;-v
显示每个分支最后提交的信息。git checkout testing
切换到指定分支(HEAD随分支一起移动);-b testing origin/testing
创建与远程对应的新分支并切换。git fetch origin
同步远程数据到本地,然后把origin/master
的指针移到它最新的位置上git cherry-pick <commitHash>
将某一分支的提交添加到当前分支。git cherry-pick A^..B
合并多个提交(包括A),A
的时间要早于B
。
文件修改会创建一个新的
blob
节点;在某个文件夹下创建一个新文件,那么新文件所在的文件夹tree
会复制一份;对某个文件夹重命名,只会改变父tree
中的名字,不会增加新的tree
节点。
checkout
用法
git中分支和tag本质并无太大区别,都是指向了某一个commit节点,其中tag是无法移动的,分支可以移动,默认HEAD是指向某个分支的,
git checkout commit-id
可以将HEAD分离出来,直接指向某个commit节点,这时HEAD就不随分支移动了;git branch -f master HEAD~
可以让master分支强制指向HEAD指向的父提交,也可以换成任何的commit-hash值。checkout
本质是改变HEAD
的指向,分支
会随着提交而前进。
git apply
应用diff文件--stat
查看diff文件--check
检查diff文件的兼容性--reject
应用diff文件
git format-patch HEAD -2
从HEAD
提交开始,将两个提交的内容保存到.patch
文件(包含HEAD提交
)git am --signoff < xxx.patch
应用.patch
文件,应用后提交记录会增加(apply
是应用diff,不会增加提交节点)
参考文献:[1] Pro Git中文版