git入门-----分支和合并相关命令(branch 、chekout、log、tag)
2017-04-23 16:10
477 查看
1、branch相关的命令。
分支的基本命令,至于分支的怎么实现非常重要所以要单独整理。
git branch 不带参数 : 显示所有的本地分支,并且在当前分支的前面加“*”号标记
git branch -r 列出远程分支.
git branch -a 列出本地分支和远程分支
git branch branch_name :创建一个新的本地分支,需要注意,此处只是创建分支,不进行分支切换,在当前分支的基
础上,创建新分支,所以新建的分支的基本情况和当前分支一模一样。如下也可以看到没有切换分支
git branch -m | -M oldbranch newbranch 重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,
否则,使用-m进行重命名。
git branch -d | -D branchname 删除本地branchname分支
分支必须是最新的才能删除,否则的话就需要用-D强制删除。上面也显示了无法删除远程分支。
git branch -d -r branchname 删除远程branchname分支
2、checkout
网上的一张图:
chekout有三种主要的用法:
第一种用法:git checkout [-q] [<commit>] [--] <paths>... 带路径的。
-q/--quiet:quiet安静.就是不打印任何信息。
注意commit和--都是可选的.
用指定的commit提交版本的paths文件覆盖工作区中对应的文件,如果commit省略则表示以当前的版本(最近一次
的提交中的文件覆盖工作区中的)其实就是把索引区的覆盖过去。
忽然觉得不对把,索引区改了几次没提交可能吗?
不存在的,就是用最新一次的提交,你不提交一直处于修改状态,正好让你选择回退啊。注意于git reset HEAD file的
区别,它是用指定版本覆盖缓存区,checkout带路径的是覆盖工作区。
和git checkout -- Test命令一样的效果.
那么此时就一个非常危险的命令git checkout . :相当于只是给了个路径. 这个会回退你所有的工作区中的修改.用的当
前版本。
第二种用法:git checkout [<branch>] :切换分支
当后面的参数是分支时用于切换分支。 没有任何参数的时候是切换到当当前,就相当于只是看了看状态,在切换
分支的时候其实进行了,更新HEAD以指向要切换的branch分支,以及用branch 指向的树更新暂存区和工作区。
第三种用法:git checkout [-m] [[-b]--orphan] <new_branch>] [<start_point>]
主要是创建和切换到新的分支<new_branch>,新的分支从<start_point>指定的提交开始创建。迁出一个分支的特定版
本。这个poit版本commitid之前的log通过git log就不显示了。总的来说就是基于当前分支的某一次commit来创建分支。默认
的point是最新的提交点
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的时候一定要注意啊。
小技巧:如果记录过多,则按Page Up、Page Down、↓、↑来控制显示,按q退出历史记录列表。
-p:按补丁显示每个更新间的差异
看起来不是很实用,因为显示的太多了。
git log --stat :显示patch的摘要,只改动的几个文件的状态。
git log number :显示number条log
git log --pretty=oneline :只显示一行没不加pretty的时候commitid显示的不完整
git log --graph 显示log的时候坏西安市分支的合并的图等等呢个.
git log --author=yuan.x.zhao -2 :显示指定作者的提交
--committer 仅显示指定提交者相关的提交。正定提交者
注意以上都是可以组合的,如下:
有一个特殊的git reflog.会显示所有的log信息,无论回退到什么版本了,每次的改动信息都会有
5、git tag :只是整理了一下网上的只是,自己没有本地验证
git有commitid,为什么还要引入tag?
网上的一个回答挺好的:
完整命令: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等等了,都不可以。这些入门工作熟悉以后再说把。
分支的基本命令,至于分支的怎么实现非常重要所以要单独整理。
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等等了,都不可以。这些入门工作熟悉以后再说把。
相关文章推荐
- Git入门指南十一:Git branch 分支与合并分支
- Git入门指南十一:Git branch 分支与合并分支
- git分支(branch)操作相关命令
- git删除远程分支和tag相关命令
- Git中branch、checkout、merge、log、tag命令介绍
- git branch-分支合并,发布版本后打tag
- git分支(branch)操作相关命令
- git分支(branch)操作相关命令及分支命令的使用
- Git branch 分支与合并分支
- git命令之git tag 给当前分支打标签
- git 入门第一节 创建版本库 及 相关命令使用
- Git分支相关命令
- git 常用命令 创建查看删除分支,创建查看删除tag等
- git入门四(分支创建合并)
- Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突
- git入门(6)-Git checkout 和git branch分支的创建和删除
- 使用git的cherry-pick命令把其他分支的某个commit合并到当前分支
- git命令之git tag 给当前分支打标签
- Git merge和git branch 分支与合并
- git 下 分支创建 合并 删除 相关操作