Git应用套路lovebet爱博体育官网

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.这儿还会提醒错误,错误如下所示:
lovebet爱博体育官网 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.那儿还会提醒错误,错误如下所示:
lovebet爱博体育官网 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.翻看工作区和本子库里最新版本的分别

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,2,3……作为版本号,那自然就顶牛了。每提交一个新本子,实际上Git就会把它们活动串成一条时间线。尽管运用可视化工具查看Git历史,就足以更掌握地观望提交历史的时刻线。
2.Git务必掌握当前版本是哪位版本,在Git中,用HEAD表示近期版本,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
3.现行,我们要把近来版本回退到上一个本子,就足以行使git reset命令:

git reset HEAD^

4.回退到指定的版本,若是最新的充足版本现已看不到了,只要上边的命令行窗口还尚未被关掉,你就可以顺着往上找啊找啊,找到分外对应版本的commit
id,比如是3628164…,于是就足以指定回到将来的某部版本:

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

5.借使窗口已经关门了,可以因此git reflog其一命令来查看日志,这一个命令可以查阅你的每五回命令。

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

1.查看工作区和本子库里最新版本的界别

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,2,3……作为版本号,那必将就争论了。每提交一个新本子,实际上Git就会把它们活动串成一条时间线。假设应用可视化工具查看Git历史,就足以更清楚地看出提交历史的小时线。
2.Git必要知道当前版本是哪个版本,在Git中,用HEAD表示方今版本,上一个本子就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。
3.现行,大家要把当下版本回退到上一个本子,就足以采取git reset命令:

git reset HEAD^

4.回退到指定的版本,如若最新的老大版本已经看不到了,只要下面的命令行窗口还未曾被关掉,你就可以本着往上找啊找啊,找到万分对应版本的commit
id,比如是3628164…,于是就可以指定回到未来的某个版本:

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

5.如果窗口已经关闭了,可以通过git reflog以此命令来查阅日志,那一个命令可以查看你的每一次命令。

六. 标签的开创和管制

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

六. 标签的创导和保管

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。
先是,如故创设并切换dev分支

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

修改readme.txt文件,并交给一个新的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后就像是那样:
lovebet爱博体育官网 3lovebet爱博体育官网 4

 

七. 隔开管理策略

日常,合并分支时,若是可能,Git会用Fastforward方式,但那种情势下,删除分支后,会废弃分支新闻。借使要强制禁用法斯特forward情势,Git就会在merge时生成一个新的commit,那样,从分支历史上就能够见见分支音信。上面我们实战一下–no-ff形式的git
merge。
率先,仍旧创立并切换dev分支

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

修改readme.txt文件,并提交一个新的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参数,表示禁用Fast 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后就好像那样:
lovebet爱博体育官网 5lovebet爱博体育官网 6

 

相关文章