您的位置:首页 > 其它

git入门-----分支和合并相关命令(branch 、chekout、log、tag)

2017-04-23 16:10 477 查看
1、branch相关的命令。

      分支的基本命令,至于分支的怎么实现非常重要所以要单独整理。
      git branch 不带参数 : 显示所有的本地分支,并且在当前分支的前面加“*”号标记

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch

joey/master

local

* master

newmaster

next

re


       git branch -r 列出远程分支. 

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch -r

origin/HEAD -> origin/joey/master

origin/joey/master

origin/master

origin/next

origin/re

origin/server

origin/test


          git branch -a 列出本地分支和远程分支

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch -a

joey/master

local

* master

newmaster

next

re

remotes/origin/HEAD -> origin/joey/master

remotes/origin/joey/master

remotes/origin/master

remotes/origin/next

remotes/origin/re

remotes/origin/server

remotes/origin/test


          git branch branch_name :创建一个新的本地分支,需要注意,此处只是创建分支,不进行分支切换,在当前分支的基
础上,创建新分支,所以新建的分支的基本情况和当前分支一模一样。如下也可以看到没有切换分支

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch test


Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch

joey/master

local

* master

newmaster

next

re

test


         git branch -m | -M oldbranch newbranch 重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,
    否则,使用-m进行重命名。
 

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch -m newmaster new


Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch

joey/master

local

* master

new

next

re

test


          git branch -d | -D branchname 删除本地branchname分支 

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch -d remotes/origin/test

error: branch 'remotes/origin/test' not found.


Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch -d re

error: The branch 're' is not fully merged.

If you are sure you want to delete it, run 'git branch -D re'.


Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch -D re

Deleted branch re (was 5267571).


Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch

joey/master

local

* master

new

next

test


          分支必须是最新的才能删除,否则的话就需要用-D强制删除。上面也显示了无法删除远程分支。
          git branch -d -r branchname 删除远程branchname分支

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch -r

origin/HEAD -> origin/joey/master

origin/joey/master

origin/master

origin/next

origin/re

origin/server

origin/test


Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch -d -r origin/re

Deleted remote-tracking branch origin/re (was 57c77bc).


Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git branch -r

origin/HEAD -> origin/joey/master

origin/joey/master

origin/master

origin/next

origin/server

origin/test


2、checkout

      网上的一张图:



     chekout有三种主要的用法:

     第一种用法:git checkout [-q] [<commit>] [--] <paths>... 带路径的。
                           -q/--quiet:quiet安静.就是不打印任何信息。

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git checkout -q -- Test.txt


         注意commit和--都是可选的.
         用指定的commit提交版本的paths文件覆盖工作区中对应的文件,如果commit省略则表示以当前的版本(最近一次
的提交中的文件覆盖工作区中的)其实就是把索引区的覆盖过去。
        忽然觉得不对把,索引区改了几次没提交可能吗?

       不存在的,就是用最新一次的提交,你不提交一直处于修改状态,正好让你选择回退啊。注意于git reset HEAD file的
区别,它是用指定版本覆盖缓存区,checkout带路径的是覆盖工作区。

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git status

On branch test

Changes not staged for commit:

(use "git add <file>..." to update what will be committed)

(use "git checkout -- <file>..." to discard changes in working directory)


modified:   Test


xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git checkout HEAD -- Test

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git status

On branch test

nothing to commit, working directory clean


         和git checkout -- Test命令一样的效果.
         那么此时就一个非常危险的命令git checkout .  :相当于只是给了个路径. 这个会回退你所有的工作区中的修改.用的当
前版本。

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git status

On branch test

Changes not staged for commit:

(use "git add <file>..." to update what will be committed)

(use "git checkout -- <file>..." to discard changes in working directory)


modified:   Readme.txt

modified:   Test


no changes added to commit (use "git add" and/or "git commit -a")

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git checkout .

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git status

On branch test

nothing to commit, working directory clean


        第二种用法:git checkout [<branch>] :切换分支
                 当后面的参数是分支时用于切换分支。 没有任何参数的时候是切换到当当前,就相当于只是看了看状态,在切换
分支的时候其实进行了,更新HEAD以指向要切换的branch分支,以及用branch 指向的树更新暂存区和工作区。

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git branch

server

