[关闭]
@breakerthb 2017-09-11T07:27:08.000000Z 字数 3503 阅读 1344

Git分支管理

Git


1 查看分支

1.1 查看本地分支

$ git branch  
* br-2.1.2.2  
  master  

"*"表示当前分支。

1.2 查看远程分支

$ git branch -a  
* br-2.1.2.2  
    master  
    remotes/origin/HEAD -> origin/master  
    remotes/origin/br-2.1.2.1  
    remotes/origin/br-2.1.2.2  
    remotes/origin/br-2.1.3  
    remotes/origin/master  

1.3 本地分支和远程分支的对应关系

$ git branch -vv

2. 创建分支

$ git branch test  

创建结果:

$ git branch  
* br-2.1.2.2  
  master  
  test  

把分支推到远程分支

$ git push origin test

相当于:

$ git push origin test:test

注意:origin是默认的远程版本库名称,可以在.git/config文件中修改。

3. 切换分支

切换到分支“test”

$ git checkout test  
M       jingwei-server/src/main/java/com/taobao/jingwei/server/service/cmd/GetCustomerTarCmd.java  
M       jingwei-server/src/main/java/com/taobao/jingwei/server/util/ServerUtil.java  
Switched to branch 'test'  

M 表示cong 原来分支(上一次修改没有提交br-2.1.2.2)带过来的修改

3.1 放弃本地修改

让本地当前分支恢复到远端分支。

$ git checkout .

3.2 创建&切换

创建一个新分支dev,并切换为当前分支:

$ git checkout -b dev

4. 删除分支

4.1 删除本地分支

$ git branch -a
master
test_1
test_2
remotes/origin/master
remotes/origin/test_1
remotes/origin/test_2

$ git branch -d test_2
Deleted branch test_2 (was c470057).

$git branch -a
master
test_1
remotes/origin/master
remotes/origin/test_1
remotes/origin/test_2

可以看到本地分支test_2删除了

4.2 删除远程分支

$ git branch -a
* master
test_1
remotes/origin/master
remotes/origin/test_1
remotes/origin/test_2

$ git push origin :test_2
To git@*********- [deleted]         test_2

$ git branch -a
* master
test_1
remotes/origin/master
remotes/origin/test_1

注:git push origin :[分支名]就是删除远程分支的意思,和刚才我删除本地无关。如下面,我留着本地test_1分支,只是删除了远端的分支test_1

$ git push origin :test_1
To git@********
- [deleted]         test_1

$ git branch -a
* master
test_1
remotes/origin/master

5. 合并分支

dev合并到master

$ git checkout master 
    $ git merge --no-ff -m "merge with no-ff" dev

6. 查看提交

git log

git log  命令是查看全部提交日志  
git log -2  查看最近2次的提交日志  
git log -p  查看历史纪录以来哪几行被修改  
git log --stat --summary 查看每个版本变动的档案和行数

常用:

$ git log --stat

其他格式:

$ git log --pretty=oneline
    $ git log --pretty=short
$ git log --pretty=full
    $ git log --pretty=fuller

自定义格式:

$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 11 months ago : changed the version number
085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code
a11bef0 - Scott Chacon, 11 months ago : first commit

表 2-1 列出了常用的格式占位符写法及其代表的意义。

选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明

类似图表:

$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
*  5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
*  11d191e Merge branch 'defunkt' into local

最常用:

$ git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit  

添加alias:

alias gitlg="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"    

6 查看本地和远程分支

remotes/origin/HEAD -> origin/master #啥意思呢?  

在clone完成之后,Git 会自动为你将此远程仓库命名为origin,并下载其中所有的数据,建立一个指向它的master 分支的指针,我们用(远程仓库名)/(分支名) 这样的形式表示远程分支,所以origin/master指向的是一个remote branch(从那个branch我们clone数据到本地)

这个是执行 git remote -v 的结果,看出来origin其实就是远程的git地址的一个别名。

$ git remote  -v  
origin  git@xxxx/jingwei.git (fetch)  
origin  git@xxxx/jingwei.git (push)  

$ git branch -a  
  br-2.1.2.2  
  master  
* test  
  remotes/origin/HEAD -> origin/master  
  remotes/origin/br-2.1.2.1  
  remotes/origin/br-2.1.2.2  
  remotes/origin/br-2.1.3  
  remotes/origin/master  

7. 比较

比较两个版本之间的差别

$ git diff 版本号1 版本号2

注意: 一般把较早的版本放在前面更。

8. 回滚

8.1 退回之前的某个commit

$ git log
commit db484a2361842dee529a74e537cff6ed190eaf97

赋值前七位数字

$ git checkout db484a2

此时,db484a2的内容被checkout

8.2 在之前的commit创建新分支

db484a2的状态下执行:

$ git checkout -b new_branch_name 

此时db484a2的内容在新分支中

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注