Git学习笔记(一)

参考资料:《版本控制之道——使用Git》
1)版本库(Repository)是版本控制系统用来存储所有历史数据的地方。
大多数版本控制系统在版本库中存储各个文件的当前状态、历史修改时间、谁做的修改,以及修改的原因。
2)集中式版本控制系统和分布式版本控制系统的区别。
3)工作目录树最初的创建:
 ①用Git相关命令初始化版本库,也就是生成“.git”目录,于是“.git”目录的父目录就成了工作目录树。
 ②克隆(clone)一个已有的版本库,也就连带创建了相应的工作目录树。
 克隆一个已有的版本库,就是创建该版本库的一个拷贝,并把版本库中的主分支(Master Branch)的内容检出(Check out)到工作目录树。
 在Git中,检出就是指把工作目录树更新,使其内容与版本库中某个特定的历史版本相同。
4)使用版本控制系统是为了记录和追踪对文件的修改和变更。在修改了文件内容后,须要进行单元测试以保证这次修改不会有任何负面影响,然后提交这些改动。
5)每次提交操作都使得版本库中新增一个版本(Revision)。
6)使用像Git这样的分布式版本控制系统时,除了把改动提交到本地版本库之外,还要通过某种方法将改动共享,以便其他程序员能够看到。为此,需要把改动推入(Push)上游版本库(upstream repository)。
7)上游版本库是一个公共版本库。一般来说,程序员都把自己的改动推入到这里。
8)同步远程版本库:
  ①把改动取来(Fetch),把远程版本库中的版本和分支复制到本地版本库中。
  ②在本地版本库中,把从远程版本库里取来的改动与自己本地的改动合并(Merge)。
  一般说来,取来操作和合并操作总是先后执行的。因此,在Git中可以用一个命令来完成这两步操作:拖入(Pull)。
  由于Git是完全分布式的,他可以把本地版本库中所做的改动推入到不知一个远程版本库中,也可以把不止一个远程版本库中的改动拖入到本地版本库中。
9)开发中的分枝:
 主分支(Master Branch)是研发的主线。一些版本控制工具也把主分支称作主干(trunk)。
 分支可以长期存在,也可以仅存在数个小时。分支可以合并到别的分支,但并非所有的分支都必须合并。
 分支也可以在本地创建,并留作私用。创建本地分支并留作私用是有意义的。
 合并操作把两条或两条以上的分支合并到一起。
10)在Git中,版本库(.git目录)是与工作目录树并排放到同一个目录中的。
11)创建版本库:
 >mkdir mysite
 >cd mysite
 >git init
 Git中创建一个版本库是很简单的。命令git init会创建一个.git目录。这个目录用来存放版本库的全部元数据。mysite目录作为工作目录树,存放从版本库中检出的代码。
12)添加代码:
 >git add index.html
 >git commit -m "add in hello world HTML"

 git commit命令创建一个提交记录。提交记录是存储在版本中历史记录,每提交一次创建一个记录,并标记出代码的演进。Git把提交者的姓名和邮件地址,以及提交留言,都添加到提交记录中。
 commit后面的数字是提交名称,利用了SHA-1算法。
 Git使用版本库中元数据产生提交名称。这些元数据包括提交者的个人信息及提交的时间戳。这些数据产生的哈希码,使不同的提交几乎不可能具有相同的提交名称。
 40位的哈希码很难记忆。大多数情况下7,8位的哈希码就可以基本保证提交名称具有唯一性。事实上,Git自己主要也是使用缩写形式。
13)修改代码:
 >git status
 该命令会显示工作目录树的状态,即当前的示图状态。
 stage :暂存修改
 修改过的文件在Changs not staged for commit下列出来,如果要提交,须要暂存(stage)修改。
 暂存修改,以准备把修改提交到版本库。Git中有三个地方可以存放代码。
  ①工作目录树,编辑文件时可以直接在这里操作;
  ②索引(index),也就是暂存区(staging area)。暂存区是工作目录树和版本库之间的缓冲区。
  ③版本库。暂存区中存放的是准备提交到版本库中修改。
14)理解并使用分支:
在实际应用中,需要根据具体情况来确定。有两种分支比较有用:
①用来支持项目的不同发布版本的分支;
②用来支持一个特定功能的开发的分支(常被称为“Topic Branch”)。
   >git branch RB_1.0 master   该命令从主分支(Master Branch)上创建一个叫RB_1.0的分支。主分支是Git的默认分支。
   git branch命令需要两个参数:新分支名称和父分支名称。新创建的分支基于已经存在的父分支。
15)切换分支:
 >git checkout RB_1.0
 体会:工作区就是一种视图,需要从版本库(.git文件夹)中检出。
 若要查看自己处于哪个分支内,则利用>git status 命令即可
