3.查看远程分支,1.经过决定台命令

Git应用套路

Git应用套路

一. 配置git别名

1.透过操纵台命令vim ~/.gitconfig开拓配置页面
2.布置如下内容:

[user]
    name = your Name
    email = your E-mail
[alias]
    co=checkout
    ci=commit
    st=status
    pl=pull
    ps=push
    dt=difftool
    ca=commit -am
    b=branch
    t=tag
[push]
    default = simple

一. 配置git别名

1.因此控制台命令vim ~/.gitconfig开辟配置页面
2.部署如下内容:

[user]
    name = your Name
    email = your E-mail
[alias]
    co=checkout
    ci=commit
    st=status
    pl=pull
    ps=push
    dt=difftool
    ca=commit -am
    b=branch
    t=tag
[push]
    default = simple

二. git在地面品种中的应用

1.项目git初始化git init
2.查看本地品种的情景–git st
3.将项目位于地面包车型大巴暂存区–git add ./git add 要添加的文件名
4.将品种拉长到地方git仓库–git ca -m "文本说明"/git ca "文本说明"

二. git在本土品种中的应用

1.项目git初始化git init
2.翻看本地品种的情事–git st
3.将品种坐落地面的暂存区–git add ./git add 要添加的文件名
4.将品种增进到本地git仓库–git ca -m "文本说明"/git ca "文本说明"

三. git连接远程仓库,并进行推送

1.应用如下语句连接远程仓库,添加远程的数据源

git remote add origin git@gitee.com:your-name/your-project.git //如果此时正常会正常链接
//如果提示链接已存在,可以利用下面的命令进行删除
git remote rm origin

2.将地面包车型的士多少推送到长途仓库

git ps -u origin master //注意如果是首次进行远程推送,要注意加上参数-u

3.此时线上大概会报错,提醒争执可能是不能举行不易的推送;我们近年来的做法是将长途的数码拉下来。

git pull //利用git pull将远程的数据拉下来

4.那时还会唤醒错误,错误如下所示:
图片 1

$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:michaelliao/learngit
   fc38031..291bea8  dev        -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream dev origin/<branch>


5.涌出此错误的由来是从未有过点名地点dev分支与远程origin/dev分支的链接,所以,大家要用如下语句进行本地分支与远程分支的链接。

git branch --set-upstream master origin/master

6.确立连接后,再开始展览能源的下拉,将远程的能源拉到本地

git pull //将远程的资源拉到本地

7.利用git st命令查看是不是有争辨,假如有争执手动的缓解冲突


8.要是没有冲突,将本地的花色推到远程的git仓库

git ps -u origin master

三. git连接远程仓库,并拓展推送

1.选用如下语句连接远程仓库,添加远程的数据源

git remote add origin git@gitee.com:your-name/your-project.git //如果此时正常会正常链接
//如果提示链接已存在,可以利用下面的命令进行删除
git remote rm origin

2.将本地的数目推送到长途仓库

git ps -u origin master //注意如果是首次进行远程推送,要注意加上参数-u

3.此时线上恐怕会报错,提醒争辩可能是不可以举办科学的推送;大家方今的做法是将长途的数据拉下来。

git pull //利用git pull将远程的数据拉下来

4.那时还会唤醒错误,错误如下所示:
图片 2

$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:michaelliao/learngit
   fc38031..291bea8  dev        -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream dev origin/<branch>


5.面世此错误的来由是从未有过点名地点dev分支与远程origin/dev分支的链接,所以,大家要用如下语句实行地面分支与远程分支的链接。

git branch --set-upstream master origin/master

6.赤手空拳连接后,再开始展览能源的下拉,将远程的能源拉到本地

git pull //将远程的资源拉到本地

7.利用git st一声令下查看是不是有争辩,假如有顶牛手动的消除争执


8.要是没有冲突,将本地的类型推到远程的git仓库

git ps -u origin master

四. git分支的创立与统一

1.创建git分支

git checkout -b branch-name //创建分支的命令

2.查看本地分支

git branch

3.翻看远程分支

git branch -r

4.联合分支

git merge branch-name //git merge命令用于合并指定分支到当前分支

5.剔除分支

git branch -d branch-name //branch-name代表要删除分支的名字