* test

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git checkout server

M	Readme.txt

M	Test

Switched to branch 'server'

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git branch

* server

test

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git checkout

M	Readme.txt

M	Test


          
          第三种用法:git checkout [-m] [[-b]--orphan] <new_branch>] [<start_point>]
         主要是创建和切换到新的分支<new_branch>,新的分支从<start_point>指定的提交开始创建。迁出一个分支的特定版
本。这个poit版本commitid之前的log通过git log就不显示了。总的来说就是基于当前分支的某一次commit来创建分支。默认
的point是最新的提交点

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git checkout -b new

M	Readme.txt

M	Test

Switched to a new branch 'new'

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git branch

* new

server

test


          git checkout -b <branch> --track <remote>/<branch> 从远程分支拉出本地分支

3、git merge。
     merge命令的各个参数和分支的管理策略有着不可分割关系,等整理分支的时候一并处理。此时简单记住一个:
     git merge <branch_name> 命令用于合并指定分支到当前分支上。

     git merge branch1 branch2 :有类似这样的吗???把分支1合并到分支2上????

4、git log
      完整命令:git log [<options>] [<since>..<until>] [[--] <path>...]
      直接gti log的时候
     一个 SHA-1 校验和、作者的名字 和 电子邮件地址、提交时间,最后缩进一个段落显示提交说明。
     工作中cherry-pick的时候一定要注意啊。

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git log

commit 03b5eb1a9c9deff09294713dc941080e90b2cb85

Author: yuan.x.zhao <yuan.x.zhao@sony.com>

Date:   Mon Apr 17 12:59:22 2017 +0800


第二次提交


      小技巧:如果记录过多,则按Page Up、Page Down、↓、↑来控制显示,按q退出历史记录列表。
      -p:按补丁显示每个更新间的差异

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git log -p

commit 03b5eb1a9c9deff09294713dc941080e90b2cb85

Author: yuan.x.zhao <yuan.x.zhao@sony.com>

Date:   Mon Apr 17 12:59:22 2017 +0800


第二次提交


Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359


diff --git a/Readme.txt b/Readme.txt

new file mode 100644

index 0000000..304360c

--- /dev/null

+++ b/Readme.txt

@@ -0,0 +1 @@

+Readme

diff --git a/Test b/Test

index 16fdd89..be8abc8 100644

--- a/Test

+++ b/Test

@@ -1 +1,2 @@

测试checkout version1

+第一次修改哦!


        看起来不是很实用,因为显示的太多了。
        git log --stat :显示patch的摘要,只改动的几个文件的状态。

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git log --stat

commit 03b5eb1a9c9deff09294713dc941080e90b2cb85

Author: yuan.x.zhao <yuan.x.zhao@sony.com>

Date:   Mon Apr 17 12:59:22 2017 +0800


第二次提交


Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359


Readme.txt | 1 +

 Test   | 1 +

2 files changed, 2 insertions(+)


          git log number :显示number条log

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git log -2

commit 03b5eb1a9c9deff09294713dc941080e90b2cb85

Author: yuan.x.zhao <yuan.x.zhao@sony.com>

Date:   Mon Apr 17 12:59:22 2017 +0800


第二次提交


Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359


commit d2a0f8895e322ed6c4990e15a0b6c5cf139a8e24

Author: yuan.x.zhao <yuan.x.zhao@sony.com>

Date:   Mon Apr 17 11:32:05 2017 +0800


测试checkout


Change-Id: I00e5d3c204bf639eb2408937f8600b354b31fea1

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$


          git log --pretty=oneline :只显示一行没不加pretty的时候commitid显示的不完整

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git log --pretty=oneline 

03b5eb1a9c9deff09294713dc941080e90b2cb85 第二次提交

d2a0f8895e322ed6c4990e15a0b6c5cf139a8e24 测试checkout

876ace59be5dad1066afcdae7118b441219d2769 NFC: Remove un-nessesary free for mifare

8664b9c1e0d6c3b7813faf1bd915ec3e95988ae9 NFC: NFC status by NFCWifiTehtering in multiwindow

f34f16bbcec5c22cf38a261ec2e998cb9d41d83d Allow for ignore() to work with random UID tags.


        git log --graph 显示log的时候坏西安市分支的合并的图等等呢个.
        git log --author=yuan.x.zhao -2 :显示指定作者的提交

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git log --author=yuan.x.zhao -2