16)发布版本:
 给Git中的代码打标签,意味着在版本库历史中(用人类可以理解的名称而非SHA号)标记出特定的点,这样将来就容易找到相应版本的代码。
 >git tag 1.0 RB_1.0
 两个参数意思:标签的名称和希望打标签的点,他们分别为1.0和RB_1.0分支的末梢(所对应的版本,或者说已经提交的版本)。
 >git tag
 不带参数的命令可以查看版本库中标签列表。
17)合并分支:
 >git checkout master  切换到master分支
 >git rebase RB_1.0   变基,把RB_1.0分支上做的修改合并到主分支上。变基就是把一条分支上的修改在另一条分支的末梢上重现。
 >git branch -d RB_1.0  删除发布的分支RB_1.0。刚才打过的标签仍然在。这时的删除分支只是删除了分支的名字,并不会删除分支上的任何实际内容。
18)变基的意思是“改变分支的基底”。不同的版本控制工具,其实现方法不尽相同。假定有分支A和分支B,他们的分叉点是版本Y。Git的实现方法是,如果站在分支B上告诉Git“我要变基到A的末梢”,那么Git会把从版本Y到分支B的当前末梢之间的所有提交,顺序加到分支A的末梢上去,生成新的分支B极其末梢,而分支A及其末梢没有任何变化。
19)创建发布分支:
 >git branch RB_1.0.1 1.0
 >git checkout RB_1.0.1

 快速查看历史记录
 >git log --pretty=oneline
20)克隆远程版本库
 前面都是与本地版本库mysite打交道的命令,Git也可以和远程版本库打交道以分享本地的工作成果,或者复制其他的版本库到本地。
 >cd /work
 >git clone git://github.com/tswicegood/mysite.git mysite-remote
 git clone带有两个参数:远程版本库的位置和存放该版本库的本地目录。第二个参数是可选的
21)暂存区:它给用户在提交版本库到之前精心选择提交内容的机会。明确指定,那些变更要提交,那些不用。这是通过命令git add来实现的。
22)git add -i 进入交互模式
   git add -p 直接进入补丁模式
23)如果不带-m 参数的git commit命令,Git将启动编辑器来编辑提交留言。为启动编辑器,Git会按照以下顺序查找编辑器的设置:
 ①环境变量GIT_EDITOR的值。
 ②Git的设置core.editor的值。
 ③环境变量VISUAL的值。
 ④环境变量EDITOR的值。
 ⑤如果上述值为空,Git会尝试启动Vi编辑器。
24)三种提交方法:
 提交暂存后的修改、提交工作目录树中的所有修改、提交工作目录树中指定的修改
 ①>git add some-file
   >git commit -m "changes to some-file"
 ②>git commit -m "changes to some-file"  -a
  Git会把工作目录树中当前所有的修改提交到版本库中。此时,该命令只会把已纳入Git版本控制的文件添加到版本库中,而不会添加尚未被跟踪的文件。
 ③>git commit -m "changes to some-file" some-file
 指定要提交的文件或文件列表,具体做法是,把要提交的文件列在其他参数的后面。
25)使用与SVN简称类似的Git别名:
 >git config --global alias.ci "commit"
 用户可以按照自己的方式起别名,只需使用简写别名替换alias.后面的部分即可。
26)查看当前状态:
 git status
 该命令的输出结果是暂存区要提交的内容,工作目录树中未纳入暂存区的改动,以及尚未纳入Git版本控制的新文件。
27)使用git diff,Git可以显示出工作目录树、暂存区及版本库之间的差异,都被当成版本“断面”来相互比较。比如,在提交了暂存的全部改动后,不是暂存区里没有内容了,而是暂存区与版本库中最新版本之间的差异完全没有了。
 ①>git diff  :比较的是工作目录树与暂存区的区别。
 ②>git diff --cached  :比较的是暂存区和版本库的区别。
 ③>git diff HEAD   :比较的是工作目录树(包括暂存和未暂存的修改)与版本库的差别。
28)文件重命名与移动
>git mv index.html hello.html
上面命令告诉Git使用原文件的内容来创建新文件,新文件保留原文件的历史修改记录,并删除原文件。
>git status
>git commit -m "rename to more appropriate name"
29)Git不提供文件复制用的命令,因为它不需要。
30)Git并不跟踪管理文件,而是跟踪文件内容。

 理由:文件名只是附在文件内容上的元数据,以便比较容易地组织文件目录树。Git可以询问文件系统以获得文件名,但Git真正关心的是文件本身的内容。
31)重构是一种通过不断少量调整代码而持续优化代码结构的艺术。
32)忽略文件:
 ①.gitignore   开发者都忽略
 ②.git/info/exclude  个人忽略
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值