四. git分支的创办与统一

1.创建git分支

git checkout -b branch-name //创建分支的命令

2.查看本地分支

git branch

3.翻看远程分支

git branch -r

4.统一分支

git merge branch-name //git merge命令用于合并指定分支到当前分支

5.剔除分支

git branch -d branch-name //branch-name代表要删除分支的名字

五. git文件的修改删除控制

1.查看工作区和版本Curry最新版本的差异

git diff HEAD -- readme.txt

2.只要文件只是在工作区修改了,没有展开git ca或者是git add .或者是git add file-name,那么能够用如下的指令举行理文件件的复原。

git checkout -- file-name  //可以丢弃工作区指定文件的修改
//命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

//一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

//一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

//总之,就是让这个文件回到最近一次git commit或git add时的状态。

3.比方文件放在了暂存区,没有进展git ca -m或者是git ca操作,那么能够用如下的下令进行文件的恢复生机。

用命令git reset HEAD file能够把暂存区的修改撤废掉(unstage),重新放回工作区
git
reset命令既能够回退版本,也足以把暂存区的修改回退到工作区。当大家用HEAD时,表示最新的版本。


4.查看版本历史记录的授命git log,git
log命令呈现从近来到最远的交付日志。

1.一旦嫌输出新闻太多,看得杂乱无章的,能够试行加上–pretty=oneline参数。须要友情提醒的是,你见到的一大串类似3628164…882e1e0的是commit
id(版本号),和SVN不雷同,Git的commit
id不是1,2,3……递增的数字,而是贰个SHA1总计出来的贰个相当大的数字,用十六进制表示,而且你见到的commit
id和本人的早晚不一致等,以你自个儿的为准。为啥commit
id供给用如此第一次全国代表大会串数字代表呢?因为Git是分布式的版本控制系统,前边大家还要研讨四个人在同1个版本Curry干活,假若大家都用1,2,3……作为版本号,那必将就争辨了。每提交多个新本子,实际上Git就会把它们活动串成一条时间线。要是利用可视化学工业具查看Git历史,就足以更明白地来看提交历史的时刻线。
2.Git须求知道当前版本是哪些版本,在Git中,用HEAD表示方今版本,上三个版本正是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
3.现行,我们要把当前版本回退到上一个版本,就足以选用git reset命令:

git reset HEAD^

4.回退到内定的本子,即便最新的老大版本已经看不到了,只要上面包车型大巴命令行窗口还未曾被关掉,你就能够本着往上找啊找啊,找到11分对应版本的commit
id,比如是3628164…,于是就能够钦定回到今后的有些版本:

$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

5.要是窗口已经倒闭了,可以通过git reflog以此命令来查看日志,这一个命令可以查看你的每贰遍命令。

五. git文件的修改删除控制

1.查看工作区和版本Curry最新版本的分化

git diff HEAD -- readme.txt

2.如果文件只是在工作区修改了,没有举办git ca或者是git add .或者是git add file-name,那么能够用如下的指令进行文件的东山再起。

git checkout -- file-name  //可以丢弃工作区指定文件的修改
//命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

//一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

//一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

//总之,就是让这个文件回到最近一次git commit或git add时的状态。

3.要是文件放在了暂存区,没有进展git ca -m或者是git ca操作,那么能够用如下的命令进行文件的过来。

用命令git reset HEAD file能够把暂存区的改动撤销掉(unstage),重新放回工作区
git
reset命令既能够回退版本,也能够把暂存区的改动回退到工作区。当大家用HEAD时,表示最新的版本。


4.查看版本历史记录的吩咐git log,git
log命令彰显从近年来到最远的提交日志。

1.如若嫌输出信息太多,看得一塌糊涂的,能够试行加上–pretty=oneline参数。需求友情提示的是,你看到的一大串类似3628164…882e1e0的是commit
id(版本号),和SVN不平等,Git的commit
id不是1,2,3……递增的数字,而是1个SHA1总结出来的一个相当大的数字,用十六进制表示,而且你看到的commit
id和自个儿的自然不相同,以你协调的为准。为何commit
id要求用那样第一次全国代表大会串数字代表呢?因为Git是分布式的版本控制系统,前边咱们还要商量两人在同一个版本Curry干活,若是我们都用1,2,3……作为版本号,那自然就争辨了。每提交1个新本子,实际上Git就会把它们活动串成一条时间线。假使采用可视化学工业具查看Git历史,就足以更清楚地旁观提交历史的年月线。
2.Git供给精晓当前版本是哪些版本,在Git中,用HEAD表示方今版本,上一个本子正是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
3.现行反革命,大家要把当前版本回退到上1个本子,就足以选择git reset命令:

