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

1、branch相关的命令。
      分支的基本命令,至于分支的怎么实现非常重要所以要单独整理。
      git branch 不带参数 : 显示所有的本地分支,并且在当前分支的前面加“*”号标记
    
    
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git branch
  3. joey/master
  4. local
  5. * master
  6. newmaster
  7. next
  8. re
       git branch -r 列出远程分支. 
    
    
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git branch -r
  3. origin/HEAD -> origin/joey/master
  4. origin/joey/master
  5. origin/master
  6. origin/next
  7. origin/re
  8. origin/server
  9. origin/test
          git branch -a 列出本地分支和远程分支
    
    
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git branch -a
  3. joey/master
  4. local
  5. * master
  6. newmaster
  7. next
  8. re
  9. remotes/origin/HEAD -> origin/joey/master
  10. remotes/origin/joey/master
  11. remotes/origin/master
  12. remotes/origin/next
  13. remotes/origin/re
  14. remotes/origin/server
  15. remotes/origin/test
          git branch branch_name :创建一个新的本地分支,需要注意,此处只是创建分支,不进行分支切换, 在当前分支的基
础上,创建新分支,所以新建的分支的基本情况和当前分支一模一样。如下也可以看到没有切换分支
    
    
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git branch test
  3. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  4. $ git branch
  5. joey/master
  6. local
  7. * master
  8. newmaster
  9. next
  10. re
  11. test
         git branch -m | -M oldbranch newbranch 重命名分支,如果newbranch名字分支已经存在, 则需要使用-M强制重命名,
    否则,使用-m进行重命名。
 
    
    
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git branch -m newmaster new
  3. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  4. $ git branch
  5. joey/master
  6. local
  7. * master
  8. new
  9. next
  10. re
  11. test
          git branch -d | -D branchname 删除本地branchname分支 
    
    
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git branch -d remotes/origin/test
  3. error: branch 'remotes/origin/test' not found.
  4. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  5. $ git branch -d re
  6. error: The branch 're' is not fully merged.
  7. If you are sure you want to delete it, run 'git branch -D re'.
  8. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  9. $ git branch -D re
  10. Deleted branch re (was 5267571).
     
     
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git branch
  3. joey/master
  4. local
  5. * master
  6. new
  7. next
  8. test
          分支必须是最新的才能删除,否则的话就需要用-D强制删除。上面也显示了无法删除远程分支。
          git branch -d -r branchname 删除远程branchname分支
    
    
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git branch -r
  3. origin/HEAD -> origin/joey/master
  4. origin/joey/master
  5. origin/master
  6. origin/next
  7. origin/re
  8. origin/server
  9. origin/test
  10. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  11. $ git branch -d -r origin/re
  12. Deleted remote-tracking branch origin/re (was 57c77bc).
  13. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  14. $ git branch -r
  15. origin/HEAD -> origin/joey/master
  16. origin/joey/master
  17. origin/master
  18. origin/next
  19. origin/server
  20. origin/test
2、checkout
      网上的一张图:
     chekout有三种主要的用法:
     第一种用法:git checkout [-q] [<commit>] [--] <paths>... 带路径的。
                            -q/ --quiet:quiet安静.就是不打印任何信息。
    
    
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git checkout -q -- Test.txt
         注意commit和--都是可选的.
         用指定的 commit 提交版本的paths文件覆盖工作区中对应的文件,如果commit省略则表示以当前的版本(最近一次
的提交中的文件覆盖工作区中的)其实就是把索引区的覆盖过去。
        忽然觉得不对把,索引区改了几次没提交可能吗?
       不存在的,就是用最新一次的提交,你不提交一直处于修改状态,正好让你选择回退啊。 注意于git reset HEAD file的
区别,它是用指定版本覆盖缓存区,checkout带路径的是覆盖工作区。
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git status
  2. On branch test
  3. Changes not staged for commit:
  4. (use "git add <file>..." to update what will be committed)
  5. (use "git checkout -- <file>..." to discard changes in working directory)
  6. modified: Test
  7. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git checkout HEAD -- Test
  8. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git status
  9. On branch test
  10. nothing to commit, working directory clean
         和git checkout -- Test命令一样的效果.
         那么此时就一个非常危险的命令git checkout .  :相当于只是给了个路径. 这个会回退你所有的工作区中的修改.用的当
