Git应用套路。Git应用套路。

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.翻看工作区和本子库里最新版本的分别

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会因此Fast
forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast
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
...

得看到,不动Fast forward模式,merge后即便比如这么:
图片 3图片 4

 

七. 支行管理策略

便,合并分支时,如果可能,Git会为此Fast
forward模式,但这种模式下,删除分支后,会弃分支信息。如果只要强制禁用Fast
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
...

好望,不采用Fast forward模式,merge后哪怕比如这样:
图片 5图片 6

 

相关文章