git reset HEAD^

4.回退到钦点的版本,假设最新的老大版本现已看不到了,只要下边包车型大巴命令行窗口还尚无被关掉,你就能够本着往上找啊找啊,找到13分对应版本的commit
id,比如是3628164…,于是就能够钦定回到未来的某些版本:

$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

5.固然窗口已经倒闭了,可以通过git reflog以此命令来查看日志,那几个命令能够查阅你的每3回命令。

六. 标签的创建和管制

1.查看标签git tag
2.创设标签git tag tag-name
3.私下认可标签是打在最新提交的commit上的。有时候,要是忘了打标签,比如,未来曾经是周天了,但应有在周五打的标签没有打,如何做?方法是找到历史提交的commit
id,然后打上就足以了:

$ git log --pretty=oneline --abbrev-commit
6a5819e merged bug fix 101
cc17032 fix bug 101
7825a50 merge with no-ff
6224937 add merge
59bc1cb conflict fixed
400b400 & simple
75a857c AND simple
fec145a branch test
d17efd8 remove test.txt
...
//比方说要对add merge这次提交打标签,它对应的commit id是6224937,敲入命令:
$ git tag v0.9 6224937

4.在意,标签不是按时间种种列出,而是按字母排序的。能够用git show
查看标签音讯:

$ git show v0.9
commit 622493706ab447b6bb37e4e2a2f276a20fed2ab4
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Thu Aug 22 11:22:08 2013 +0800

    add merge
...

5.还足以创制带有表达的竹签,用-a钦点标签名,-m内定表明文字:

$ git tag -a v0.1 -m "version 0.1 released" 3628164
//用命令git show <tagname>可以看到说明文字:
$ git show v0.1
tag v0.1
Tagger: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 26 07:28:11 2013 +0800

version 0.1 released

commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL
//还可以通过-s用私钥签名一个标签:
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a
//签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错:
gpg: signing failed: secret key not available
error: gpg failed to sign the data
error: unable to sign the tag
//如果报错,请参考GnuPG帮助文档配置Key。
//用命令git show <tagname>可以看到PGP签名信息:
$ git show v0.2
tag v0.2
Tagger: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 26 07:28:33 2013 +0800

signed version 0.2 released
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (Darwin)

iQEcBAABAgAGBQJSGpMhAAoJEPUxHyDAhBpT4QQIAKeHfR3bo...
-----END PGP SIGNATURE-----

commit fec145accd63cdc9ed95a2f557ea0658a2a6537f
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Thu Aug 22 10:37:30 2013 +0800

    branch test
//用PGP签名的标签是不可伪造的,因为可以验证PGP签名。

6.剔除标签

git tag -d tag-name

7.将地点标签推送到长途仓库使用命令git push origin <tagname>
8.3次性推送全体没有推送到长途的地点标签命令git push origin --tags
9.假设标签已经推送到长途,要去除远程标签就麻烦一点,先从地方删除:

git tag -d tag-name
//然后,从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/tag-name

六. 标签的始建和保管

1.翻看标签git tag
2.开立标签git tag tag-name
3.默许标签是打在风靡提交的commit上的。有时候,要是忘了打标签,比如,以往一度是星期二了,但应该在星期六打大巴价签没有打,咋办?方法是找到历史提交的commit
id,然后打上就能够了:

$ git log --pretty=oneline --abbrev-commit
6a5819e merged bug fix 101
cc17032 fix bug 101
7825a50 merge with no-ff
6224937 add merge
59bc1cb conflict fixed
400b400 & simple
75a857c AND simple
fec145a branch test
d17efd8 remove test.txt
...
//比方说要对add merge这次提交打标签,它对应的commit id是6224937,敲入命令:
$ git tag v0.9 6224937

