Git 学习总结

一 git简介

1. 概念

git 是一种分布式版本管理工具。

git 支持的平台:

支持的平台

2. git与svn的区别


(1)git是分布式的,而SVN是集中式的。Git是没有中心服务器的,每个人机器上都是一个完整的库,我们平时开发代码时的中央服务器其实和我们自己机器上的库内容是完全一样的。

svn与分布式的区别

(2)git把内容按元数据方式存储,而svn是按文件:因为git目录是处于个人git目录是处于个人机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。​

(3)GIT分支和SVN的分支不同:svn会发生分支遗漏的情况,而git可以同一个工作目录下快速的在几个分支间切换,很容易发现未被合并的分支,简单而快捷的合并这些文件。

(4)GIT没有一个全局的版本号,而SVN有

(5)GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

参考链接:https://jingyan.baidu.com/article/676629976401a154d51b8430.html

svn工作流程

二 git的下载和安装

1. 下载地址

https://git-scm.com/downloads(注意下载的版本的位数与自己电脑一样)

举例:win7 64bit,下载的git版本

2. 安装

双击.exe安装程序,按默认选项完成安装。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!此时右击鼠标,发现多了几个选项,如图所示。

Git Bash 打开命令窗

注意运行git bash的方式,

(1)直接在桌面右击鼠标选择git bash,使用cd命令切换至仓库所在位置。(也可更改git bash的默认路径)

cd命令切换当前位置

(2)先在本地磁盘上建好仓库,在仓库所在的位置右击鼠标,执行操作即可。

三 git的基本使用

1.创建版本库

(1)初始化一个仓库:git init

初始化仓库

完成这个步骤后,会在本地仓库中生成一个.git文件夹。(注意:若未看到.git,可使用ls -a命令查看隐藏文件,或设置windows显示隐藏文件及文件夹)

(2)添加文件到git仓库,分两步:先git add,后git commit。

添加文件到仓库

(2-1)可能遇到的问题:在commit文件时需要验证个人信息,出现如下图的提示消息:please tell me who you are. 这时需要我们按照提示运行命令,完成用户名和邮箱的配置,之后就可以正常commit文件了。

配置用户名和邮箱

(2-2)注意事项:

  a.使用git add 命令需要指明具体add哪个文件,git add .代表将仓库中所有待添加的文件都添加进来。

git add

  b.无论新增还是修改文件,想要将提交文件到本地仓库都需要add和commit两个步骤;

修改文件后,直接使用commit,而不使用add出现的提示消失

   c.  commit-m中的m(message)是本次提交的说明;


2.文件状态变化

文件状态变化总体过程

下面就用具体的示例来模拟这些状态的变化。

1、首先在本地仓库所在文件夹新建一个文件(如:git_file.txt)。

在仓库文件夹中建一个文件

2、使用git status查看仓库当前状态

表示仓库当前有待添加的文件

3、按照提示信息添加文件git_file.txt,并查询状态

文件将被commit,并可以使用提示命令将已提交的文件恢复至添加前的状态
用“+”表示文件处于staged状态,等待被commit

4、commit文件,并查询状态

nothing  to commit

对应为文件标识为:

用'对勾'表示文件状态为commited,已经被提交

4、修改文件git_file.txt,并查看文件状态。

修改文件git_file.txt
“叹号”表示文件有改动
文件git_file.txt目前的状态为modified

5、使用git diff 查看具体的修改内容。

“+”代表增加的内容

6、再次修改文件并查询具体修改内容。

再次修改文件(删除原有内容,并新增两行)
git diff

7查看日志git log(注意:信息量大时,可以使用git log --pretty=oneline 来简化输出。)

git log 命令显示从最近到最远的提交日志

说明:

(1)git log 清晰地展示了提交的版本号(commit id)、描述信息(description)、提交者(Author)及提交时间(Date,精确到秒s)。

(2)HEAD -> master表名当前所处的分支为master

(3)你看到的commit后面跟着个一大串是commit id(版本号),它是使用SHA-1计算出来的用十六进制表示的数。

3.git版本回退与‘前进’

可以回退到上一个版本的前置条件,就是你还没有把自己的本地版本库推送到远程!!!

(1)版本回退

结合上小节git log中的图对比着看。

版本回退

在Git中,用HEAD表示当前版本,也就是最新的提交64c44c4(它是截取了commit id的前七位),上一个版本就是HEAD^,上上一个版本就是HEAD^^。(感觉版本回退就是指针位置的变动)