commit 03b5eb1a9c9deff09294713dc941080e90b2cb85

Author: yuan.x.zhao <yuan.x.zhao@sony.com>

Date:   Mon Apr 17 12:59:22 2017 +0800


第二次提交


Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359


commit d2a0f8895e322ed6c4990e15a0b6c5cf139a8e24

Author: yuan.x.zhao <yuan.x.zhao@sony.com>

Date:   Mon Apr 17 11:32:05 2017 +0800


测试checkout


Change-Id: I00e5d3c204bf639eb2408937f8600b354b31fea1


          --committer 仅显示指定提交者相关的提交。正定提交者

xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$git log --committer=yuan.x.zhao

commit 03b5eb1a9c9deff09294713dc941080e90b2cb85

Author: yuan.x.zhao <yuan.x.zhao@sony.com>

Date:   Mon Apr 17 12:59:22 2017 +0800


第二次提交


Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359


         注意以上都是可以组合的,如下:

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git log -2 --pretty=oneline

dc67406bf27de952d792cde3f6387d12dcca7544 checkout

e4b44b46e2b55e07ef0b69f440a57ab72f666826 Update Test.txt


          有一个特殊的git reflog.会显示所有的log信息,无论回退到什么版本了,每次的改动信息都会有

Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)

$ git reflog

dc67406 HEAD@{0}: commit: checkout

e4b44b4 HEAD@{1}: checkout: moving from next to master

80d333e HEAD@{2}: merge 80d333e36ead0f32e6ec174cd70e0e8a69ab5667: Fast-forward

5267571 HEAD@{3}: checkout: moving from master to next

ee244d0 HEAD@{4}: pull origin master:master: fast-forward

d2f5ef2 HEAD@{5}: checkout: moving from joey/master to master

744f5f3 HEAD@{6}: commit (merge): fix conflic

64f26f9 HEAD@{7}: merge 64f26f9ad90f9c91d9d88959ca4c90f191de3df4: Fast-forward

73fdfc0 HEAD@{8}: merge origin/joey/master: Fast-forward

1d07ddc HEAD@{9}: checkout: moving from next to joey/master

5267571 HEAD@{10}: checkout: moving from next to next

5267571 HEAD@{11}: checkout: moving from master to next

5104d8b HEAD@{12}: merge origin/master: Fast-forward

a040ffb HEAD@{13}: checkout: moving from local to master

5267571 HEAD@{14}: checkout: moving from next to local

5267571 HEAD@{15}: checkout: moving from newmaster to next

aba261d HEAD@{16}: checkout: moving from master to newmaster

a040ffb HEAD@{17}: checkout: moving from next to master

5267571 HEAD@{18}: merge origin/next: Fast-forward


5、git tag :只是整理了一下网上的只是,自己没有本地验证

         git有commitid,为什么还要引入tag?
         网上的一个回答挺好的:

“请把上周一的那个版本打包发布,commit号是6a5819e...”


“一串乱七八糟的数字不好找!”


如果换一个办法:


“请把上周一的那个版本打包发布,版本号是v1.2”


“好的,按照tag v1.2查找commit就行!”


         完整命令:git tag [-a | -s | -u <keyid>] [-f] [-m <msg> | -F <file>] <tagname> [<commit> | <object>]

         git tag -a tagname -m "comments"  为tag添加详细的说明消息。
         git tag tagname
         此时省略commitid啦就是为当前的最近一次的commitid打上标签。也可不省略为指定的commitid打上标签比如你前面
   忘记打标签了,然后通过log找到commitid然后打上标签。
          git tag tagname commitID
   删除某个标签
          git tag -d tagname //本地删除
  修改某个标签
         git tag -f new_name old_name
  查找某个tag的时候
         git tag -l :这样会显示全部的但有时候会太多了,过滤 git tag -l | grep xxx
  查看某个标签的详细信息:
         git show tagname 
 标签发布提交
        git push [origin] --tags
        git push --tags 或 git push origin --tags   //提交所有tag.
        git push origin tagname    //提交某个指定的tag
 添加tag需要gerrite给权限。删除远程tag,更新远程tag等等了,都不可以。这些入门工作熟悉以后再说把。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  branch 合并 tag