4.注意,标签不是按时间各种列出,而是按字母排序的。能够用git show
查看标签新闻:

$ git show v0.9
commit 622493706ab447b6bb37e4e2a2f276a20fed2ab4
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Thu Aug 22 11:22:08 2013 +0800

    add merge
...

5.还足以成立带有表明的竹签,用-a钦定标签名,-m内定表明文字:

$ git tag -a v0.1 -m "version 0.1 released" 3628164
//用命令git show <tagname>可以看到说明文字:
$ git show v0.1
tag v0.1
Tagger: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 26 07:28:11 2013 +0800

version 0.1 released

commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL
//还可以通过-s用私钥签名一个标签:
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a
//签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错:
gpg: signing failed: secret key not available
error: gpg failed to sign the data
error: unable to sign the tag
//如果报错,请参考GnuPG帮助文档配置Key。
//用命令git show <tagname>可以看到PGP签名信息:
$ git show v0.2
tag v0.2
Tagger: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 26 07:28:33 2013 +0800

signed version 0.2 released
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (Darwin)

iQEcBAABAgAGBQJSGpMhAAoJEPUxHyDAhBpT4QQIAKeHfR3bo...
-----END PGP SIGNATURE-----

commit fec145accd63cdc9ed95a2f557ea0658a2a6537f
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Thu Aug 22 10:37:30 2013 +0800

    branch test
//用PGP签名的标签是不可伪造的,因为可以验证PGP签名。

6.刨除标签

git tag -d tag-name

7.将本地方统一标准签推送到长途仓库使用命令git push origin <tagname>
8.一次性推送全体尚无推送到长途的本土标签命令git push origin --tags
9.假设标签已经推送到长途,要刨除远程标签就麻烦一点,先从当地删除:

git tag -d tag-name
//然后,从远程删除。删除命令也是push,但是格式如下:
git push origin :refs/tags/tag-name

七. 支行政管理理策略

见惯司空,合并分支时,尽管恐怕,Git会用法斯特forward情势,但那种格局下,删除分支后,会甩掉分支消息。假诺要强制禁止使用Fastforward格局,Git就会在merge时生成贰个新的commit,那样,从分支历史上就足以观看分支音讯。下边大家实战一下–no-ff格局的git
merge。
第2,依旧成立并切换dev分支

$ git checkout -b dev
Switched to a new branch 'dev'

修改readme.txt文件,并交由3个新的commit:

$ git add readme.txt 
$ git commit -m "add merge"
[dev 6224937] add merge
 1 file changed, 1 insertion(+)

到现在,大家切换回master:

$ git checkout master
Switched to branch 'master'

准备联合dev分支,请留意–no-ff参数,表示禁止使用法斯特 forward:

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

因为本次联合要创造2个新的commit,所以加上-m参数,把commit描述写进去。合并后,大家用git
log看看分支历史:

$ git log --graph --pretty=oneline --abbrev-commit
*   7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
*   59bc1cb conflict fixed
...

能够看看,不使用法斯特 forward方式,merge后就如那样:
图片 3图片 4

 

七. 隔绝管理策略

一般性,合并分支时,假使只怕,Git会用Fastforward形式,但那种格局下,删除分支后,会丢掉分支新闻。尽管要强制禁止使用Fastforward形式,Git就会在merge时生成一个新的commit,这样,从分支历史上就足以看到分支音讯。下边大家实战一下–no-ff方式的git
merge。
率先,如故创立并切换dev分支

$ git checkout -b dev
Switched to a new branch 'dev'

修改readme.txt文件,并交由2个新的commit:

$ git add readme.txt 
$ git commit -m "add merge"
[dev 6224937] add merge
 1 file changed, 1 insertion(+)

现行,大家切换回master:

$ git checkout master
Switched to branch 'master'

准备合并dev分支,请小心–no-ff参数,表示禁止使用法斯特 forward:

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

因为本次联合要创制三个新的commit,所以加上-m参数,把commit描述写进去。合并后,大家用git
log看看分支历史:

$ git log --graph --pretty=oneline --abbrev-commit
*   7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
*   59bc1cb conflict fixed
...

能够见到,不使用法斯特 forward方式,merge后如同这么:
图片 5图片 6