码迷,mamicode.com
首页 > 其他好文 > 详细

Git 学习笔记(未完)

时间:2015-01-19 20:40:53      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

1.Git介绍

 1 1-1.使用Git进行版本管理
 2   //Git是一个分布式版本管理系统,是为了更好地管理Linux内核开发而创立的;
 3   //Git可以在任何时间点,把文档的状态作为更新记录保存起来;因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异;
 4 
 5 1-2.管理历史记录的数据库
 6   //数据库是记录文件或目录状态的地方,存储着内容修改的历史记录;在数据库的管理下,把文件和目录修改的历史记录放在对应的目录下;
 7 
 8   >.远程数据库和本地数据库
 9     >.远程数据库:配有专门的服务器,为了多人共享而建立的数据库;
10     >.本地数据库:为了方便用户个人使用,在自己的机器上配置的数据库;
11   //若要公开本地内容,需把内容上传到远程数据库;另外,通过远程数据库还可以获取其他人的共享的内容;
12 
13   >.创建数据库
14     >.创建全新的数据库;
15     >.复制远程数据库;
16 
17 1-3.修改记录的提交
18   //执行提交后,数据库中会生成上次提交的状态与当前状态的差异记录(revision);系统会根据修改内容给出没有重复的40位字符来给提交命名;指定这个命名,就可以在数据库中找到对应的提交;
19   //执行提交时,系统会要求输入提交信息,查看提交时要用到;
20   
21 1-4 工作树和索引
22   //工作树:在Git管理下,我们实际操作的目录;
23   //索引:在数据库和工作树之间,为了向数据库提交做准备的区域;
24   //Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库;
25   //凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交;

 2.Git基础 

 1 2-1 安装Git
 2 2-2 Git设定
 3   //Git的设定会被存放在创建在用户本地目录的.gitconfig档案里;
 4   //使用config命令设定用户;
 5   $ git config --global user.name "<用户名>"
 6   $ git config --global user.email "<邮件>"
 7 
 8   //让git显示彩色
 9   $ git config --global color.ui auto
10 
11   //git的名利可以设定别名;"checkout"可省略为"co"来执行;
12   $ git config --global alias.co checkout
13 
14   //在git中含有日文字符的文件名或显示为"\346\226\260..";添加以下设定,让含有日文字符的文件名可以正确显示;
15   $ git config --global core.quotepath off
16 
17 2-3 新建数据库
18   //新建文件夹,在Git中cd进该文件夹;使用init命令;
19   $ mkdir tutorial
20   $ cd tutorial
21   $ git init
22   //Initialized empty Git repository in /Users/...
23 
24 2-4 提交文件
25   //在tutorial文件夹添加文件;
26   //在该文件夹,确认工作树和索引的状态使用status命令
27   $ git status
28 
29   //将文件加入到索引,使用add命令,在<fild>指定加入索引的文件; 用空格分割可以指定多个文件;
30   $ git add <file>..
31 
32   //指定参数 ".",可以把所有的文件加入到索引;
33   $ git add .
34 
35   //执行commit命令提交
36   $ git commit -m ".."
37 
38   //执行log确认数据库的提交记录
39   $ git log

  3.共享数据库

1 3-1 push到远程数据库
2   //为了将本地数据库的修改共享到远程数据库,必须上传本地数据库中存储ude修改记录;
3   //需要执行push命令,使远程数据库的修改记录和本地数据库的修改记录保持同步;
4 
5 3-2 克隆远程数据库
6   //执行clone将复制远程数据库; 克隆后的本地数据库的变更履历也会被复制,可以像原始的数据库一样进行查看记录或其他操作;
7   
8 3-3 从远程数据库pull
9   //执行pull操作就可以把远程数据库的内容更新到本地数据库,并覆盖本地数据库的相关内容;

  4.Git使用 

 1 4-1 创建远程数据库(Coding)
 2   $ mkdir git
 3   $ cd git
 4   $ git init
 5 
 6 4-2 push到远程数据库
 7   //使用remote命令,添加远程数据库;建立远程与本地数据库连接;
 8   $ git remote add origin http://coding.net.guosk/git.git
 9   //在远程数据库里创建了README.md文件,导致与本地版本冲突,需要先pull下来;
10   $ git pull origin master
11   //将本地修改上传到远程数据库
12   $ git push -u origin master
13 
14   //执行推送或拉取,若省略了远程数据库的名称,则默认使用origin为远程数据库的名称;
15 
16 4-3 克隆远程数据库
17   $ git clone https://coding.net/guosk/git.git
18 
19 4-4 从克隆的数据库进行push
20   //从克隆版本进行修改以及push
21   $ cd clone 
22   $ cd git 
23   $ git add -u 
24   $ git commit -m "clone exercise"
25   $ git push
26 
27 4-5 从远程数据库pull
28   //在push之前,先进行pull命令,防止本地数据库覆盖远程数据库文件;
29   $ git pull

  5.整合修改记录

 1 5-1 合并修改记录
 2   //在执行push之前,若其他人进行了推送内容到远程数据库,那么自己的push将被拒绝;
 3   //这种情况下,在读取别人push的变更并进行合并操作之前,自己的朴实都将被拒绝;这是因为如果不进行合并就试图覆盖已有的变更记录的话,其他人的push的变更就会丢失;
 4 
 5 5-2 解决冲突
 6   //执行合并即可自动合并Git修改的部分;但是也存在无法自动合并的情况;
 7   //Git会在发生冲突的地方修改文件的内容;
 8   <<<<<<<
 9   Hello.
