Git学习笔记
Posted 木极子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git学习笔记相关的知识,希望对你有一定的参考价值。
一、环境
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^
九、撤销删除
如果你删除了一个文件,这也算是一种修改,那么有两种可能,一种是你删错了,一种是你删对的,怎么提交版本呢
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
以上是关于Git学习笔记的主要内容,如果未能解决你的问题,请参考以下文章