Git学习笔记
2016-12-19 10:21
169 查看
一、环境
window平台二、开发软件
git for windows(百度下就可以找到)地址:https://git-for-windows.github.io/
三、安装和配置
首先下载git for window软件,然后安装,默认下一步下一步就好接着打开git bash,输入:
$ git config --global user.name = "you name" $ git config --global user.email = "you email"
这期间不会有什么消息,不过这也是好消息
四、创建一个库
在git bash中输入一个地址如:$ cd e\ideaProject
可以通过下面代码查路
$ pwd
创建一个项目文件夹:
$ mkdir waitone
创建一库:
$ git init
五、创建一个文件、入库
创建一个文件如:zxm.txt,内容如下:Git is a version control system. Git is free software.
把这个文件放入仓库:
$ git add zxm.txt $ git commit -m "add a txt file"
修改zxm.txt文件:
Git is a version control system. Git is free software.
this is a new line.
接下来,我们查看下状态:
$ git status
结果如下:
$ git status On branch master 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: zxm.txt no changes added to commit (use "git add" and/or "git cmit -a")
接下去,我们看看git告诉我们哪些变化:
$ git diff
结果如下:
diff --git a/zxm.txt b/zxm.txt index d8036c1..4b8c71d 100644 --- a/zxm.txt +++ b/zxm.txt @@ -1,2 +1,3 @@ Git is a version control system. -Git is free software. \ No newline at end of file +Git is free software. +this is a new line. \ No newline at end of file
我们需要重新添加这个文件:
$ git add zxm.txt $ git commit -m "add a new line"
六、查看日志(版本)
用下面的代码,查看日志:$ git log commit 0d258f99346ffae79d7055042a3832db79acc069 Author: zxm <1120850353@qq.com> Date: Mon Dec 19 10:44:10 2016 +0800 add a new line commit e36095129c63c2aee5dfd1e52967b6ddcf53a5e1 Author: zxm <1120850353@qq.com> Date: Mon Dec 19 10:01:27 2016 +0800 write a radom file
可以看见两个日志
或者:
$ git reflog 0d258f9 HEAD@{0}: commit: add a new line e360951 HEAD@{1}: commit (initial): write a radom file
七、回滚和前进
可以用下面的代码进行回滚,但是如果要回滚10个版本可以这么写HEAD~10,一个版本为:HEAD^,两个版本为:HEAD^^$ git reset --hard HEAD^
好了,已经回到当时的年代了
如果后悔了怎么办?看见上面的log了吗?前面都有一个id,如:0d258f9 HEAD@{0}: commit: add a new line
,这个0d258f9就是一个id
那好,可以通过这个id返回。
$ git reset --hard 0d258f9
这样我们就又回来了
八、撤销修改
之前我们做过这样的一件事情,就是add和commit,为什么需要这两部呢,git在管理版本的时候有一个重要的概念,就是又这两样东西:版本库和暂存区。当进行add的时候,会从工作区进入暂存区域,当进行commit的时候会从暂存区进入版本区。源文件(zxm.txt):
Git is a version control system. Git is free software.
this is a new line.
1、如果一个文件还在工作区,没有进行add
现在如果我一不小心更改了这个文件,如下:
Git is a version control system. Git is free software.
this is a new line.
hjhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
可是我不想要了,我想改回之前的样子,可是我又不知道之前是什么样子怎么办呢?
$ git checkout -- zxm.txt
就可以回滚了
2、如果一个文件已经在暂存区了呢,也就是进行了add还没有commit
可以用下面的语句进行回滚
$ git reset HEAD zxm.txt $ git checkout -- zxm.txt
注意:这里有两个语句,第一个语句是回到工作区,第二语句是回到版本的状态
3、如果一个文件已经进行了commit
只能用之前的方法进行
$ git reset --hard HEAD^
九、撤销删除
如果你删除了一个文件e651
,这也算是一种修改,那么有两种可能,一种是你删错了,一种是你删对的,怎么提交版本呢
1、你删错了
这个简单,还没提交,那就回到版本状态就好
$ git checkout -- test.txt
2、你删除对的,那就需要提交
$ git rm test.txt $ git commit -m "remove file test.txt"
十、分支
创建一条分支:$ git branch dev
指向这条分支
$ git checkout dev
上面这两天可以一起写:
$ git checkout -b dev
合并分支:
$ git merge dev
删除分支
$ git branch -d dev
十一、分支冲突
有一个文件zxm.txt,源文件如下:Git is a version control system. Git is free software.
this is a new line.
this is a dev content
创建一个分支dev
$ git checkout -b dev
修改源文件:
Git is a version control system. Git is free software.
this is a new line.
《this is dev add》
this is a dev content
提交分支!
$ git add zxm.txt $ git commit -m "dev add"
切换到主线:
$ git checkout master
修改源文件:
Git is a version control system. Git is free software.
this is a new line.
《this is master add》
this is a dev content
提交!
$ git add zxm.txt $ git commit -m "master add"
好了,现在相当于两个支线同时修改了同一个地方,那么在合并的时候就会产生冲突。
进行强行合并,结果如下:
Git is a version control system. Git is free software.
this is a new line.
<<<<<<< HEAD
《this is master add》
=======
《this is dev add》
>>>>>>> dev
this is a dev content
我们需要删除一行,然后重新提交。
$ git add zxm.txt $ git commit -m "new Add"
我们可以看下日志
$ git log --graph --pretty=oneline --abbrev-commit * 94dc380 new Add |\ | * c7550be dev add * | 9a9cd57 master add |/ * 56da5ad D * 58ee8d6 remove test.txt * 8d5c934 add a new file * 0d258f9 add a new line * e360951 write a radom file
这样就可以解决分支冲突,但是,如果要保留两个分支,可以用下面的代码进行合并
$ git merge --no-ff -m "merge with no-ff" dev
十二、临时存储(bug分支)
有时候在做一个功能的时候,但是这个功能没有做完,可是之前写的代码中出现了一个bug,那么我们需要先去解决这个bug,在现在工作的分支上(dev)不能提交啊,因为还没有做好,那怎么办呢?能不能线把她存起来?可以的$ git stash
然后我们切换到master这个主支上->分出一个分支bug->修改bug->提交分支->合并分支->切换到dev分支。
那么接着我们要把自己存过的取出来。
我们先用下面的语句查一下看,看看有没有
$ git stash list
接着我们需要取出来,并且删除这个存储。
$ git stash apply $ git stash drop
上面的两个语句可以写成一个:
$ git stash pop
十三、标签
标签是什么,可以这么理,它就像一个便利贴,可以为你的一些东西做一些标记,比如版本的标记。怎么创建标签呢?
$ git tag v1.0
上面就是简单的标签创建,如果需要添加历史标签,可以在这后面加上id,什么id?
$ git log --pretty=oneline --abbrev-commit
用这个代码你就可以获取到一个日志,日志的开头那串数字就是id,比如6a5819e,那么在打标签的时候要这么添加。
$ git tag v0.9 6a5819e
查询自己写的标签也很简单。
$ git tag
如果要显示某个版本信息,可以用下面的命令
$ git show v1.0
如果要为标签指定一些信息,可以这么写
$ git tag -a v2.0 -m "this is tag message"
如果要使用PGP签名标签
$ git tag -s v3.0 -m "xxxxxxxxxxxxx"
如果删除自己写的标签
$ git tag -d v1.0
如果要删除远程上的标签呢
$ git push origin :refs/tags/v2.0
在多人协作的的时候会用到推送。标签也可以进行推送。
$ git push origin v1.0
如果要推送全部标签呢
$ git push origin --tags
十四、搭建git服务器
方案一(COPSSH+GIT ):复杂度比较高,而且管理难度比较大,所以我没有采用。可以参考:http://blog.csdn.net/code_style/article/details/38764203
方案二(gitblit):Gitblit 是一个纯 Java 库用来管理、查看和处理 Git 资料库.相当于 Git 的 Java 管理工具.git的管家。
参考:http://www.cnblogs.com/android-joker/p/4513125.html
自己学习,做个总结,详细请参考http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000