10   =======
11   <strong>Hello</strong>
12   >>>>>>>>17c860...
13   //===分割先上方是本地数据库的内容,下方是远程数据库的内容;
14   //此时可手动修改;然后再次add/commit/push解决冲突之后的的文件;

 6.整合修改记录2

 1 6-1 push冲突的状态
 2   //在tutorial1里修改文件并提交
 3   $ git add test.txt
 4   $ git commit -m "添加commit的说明"
 5   $ git push
 6 
 7   //在tutorial2里修改同个文件并提交
 8   $ git add test.txt
 9   $ git commit -m "添加pull说明"
10   $ git push
11   //此时提示:error:failed to push some refs to ...
12   
13 6-2 解决冲突
14   //此时执行pull命令
15   $ git pull origin master
16   //打开test.txt文件,找到冲突;
17   <<<<<<< HEAD
18   pull      //本地内容
19   =======
20   commit    //远程端内容
21   >>>>>>>> 4c0182...
22   //手动修改文件并再次执行add/commit;
23   $ git add test.txt
24   $ git commit -m "merge"
25   $ git push origin master
26   //此时就完成合并修改;

 7.分支

 1 7-1 什么是分支
 2   //分支是为了将修改记录的整体流程分叉保存;分叉后的分支不受其他分支的影响,所以在同一个数据库里可以同时进行多个修改;
 3   
 4   //master分支:在数据库进行最初的提交后,Git会创建一个名为master的分支,因此之后的提交在切换分支之前都会添加到master分支里;
 5 
 6 7-2 分支的运用
 7   //在Git里可以自由地建立分支;
 8   
 9   //Merge分支:为了可以随时发布release而创建的分支,它还能作为Topic分支的源分支使用;保持分支稳定的状态很重要,若要进行更改,通常先创建Topic分支,而针对该分支,可以使用Jenkins之类的CI工具进行自动化编译以及测试;
10   //通常大家将master分支当作Merge分支使用;
11   
12   //Topic分支:为了开发新功能或修复Bug等任务而建立的分支;
13   //Topic分支是从稳定的Merge分支创建的,完成作业后,需把Topic分支合并会Merge分支;
14 
15 7-3 分支的切换
16   //若要切换作业的分支,就要进行checkout操作,进行checkout时,git会从工作树还原向目标分支提交的修改内容;checkout之后的提交记录将被追加到目标分支;
17 
18   //HEAD:指向的是现在使用中的分支的最后一次更新;通常默认指向master分支的最后一次更新;通过移动HEAD,就可以变更使用的分支;
19   //提交时使用~(tilde)和^(caret)就可以指定某个提交的相对位置;最常用的就是相对于HEAD的位置;
20   //HEAD后面加上~(tilde)可以指定HEAD之前的提交记录;
21   //合并分支会有多个根节点,可以用^(caret)来指定使用哪个为根节点;
22 
23   //stash:是临时保存文件修改内容的区域;还未提交的修改内容以及新添加的文件,留在索引区域或工作树的情况下切换到其他分支时,修改内容会从原来的分支移动到目标分支;
24   //如果checkout的目标分支中相同的文件也有修改,checkout会失败;这时要么先提交修改内容,要么用stash暂时保存修改内容后再checkout;
25   //stash可以暂时保存工作树和索引里还没有提交的修改内容,可以事后再取出暂存的修改,应用到原先的分支或其他的分之上;
26 
27 7-4 分支的合并
28   //完成作业后的topic分支,最后要合并回merge分支;
29 
30   //merge:可以合并多个历史记录的流程;
31     //合并时:如果master分支的状态没有被更改过,那么合并很简单;bugfix分支的历史记录包含master分支所有的历史记录,直接合并即可;这样的合并被称为fast-forward(快进)合并;
32     //合并时:master分支在bugfix分支叉出去之后有新的更新,这种情况下,要把master分支的修改内容和bugfix分支的修改内容汇合起来;  因此,合并两个修改会生成一个提交;这时,master分支的HEAD会移动到该提交上;
33 
34   //rebase:rebase bugfix分支到master分支,bugfix分支的历史记录会添加在master分支的后面;
35     //此时提交X和Y有可能会发生冲突,所以需要修改各自提交时发生冲突的部分;
36     //rebase之后,master的HEAD位置不变;因此,要合并master分支和bugfix分支,即是将master的HEAD移动到bugfix的HEAD这里;
37 
38   //merge:保持修改内容的历史记录,但是历史记录会很复杂;
39   //rebase:历史记录简单,在原有提交的基础上将差异内容反映进去;因此,可能导致原本的提交内容无法正常进行;
40 
41 7-5 topic分支和merge分支的运用

 

Git 学习笔记(未完)

标签:

原文地址:http://www.cnblogs.com/yizihan/p/4234473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!