memoryboxes blog

Been here so long got to calling it home.

Git Cheat

| Comments

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

删除不存在对应远程分支的本地分支

假设这样一种情况:

  1. 我创建了本地分支b1并pull到远程分支 origin/b1;
  2. 其他人在本地使用fetch或pull创建了本地的b1分支;
  3. 我删除了 origin/b1 远程分支;
  4. 其他人再次执行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推送到远程

1
$ git push --tags

获取远程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”命令时就会被提交。

1
$ git diff --cached

显示你工作目录与上次提交时之间的所有差别,这条命令所显示的 内容都会在执行”git commit -a”命令时被提交。

1
$ git diff HEAD

如果你要查看当前的工作目录与另外一个分支的差别,你可以用下面的命令执行: 这会显示你当前工作目录与另外一个叫’test’分支的差别。你也以加上路径限定符,来只 比较某一个文件或目录。

1
$ git diff test

显示你当前工作目录下的lib目录与上次提交之间的差别(或者更准确的 说是在当前分支)。

1
$ git diff HEAD -- ./lib

如果不是查看每个文件的详细差别,而是统计一下有哪些文件被改动,有多少行被改 动,就可以使用‘—stat’ 参数。

1
$ git diff --stat

Comments