Git 常用命令

公司用GIT管理代码,关于Git的教程很多,这里只是记录下一些常用命令的用法,以防日后忘记。

------------------------------------------------------------------------

[size=large][b]git clone[/b] [/size] 从远程git服务器拷贝某个repository 到本地上,并将远程服务器命名为origin;

[size=large][b]git fetch origin XX:YY[/b][/size] XX为origin上某个分支,将其映射到本地YY分支(如果YY 为空则默认是与XX名字相同的分支)。如 git fetch origin wu_d-catchup-develop,就是将服务器上的wu_d-catchup-develop分支映射到本地上,并跳转到该分支

[size=large][b]git merge XX[/b][/size] XX 为本地某个分支,将XX分支合并到当前所在分支

[b][size=large]git pull origin XX[/size][/b] XX 为服务器某个分支。功能相当于先fetch XX 再与当前本地所在分支合并

[size=large][b]git push origin XX:YY[/b][/size] XX 为本地分支,YY为远端分支。将XX 合并到YY上。若 XX为空,则意为删除YY分支。

[size=large][b]git branch[/b][/size] 显示当前本地所有分支
[size=large][b]git branch XX[/b][/size] 新建分支XX
[size=large][b]git branch -D XX[/b][/size] 删除XX分支
[size=large][b]git checkout XX[/b][/size] 跳转到XX分支 (注: git checkout还有更多用法,请查看下文)
[size=large][b]git:checkout -b XX[/b][/size] 相当于先新建XX分支再跳转到该分支

[size=large][b]git rebase XX[/b][/size] 这个比较复杂,相当于把当前所在的分支(命名为C)的所有需要挪动的版本(从C和XX开始分叉的版本开始一直到当前版本)挪到XX分支最新版本之后,并将文件内容合并。如下图将mywork分支rebase到origin分支:
(rebase前)
[img]http://dl2.iteye.com/upload/attachment/0090/0873/0e690b91-3e3d-353b-a8fe-de82b2d46883.png[/img]
(rebase后)
[img]http://dl2.iteye.com/upload/attachment/0090/0875/8582fadc-1cce-3b48-9103-6a910153a2f7.png[/img]
注意在rebase过程中C5,C6可能会和 C3, C4 冲突,可以git rebase --skip来取消C5', C6'的添加。
更高级的git rebase用法:
如果只想把C6移植到C4上,先git checkout mywork跳转到mywork分支,然后git rebase head^ --onto master。此处注意是head^而不是head,形象地说,相当于将要移植的mywork分支的根节点(此处为C5)放在和C4重合。rebase后的效果如下:
[img]http://dl2.iteye.com/upload/attachment/0090/0998/a8788bcd-01c9-3b60-9262-558528a5e272.png[/img]
现在如果想把C6移植到C3上,则需要先查询C3 commit的编号(可以git checkout master跳转到master分支,用git log或者git show head^查询得到),这里假设为a2474b。则回到mywork分支, 输入git rebase head^ --onto a2474b即可。rebase后效果如下:
[img]http://dl2.iteye.com/upload/attachment/0090/1000/a5f0eb61-c26a-3e99-8779-8744ba83dd3c.png[/img]
在这里用到的git rebase <current commit point> --onto <new commit point>,两个commit point缺一不可。


[size=large][b]git checkout FILE[/b][/size] 将file 恢复到上次commit 状态;
[size=large][b]git checkout [version] FILE[/b][/size] 将file 恢复到version版本的状态;
[size=large][b]git checkout [version][/b][/size] 新建一个悬垂分支并跳转到该分支,该分支的内容相当于从[version]版本checkout 出来;(其实后面不指定FILE,可以理解为对所有文件都进行恢复)


[size=large][b]git log -X[/b][/size] X 为数字,显示最近x个版本

[size=large][b]git diff[/b][/size] 显示当前所有文件和最近一次commit版本的内容差异;
[size=large][b]git diff [version][/b][/size] 显示当前所有文件和version版本的内容差异;
[size=large][b]git diff [version1]..[version2][/b][/size] 显示[version1]版本和[version2]版本的所有文件的内容差异;
[size=large][b]git diff FILE[/b][/size] 显示当前指定FILE和最近一次commit版本的内容差异;
[size=large][b]git diff [version] FILE[/b][/size] 显示当前指定FILE和version版本的内容差异;
[size=large][b]git diff [version1]..[version2] FILE[/b][/size] 显示[version1]版本和[version2]版本的指定FILE文件的内容差异;

[size=large][b]git status[/b][/size] 查看当前分支修改状况(如是否增添某个文件,修改某个文件)

[size=large][b]git show[/b][/size] 查看最后一次commit(即当前版本)相对于之前一次commit的修改状况
[b][size=large]git show [version][/size][/b] 查看某个版本相对前一次commit的修改状况

[size=large][b]git reset --hard head[/b][/size] 完全退回到最后一次commit状态,head^为倒数第二次,head^^为倒数第三次,head~N表示倒数第N+1个版本(比如head~1=head^, head~2=head^^)

[size=large][b]git add XX[/b][/size] XX 为文件(夹),将该文件从uncheck/check状态变为stage状态
[size=large][b]git rm XX [/b][/size] XX 为文件(夹),将该文件(必须处于check状态,如果是untrack则git提示找不到,如果是stage则无法删除)删除并提交到stage状态;另外,如果XX已经处于stage状态,可以先暴力删除rm XX, 然后再git rm XX.

[size=large][b]git blame FILE[/b][/size] 得到整个文件的每一行的详细修改信息:包括SHA串(就是各个版本的编号,可以通过git checkout [SHA串]恢复到该版本),日期和作者;

------------------------------------------------------------------------

git管理下文件的状态:
unchecked (git 不认识的)
check(git 认识的,又分为以下两种)
-- unmodified(自上次commit后干净的)
-- modified(自上次commit后修改过的)
stage(git 认识的,下次执行commit后会提交的)
注:单纯修改某个文件后,执行git commit后git不会知道这个修改,因为此时文件只是modified而不是 stage,需要用git add 提交到stage状态再git commit。或者用git commit -a 直接提交。

git commit -m "XX" : "XX"是你的提交说明.这样就不用跳入vi编辑页面来填写提交说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值