整理一下经常忘记的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’ 参数。