说明:目前我们的git_file.txt共有两个版本,第一个为空文件。当我们使用reset命令回退至第一个版本时,查看仓库中文件git_file.txt中的内容也变为第一版的了。此时我们继续回退版本,就会发现文件git_file在仓库中消失了。(虽然文件git_file只有两个版本,但是这个关注的是仓库的版本哦!)

(2)版本‘前进’

git relog(relog,即reference logs)
‘前进’到指定版本
此时文件的状态

注意查看此时的仓库状态为 文件git_file为unstaged状态,而不是staged。(不理解???是不是这时提交的话,就不用先git add了,直接git commit 就是ok 了?)

查看仓库状态
commit checkout下来的版本

4、撤销修改与删除文件

(1)撤销修改的命令 git checkout  --  <filename>,适用于以下两种情况:

a.自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

b.已经添加到暂存区后,而且又作了修改,现在,撤销修改就回到添加到暂存区后的状态
说明:使用时注意:--前后都需要加空格。

(2)删除文件

删除方式:在文件管理器中直接删了,或者使用git rm 命令(rm即emove)

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

版本回退、撤销修改 都要注意应用场景小结:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。:

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

四. git工作流程


git工作图

Workspace :即work directory /working tree,工作目录

Index/Stage:暂存区(Staging area)

Repository:本地仓库

Remote:远程仓库

五.使用git将项目上传到github

1.进入Github首页,点击New repository新建一个项目

New repository

2.填写相应信息后点击create即可

Create repository

3.点击Clone or dowload会出现一个地址,copy这个地址备用

4.接下来就到本地操作了,首先右键你的项目,选择Git Bash Here进入如下界面,在本地创建ssh key。(错误示例)

$ ssh-keygen -t rsa -C"your_email@youremail.com

错误示例:直接点回车,说明会在默认文件id_rsa上生成ssh key。但并没有出现预期的效果。
错误示例-续:这次在保存文件名改为id_rsa

新生成的公钥和密钥文件如图所示:

生成公钥和私钥
将id_rsa.pub内容复制到此处,用于生成新的ssh key
使用$ ssh -T git@github.com验证是否能够成功连接github。(按照这个方法做了,但就是不能成功连接github,不知道是什么原因。)

4.接下来就到本地操作了,首先右键你的项目,选择Git Bash Here,进入如下界面。(正确示例)

正确示例,为什么会有这个默认保存位置?
密钥和公钥
验证结果表明已成功连接github

5.接下来就要把github上面的仓库克隆到本地 .完成后你的本地项目文件夹下面就会多出个名为‘你github上面的项目名’的文件夹,如图我多出了个git_work_2文件夹,我们把本地项目文件夹下的所有文件(除了新多出的那个文件夹不用),其余都复制到那个新多出的文件夹下,接着继续输入命令 cd git_work_2,进入该文件夹

将需要上传的文件复制到repository下,然后add,commit

8.接下来依次输入以下代码即可完成其他剩余操作:

commit

9.上传成功后,如下图所示。

git push命令会将本地仓库推送到远程服务器
显示提交进度

方法

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

六、分支管理

1、分支简介

1-1 分支分类及常用分支

git branch

主分支master和开发分支develop

1-2 git是保存数据的方式

有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称"快照")的指针,因此非常快捷易用。

在进行提交操作时,Git 会保存一个提交对象(commit object)。该提交对象会包含一个指向暂存内容快照的指针。还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象。

2、案例说明

2-1.案例准备:新建一个版本库,并创建一个开发分支。

参考网址:http://blog.codingplayboy.com/2017/04/06/git_branch/

上图可见,第一行显示了当前项目所有分支,HEAD -> develop-1表明当前所处分支为develop-1。


推荐参考网址:

git 分支管理 http://blog.codingplayboy.com/2017/04/06/git_branch/

官方文档 https://git-scm.com/docs

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,676评论 1 17
  • Git for windows 本文只是自己的一些学习总结,方便自己查看,如果对您阅读不适,抱歉!!! 常用命令(...
    Lxs_597阅读 329评论 0 0
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,631评论 9 163
  • 那个靠窗子的位置 有阳光,但有些冷 我坐在 曾经一起学习过得书桌前 歪着头,握着笔,没有纸 看你侧脸学习 拿起不在...
    四海WX阅读 138评论 0 0
  • 标榜沉默是金的时代过去了,信息量庞大的现代社会,沟通过程中,很少有谁会细细倾听你所说的,更不会花过多心思去想你心里...
    洛神的花园阅读 2,330评论 9 12