整理一下经常忘记的Git命令
remote 同步
1
2
3
4
| $ git remote -v // 查看当前远程版本库
$ git remote add cocos2d-x git://github.com/cocos2d/cocos2d-x.git // 添加原始版本库
$ git fetch cocos2d-x // 获取原始版本库的更新
$ git merge cocos2d-x/master // 合并原始版本库的代码到当前版本库中,合并前确保当前分支是master
|
remote branch
1
2
3
4
5
6
| $ git branch -a //查看所有分支
$ git checkout -b branches/xxx origin/branches/xxx //chekcout远程分支
$ git push origin --delete <branchname> //删除远程分支
$ git push origin --delete tag <tagname> //删除远程tag
$ git push origin :<branchName> //推送一个空分支到远程分支,相当于删除分支
$ git push origin :refs/tags/<tagName> //推送一个空tag到远程,相当于删除tag
|
删除不存在对应远程分支的本地分支
假设这样一种情况:
- 我创建了本地分支b1并pull到远程分支 origin/b1;
- 其他人在本地使用fetch或pull创建了本地的b1分支;
- 我删除了 origin/b1 远程分支;
- 其他人再次执行fetch或者pull并不会删除这个他们本地的 b1 分支,运行 git branch -a 也不能看出这个branch被删除了,如何处理?
1
| git fetch -p //在fetch之后删除掉没有与远程分支对应的本地分支
|
重命名远程分支
在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支
1
2
3
| $ git push --delete origin devel //删除远程分支
$ git branch -m devel develop //重命名本地分支
$ git push origin develop //推送本地分支
|
把本地tag推送到远程
获取远程tag
1
| $ git fetch origin tag <tagname>
|
合并branch上的指定文件
branches/A 上修改了一个文件A.h,新增了一个文件B.h,删除了一个文件C.h。
1
2
3
4
5
6
7
| $ git checkout master //首先切换到master分支
$ git checkout -p branches/A A.h //不切换branch,把RemLanbranches/A上的A.h更新到当前分支
$ git checkout branches/A B.h //去掉-p参数,新增该B.h文件
$ rm C.h //删除文件目前还没找到其他办法,但效果是一样的
|
分支的衍合
参考:http://git-scm.com/docs/git-rebase
diff
只显示两个分支间的差异,如果你想找出‘master’,‘test’的共有 父分支和’test’分支之间的差异,你用3个‘.’来取代前面的两个’.’ 。
1
| $ git diff master..test
|
显示你当前的索引和上次提交间的差异;这些内容在不带”-a”参数运行 “git commit”命令时就会被提交。
显示你工作目录与上次提交时之间的所有差别,这条命令所显示的 内容都会在执行”git commit -a”命令时被提交。
如果你要查看当前的工作目录与另外一个分支的差别,你可以用下面的命令执行:
这会显示你当前工作目录与另外一个叫’test’分支的差别。你也以加上路径限定符,来只 比较某一个文件或目录。
显示你当前工作目录下的lib目录与上次提交之间的差别(或者更准确的 说是在当前分支)。
1
| $ git diff HEAD -- ./lib
|
如果不是查看每个文件的详细差别,而是统计一下有哪些文件被改动,有多少行被改 动,就可以使用‘–stat’ 参数。