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学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

游戏开发实战Unity从零做一个任务系统,人生如梦,毕业大学生走上人生巅峰(含源码工程 | 链式任务 | 主线支线)

一个开发设想开发一个游戏向时间管理APP

Git分支管理及常见操作

软件测试人员走向人生巅峰之路

软件测试人员走向人生巅峰之路

git命令学习