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.项目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.此时还会提示错误,错误如下所示:

$ 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 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

七. 分支管理策略

通常,合并分支时,如果可能,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后就像这样:

 

posted @ 2018-01-11 17:44  jzhstudio  阅读(212)  评论(1)    收藏  举报