git框架图.png

Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库

设置标识符,让别人知道你是谁:

git config --global user.name "tianshuaikang"

git config --global user.email tianshuaikang@ifengyu.com

创建版本库:
在文件夹下创建一个暂存区

git init

文件夹下会多出来一个.git目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。
文件添加、文件版本更新:
添加文件:在当前文件夹下添加一个txt文件,文件内容为 “this is the first line”
使用add命令添加到暂存区:git add testgit.txt
使用commit命令将文件提交到仓库:git commit -m "first commit"
查看是否有文件未提交:git status,这时提示没有文件未被提交,修改testgit.txt文件,增加一行数据“this is the second line”再次使用git status命令查看会显示文件已经被修改
使用命令查看文件何处被修改:git diff testgit.txt,显示增加了一行文件。

重新add并且commit后,继续查看一下状态发现没有可提交的文件

版本回退:
在txt文件中新增一行 “this is the third line”,并且重新add commit,查看历史记录使用git log命令,可以查看出来历史数据,谁提交了?提交日志是什么

回退到上一个版本命令:git reset --hard HEAD^如果想回退到上上个版本使用git reset --hard HEAD^^ 回退到前100个版本git reset --hard HEAD~100

回退之后查看txt文档,已经被替换到上个版本了,使用log指令查看发现目前只有两个版本了
但是使用git reflog可以看到回退过程的步骤,其中我们可以看到新增了第三行的版本号为994eac9,使用git reset --hard 994eac9,现在又重新回退到新增了第三行的版本了。

工作区与暂存区的区别:
工作区:就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
我们前面说过使用Git提交文件到版本库有两步:
第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。

继续修改testgit.txt,增加第四行“this is the fourth line”,并且新建一个testgit_2.txt的文件,使用git status可以查看文件夹内被修改的地方,使用git commit -m "commit 2 files"一次提交两个文件到分支上去。

Git撤销修改和删除文件操作:
一:撤销修改
比如在testgit.txt文件末尾添加一行内容为“this is the fifth line”,未提交前,发现添加的文件有误,需要恢复到以前的版本,目前有两种方法修改:
1、如果我知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后add添加到暂存区,最后commit掉。
2、我可以按以前的方法直接恢复到上一个版本。使用 git reset --hard HEAD^
但是还会有第三种办法使用撤销命令,在撤销之前先用git status查看当前的状态,会提示当前文件被修改了,使用git restore –file可以丢弃到工作区的修改,使用这个命令后发现文件被回退了。
使用restore的意思就是,把这个文件在工作区的修改全部撤销,存在两种情况:
1、testgit.txt被修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。
2、另外一种是testgit.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。
对于第二种情况再做一次实验,先add到暂存区,再添加一行数据,再通过撤销命令让其回到add之后的状态。
二:删除文件
新增一个a.txt文件并且提交,使用rm a.txt 删除文件,一种情况下通过commit直接提交,在版本库中删除文件,另一种情况下在版本库中恢复被删除的文件:git restore a.txt

远程仓库:
注册github,新建一个空白工程(不要用readme.md初始化,不然在后期push出现问题,发生冲突),其中还要新建sshkey等,需要自行解决,使用git remote add origin http://192.168.10.146:30000/tianshuaikang/first-gitdemo
与远程仓库产生关联,使用git push将当前分支推送到远程,第一次推送需要加上-u参数:git push -u origin master,第一次需要输入github的账号密码,以后直接git push就可以提交,也可以用git push origin master固定提交分支。

从远程仓库克隆:

git clone http://fengyupublic.synology.me:30000/tianshuaikang/second-gitdemo.git

创建与合并分支:
在版本回退中,可以知道每次提交Git都把他们串成一条线,这个线就是分支,截止到现在只有一条时间线在git里面,这个分支叫做主分支,master分支,HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
我们尝试创建dev分支,然后切换到dev分支上,git checkout -b dev(-b指令相当于创建并切换)相当于git branch dev and git checkout dev
然后可以通过git branch查看分支,会列出所有的分支,并且在当前分支下添加一个星号。
我们在dev分支下做点什么,在dev分支下添加a.txt文件内容“I love life”,add并且commit之后切换到master分支,发现master中的a.txt是添加文本前的状态。使用git merge dev 将dev分支合并到master分支上。合并之后再查看a.txt文件,可以看到master分支与最新的dev分支是一样的了。合并完成后就可以删除dev分支了。git branch -d dev
总结创建与合并分支命令如下:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout –b name
合并某分支到当前分支:git merge name
删除分支:git branch –d name

遇见冲突如何处理:
两个分支上分别修改同一个文件,在合并时会发生冲突,在文件中可以查看发生冲突的部分,修改成和主分支一样的内容
分支管理策略:
通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。
分支策略:
首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

多人协作:
当你从远程库克隆时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。
要查看远程库的信息 使用 git remote
要查看远程库的详细信息 使用 git remote –v

git push origin master将本地的代码推送到远程去(前提是必须先add与commit)
也可以推送别的分支。

那么一般情况下,那些分支要推送呢?
master分支是主分支,因此要时刻与远程同步。
一些修复bug分支不需要推送到远程去,可以先合并到主分支上,然后把主分支master推送到远程去。