前版本。
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git status
  2. On branch test
  3. Changes not staged for commit:
  4. (use "git add <file>..." to update what will be committed)
  5. (use "git checkout -- <file>..." to discard changes in working directory)
  6. modified: Readme.txt
  7. modified: Test
  8. no changes added to commit (use "git add" and/or "git commit -a")
  9. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git checkout .
  10. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git status
  11. On branch test
  12. nothing to commit, working directory clean
        第二种用法: git checkout [<branch>] :切换分支
                 当后面的参数是分支时用于切换分支。 没有任何参数的时候是切换到当当前,就相当于只是看了看状态,在切换
分支的时候其实进行了, 更新HEAD以指向要切换的branch分支,以及用branch 指向的树更新暂存区和工作区。
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git branch
  2. server
  3. * test
  4. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git checkout server
  5. M Readme.txt
  6. M Test
  7. Switched to branch 'server'
  8. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git branch
  9. * server
  10. test
  11. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git checkout
  12. M Readme.txt
  13. M Test
          
          第三种用法: git checkout [-m] [[-b]--orphan] <new_branch>] [<start_point>]
         主要是创建和切换到新的分支<new_branch>,新的分支从<start_point>指定的提交开始创建。 迁出一个分支的特定版
本。这个poit版本commitid之前的log通过git log就不显示了。总的来说就是 基于当前分支的某一次commit来创建分支。 默认
的point是最新的提交点
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git checkout -b new
  2. M Readme.txt
  3. M Test
  4. Switched to a new branch 'new'
  5. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git branch
  6. * new
  7. server
  8. 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的时候一定要注意啊。
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git log
  2. commit 03b5eb1a9c9deff09294713dc941080e90b2cb85
  3. Author: yuan.x.zhao <yuan.x.zhao@sony.com>
  4. Date: Mon Apr 17 12:59:22 2017 +0800
  5. 第二次提交
      小技巧:如果记录过多,则按Page Up、Page Down、↓、↑来控制显示, 按q退出历史记录列表。
      -p:按补丁显示每个更新间的差异
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git log -p
  2. commit 03b5eb1a9c9deff09294713dc941080e90b2cb85
  3. Author: yuan.x.zhao <yuan.x.zhao@sony.com>
  4. Date: Mon Apr 17 12:59:22 2017 +0800
  5. 第二次提交
  6. Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359
  7. diff --git a/Readme.txt b/Readme.txt
  8. new file mode 100644
  9. index 0000000..304360c
  10. --- /dev/null
  11. +++ b/Readme.txt
  12. @@ -0,0 +1 @@
  13. +Readme
  14. diff --git a/Test b/Test
  15. index 16fdd89..be8abc8 100644
  16. --- a/Test
  17. +++ b/Test
  18. @@ -1 +1,2 @@
  19. 测试checkout version1
  20. +第一次修改哦!
        看起来不是很实用,因为显示的太多了。
        git log --stat :显示patch的摘要,只改动的几个文件的状态。
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git log --stat
  2. commit 03b5eb1a9c9deff09294713dc941080e90b2cb85
  3. Author: yuan.x.zhao <yuan.x.zhao@sony.com>
  4. Date: Mon Apr 17 12:59:22 2017 +0800
  5. 第二次提交
  6. Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359
  7. Readme.txt | 1 +
  8. Test | 1 +
  9. 2 files changed, 2 insertions(+)
          git log number :显示number条log
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git log -2
  2. commit 03b5eb1a9c9deff09294713dc941080e90b2cb85
  3. Author: yuan.x.zhao <yuan.x.zhao@sony.com>
  4. Date: Mon Apr 17 12:59:22 2017 +0800
  5. 第二次提交
  6. Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359
  7. commit d2a0f8895e322ed6c4990e15a0b6c5cf139a8e24
  8. Author: yuan.x.zhao <yuan.x.zhao@sony.com>
  9. Date: Mon Apr 17 11:32:05 2017 +0800
  10. 测试checkout
  11. Change-Id: I00e5d3c204bf639eb2408937f8600b354b31fea1
  12. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$
          git log --pretty=oneline :只显示一行没不加pretty的时候commitid显示的不完整
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git log --pretty=oneline
  2. 03b5eb1a9c9deff09294713dc941080e90b2cb85 第二次提交
  3. d2a0f8895e322ed6c4990e15a0b6c5cf139a8e24 测试checkout
  4. 876ace59be5dad1066afcdae7118b441219d2769 NFC: Remove un-nessesary free for mifare
  5. 8664b9c1e0d6c3b7813faf1bd915ec3e95988ae9 NFC: NFC status by NFCWifiTehtering in multiwindow
  6. f34f16bbcec5c22cf38a261ec2e998cb9d41d83d Allow for ignore() to work with random UID tags.
        git log --graph 显示log的时候坏西安市分支的合并的图等等呢个.
        git log --author=yuan.x.zhao -2 :显示指定作者的提交
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git log --author=yuan.x.zhao -2
  2. commit 03b5eb1a9c9deff09294713dc941080e90b2cb85
  3. Author: yuan.x.zhao <yuan.x.zhao@sony.com>
  4. Date: Mon Apr 17 12:59:22 2017 +0800
  5. 第二次提交
  6. Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359
  7. commit d2a0f8895e322ed6c4990e15a0b6c5cf139a8e24
  8. Author: yuan.x.zhao <yuan.x.zhao@sony.com>
  9. Date: Mon Apr 17 11:32:05 2017 +0800
  10. 测试checkout
  11. Change-Id: I00e5d3c204bf639eb2408937f8600b354b31fea1
          --committer 仅显示指定提交者相关的提交。正定提交者
    
    
  1. xp022430@cnbjlx24729:~/Projects/n-mr1-loire/packages/apps/Nfc$ git log --committer=yuan.x.zhao
  2. commit 03b5eb1a9c9deff09294713dc941080e90b2cb85
  3. Author: yuan.x.zhao <yuan.x.zhao@sony.com>
  4. Date: Mon Apr 17 12:59:22 2017 +0800
  5. 第二次提交
  6. Change-Id: If0fe8bff74dc7f3019a930846d6b6c56a99df359
         注意以上都是可以组合的,如下:
   
   
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git log -2 --pretty=oneline
  3. dc67406bf27de952d792cde3f6387d12dcca7544 checkout
  4. e4b44b46e2b55e07ef0b69f440a57ab72f666826 Update Test.txt
          有一个特殊的git reflog.会显示所有的log信息,无论回退到什么版本了,每次的改动信息都会有
   
   
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ git reflog
  3. dc67406 HEAD@{0}: commit: checkout
  4. e4b44b4 HEAD@{1}: checkout: moving from next to master
  5. 80d333e HEAD@{2}: merge 80d333e36ead0f32e6ec174cd70e0e8a69ab5667: Fast-forward
  6. 5267571 HEAD@{3}: checkout: moving from master to next
  7. ee244d0 HEAD@{4}: pull origin master:master: fast-forward
  8. d2f5ef2 HEAD@{5}: checkout: moving from joey/master to master
  9. 744f5f3 HEAD@{6}: commit (merge): fix conflic
  10. 64f26f9 HEAD@{7}: merge 64f26f9ad90f9c91d9d88959ca4c90f191de3df4: Fast-forward
  11. 73fdfc0 HEAD@{8}: merge origin/joey/master: Fast-forward
  12. 1d07ddc HEAD@{9}: checkout: moving from next to joey/master
  13. 5267571 HEAD@{10}: checkout: moving from next to next
  14. 5267571 HEAD@{11}: checkout: moving from master to next
  15. 5104d8b HEAD@{12}: merge origin/master: Fast-forward
  16. a040ffb HEAD@{13}: checkout: moving from local to master
  17. 5267571 HEAD@{14}: checkout: moving from next to local
  18. 5267571 HEAD@{15}: checkout: moving from newmaster to next
  19. aba261d HEAD@{16}: checkout: moving from master to newmaster
  20. a040ffb HEAD@{17}: checkout: moving from next to master
  21. 5267571 HEAD@{18}: merge origin/next: Fast-forward

5、git tag :只是整理了一下网上的只是,自己没有本地验证
         git有commitid,为什么还要引入tag?
         网上的一个回答挺好的:
    
    
  1. “请把上周一的那个版本打包发布,commit号是6a5819e...”
  2. “一串乱七八糟的数字不好找!”
  3. 如果换一个办法:
  4. “请把上周一的那个版本打包发布,版本号是v1.2
  5. “好的,按照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等等了,都不可以。这些入门工作熟悉以后再说把。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值