Git入门
一.Git介绍
Git的创造者是Linus,它同时也创造了开源操作系统Linux。
版本控制系统能记录所有文件的所有版本,可以有效的追踪文件的变化,同时很容易回到之前的状态。
为什么学习Git?
a.牛逼的互联网,牛逼的大神们都在用
b.完整的版本控制功能,解决多人协作的问题
c.提高开发效率
d.如果你是程序员,请务必学习Git,并习惯把自已的代码同步到github上
e.Git不等于github,git和github就是球和球场的关系!
二.Git安装
1.下载Window git
Msysgit:https://git-scm.com/download/win,打开这个网站它会根据我们目前的操作系统及版本信息自动下载64位或32位的安装包,我这里是64位的,下载的是Git-2.21.0-64-bit.exe
基本都是点“下一步”、“下一步”安装结束。
2.配置用户信息
因为Git是分布式版本控制系统,每个系统都要报一下自已的家门。
- git config --global user.name "bijian" - git config --global user.email "bijian@126.com"
global是指当前这台机器上的所有用户都使用这个配置,当然也可以根据不同的仓库来配置不同的用户名和邮箱。

3.客户端图形化界面推荐sourcetree
下载官网地址:https://www.sourcetreeapp.com/
我这里下载的是SourceTreeSetup-3.0.17.exe,下载下来后也是一直“下一步”,当然,我这里出现了如下错误。所以在安装前先安装.NET Framework

在https://dotnet.microsoft.com/download/thank-you/net472下载了NDP472-KB4054531-Web.exe并安装,如下所示:

三.Git仓库
1.基本操作命令
a.初始化版本库
git init
b.添加文件到版本库
git add
git commit
c.查看仓库状态
git status
2.Sourcetree创建仓库提交演示
a.选择一个本地的文件夹创建本地仓库

b.创建好后,将在出现如下界面,点击“在文件资源管理器中打开”按钮,新建一个text.txt文件,并简单随便写了一点内容

c.再点击一下工作副本,将会看到如下界面,此时文件还是在我们的工作目录,没有在我们的暂存区里面,选择文件,右键选择”添加“,这个动作是将我们的文件添加到暂存区里面。

d.添加成功后,在已暂存文件区域可以看到被添加到暂存区里的文件,添加到暂存区还不是添加到我们本地仓库,右击选择“提交”,可以输入提交的版本说明,点提交。

e.提交成功后,会默认创建一个master分支,如下所示。

3.Git命令行创建仓库提交演示
点击Sourcetree右上角的“命令行模式”图标

即进入命令行模式

我们回到上一级目录,创建另一个目录

添加版本到版本库

四.Git工作流
1.Sourcetree操作实战
a.如果新的开发任务已开发完成,并已提交到暂存区里了,这时产品经理突然说这个需求其实不用改,这时要把代码从暂存区回滚到工作区,在Sourcetree中右击选择“丢弃”即可,这时工作区里面修改的内容就回滚到修改前了。

b.第二次需求开发,提交成功后,产品经理说这个需求现在不需要了,这时我们要把第二次提交的内容删掉,Sourcetree中进入对应的分支,选择要回滚回去的提交记录,右击选择“重置当前分支到此次提交”

此时,再选择“未提交的更改”,右击暂存区里的文件,选择“丢弃”。

成功后,第二次提交的修改就回退掉了。

c.此时如果产品说test03整个需求都不用做了,此时,可以在工作区把test03.txt文件删除。这时进入Sourcetree中可以看到test03.txt前面有个删除标识

右击选择“添加”,将其从工作区放到暂存区。

这时选择暂存区的文件,右击选择“提交”成功后,就提交到本地仓库中了。
2.bash操作实战
a.正常开发提交

b.如果新的开发任务已开发完成,并已提交到暂存区里了,这时产品经理突然说这个需求其实不用改,这时要把代码从暂存区回滚到工作区

c.第二次需求开发,提交成功后,产品经理说这个需求现在不需要了,这时我们要把第二次提交的内容删掉

d.此时如果产品说整个需求都不用做了,此时,可以在工作区把对应的文件删除

3.Git工作流

在版本库中标识为index的是我们说的暂存区,标识为master的是我们master分支所对应的文件目录树,我们一个文件提交到版本库里面,是存我们这边的objects目录树里面的,不管是存在暂存区还是master(暂存区和master只是一个指针的概念),objects可以简单理解为数据库的概念。
提交存好后,我们可以看到HEAD这个东西,HEAD是当前仓库的指针,当进行了commit操作后,HEAD指向了我们的master分支。
当执行提交操作时,是通过git add将工作区里面的目录、文件的修改提交到我们的暂存区里面,同时暂存区里的文件、目录会被修改,这个文件会被提交到objects,这个文件修改的ID会被index通过指针进行引用,git add执行完后,通常会有一个git commit动作,它是发生在暂存区到最终的本地仓库(也就是我们的分支目录树里面),当我们修改的时候,master分支会做相应的更新,其实就是将master分支的指针改变指向我们暂存区里面的目录或者文件。
git reset HEAD是将暂存区里面的目录重写,也就是我本地工作区有所更新了,当执行git reset HEAD命令后,其实就是将最终的那次提交影响到我们的暂存区里面(工作区里面的文件是不做修改的)。git checkout命令,如果工作区里面有修改,但未做提交,执行git checkout命令后,我们本地仓库就干静了。rm --cached会直接从暂存区里面直接删除文件,也就是说暂存区里没有文件了,但是工作区还是有的,工作区里面要删的话,删除之后再进行commit,commit到我们的master和暂存区里面。checkout HEAD会用HEAD指向的分支里面的文件替换暂存区和工作区(这个动作是很危险的)
五.本地与远程仓库
如果你想通过Git分享你的代码或者和其它开发人员合作,就需要将数据放到一台其他开发人员也能连接的服务器上,下面主要介绍github。
1.创建SSH key
因为本地的Git库和github之间传输是通过ssh加密传输的,所以需要创建一个ssh key。
ssh-keygen -t rsa -C "yourmail@example.com"
需要注意的是这个邮箱需要是你在github上注册的邮箱。

2.打开github官网,点击右上角用户的图标,选择Settings

在新出来的页面中点击“SSH and GPG keys”

然后点击右边的"New SSH key"

点击“Add SSH key"添加成功。然后在本地的git命令行窗口输入如下命令验证远程github和我本地是否连通。
ssh -T git@github.com

3.添加远程仓库
git remote add origin git@github.com:bijian1013/git_study.git git pull origin master --allow-unrelated-histories git push -u origin master
git remote add origin git@github.com:bijian1013/git_study.git:把本地仓库和远程仓库关联起来
git pull origin master:git pull到master上
git push -u origin master
在github上创建一个新的仓库



下面我们基于上面红框上的命令来进行操作

此时,我们到远程github上可以看到提交的内容:

我在本地把README.md内容修改,在后面添加一行,内容为:second commit

github上看到也已经提交上来了。

4.Sourcetree操作
a.首先在github上创建一个远程仓库,仓库名为:bijian_gui_sourcetree


b.用sourcetree仓库本地仓库

创建成功后,在本地新建bijian_test.txt文件,并随便添加了一点内容。

然后添加到暂存区里面

然后点击左上角“提交”功能,添加注释,进行提交。

就可以看到提交成功。

下面我们进一步看如何把本地仓库关联到远程仓库。


然后点击“添加”,把远程仓库的地址填写好如下:

点“确定”后,如出现“远程”和“origin”,则说明关联远程仓库成功。

右击master,选择“推送到”下的"origin"。


点击“推送”提交后,将弹出github的用户名和密码,填写后就能推送到远程github上了。

此时,我们再修改本地的bijian_test.txt文件,回到source_tree界面,点击选择"master",将本地文件添加到暂存区。

点击左上角的“提交”,进入如下界面,填写提交信息后,在填写信息下面有一个“立即推送变更到origin/master”复选框,选择后本地把文件提交到本地的master分支后,会默认会触发推送到我们的origin分支(远程仓库github分支)。

提交成功后,刷新github,就能看到刚提交的内容和提交说明。

六.克隆仓库
我们在开发时,需要和其他人合作开发,这里需要将远程代码克隆一份到本地,然后在本地进行开发,同时开发完成之后,需要将我们开发的内容推送到远程仓库中,这样大家在项目中才能协作开发。
命令:git clone git@github.com:bijian1013/demo4.git
命令的作用就是将远程的代码克隆一份到本地。
首先我们在远程github上创建一个仓库:https://github.com/bijian1013/clone_demo.git

1.命令行方式操作


这时,在github上可以看到刚提交的文件。

2.sourcetree方式操作
首先在github上新建一个远程仓库。

打开source_tree,选择“克隆/新建...”

填写好相关信息如下:

点击“克隆”成功后,在本地工作目录新增clone_sourcetree.txt文件,将其添加到暂存区

点左上角的“提交”,进入提交页面,填写好提交说明,提交。(当然,这里只是提交到本地仓库)

提交成功后,默认会创建master分支。

这里需点击到master分支,右击->推送到->origin【需说明的是:克隆和远程仓库绑定不一样,远程仓库绑定一开始推送的时候没有origin,首先是通过“创建拉取请求...”绑定后,推送到才有origin】

推送成功后,远程对应分支自动关联上master分支。

这时,我们到github上刷新可以看到刚提交的文件。

七.标签管理
在日常开发中,当需要发布一个新的版本,通常是在版本库中打一个标签,这样就确定了该标签对应的版本时刻,以后在某个时候想回滚到当前的版本,就可以直接通过标签来进行取出来。同时创建和删除标签的速度非常快。也就是版本上线要回归时,直接通过标签来回滚。
1.常用命令
查看所有标签:git tag
创建标签:git tag name
指定提交信息:git tag -a name -m "comment"
删除标签:git tag -d name
标签发布:git push origin name
2.命令行工具



这时到github上查看有v1.0.1标签。

这样的话,当我们的一个正式的版本release放到远程仓库里面,我们可以直接根据这个远程仓库的标签来进行回滚,不用担心本地文件或远程仓库毁坏。
下面进一步演示删除标签。

3.Sourcetree工具
修改本地文件内容,将其添加到暂存区。

更点击“提交”,提交到本地和远程仓库。

提交成功后,到github上能查看到变更。

然后,我们来打标签。

填写信息如下:

点击“添加标签”成功后,到远程github上查看到刚提交的标签。

删除标签的话,首先选择标签,右击选择删除对应的标签。

删除本地标签,同时也要删除远程标签的话,在弹出来的框中将“从全部远端删除标签”勾选上。

删除成功后,再到github上查看对应的标签已不见了。

八.分支管理
如你准备开发一个新的功能,但是需要两周时间才能完成,由于还未开发完成,不完整的代码会导致别人的工程报错不能运行,但是如果想把代码全写完再提交,就有丢失代码的风险,但是有了分支之后,就不用担心了,只需创建一个属于你自已的分支,你只需要在你的分支上工作,但整个功能开发完成后,再把这个分支合并到原来的分支,这样既安全又不影响原来的工作,

1.bash命令行实践
a.准备一个仓库并提交文件

b.此时有一个新的feature功能,需要一个新的分支,在新的分支上开发实现

c.此时需要把feature_x分支的代码合并到master分支

d.master分支开发一段时间后,发现feature_x分支没有用了,此时为了保持我们代码空间的干净,需要把feature_x分支删除

2.sourcetree实践
a.首先创建一个本地的仓库


创建成功后,在当前目录下新建branch_demo.txt文件,然后将其添加到暂存区里

然后再提交到本地仓库中

提交后会自动产生master,点击master分支,点击上面的”分支“,进行分支的创建

创建成功后如下所示

然后我们在当前的feature_y分支里添加新的内容

将其加入暂存区,然后提交,接下来需要把feature_y分支内容合并到master分支。
首先,双击master分支切换到master分支,然后点击上面的”合并“按钮,再选择需要合并的feature_y,下面选项选上“立即提交合并”,然后点击“确认”即可。


此时我们到我们的master分支下去看一下我们的branch_demo.txt内容已经是把feature_y分支的内容合并到master分支上来了。
九.总结
1.介绍与安装
2.工作流 工作区->暂存区->版本库
3.初始化 git init -> git add -> git commit
4.远程仓库 git remote add -> git pull -> git push ->git clone
5.分支管理 git branch -> git checkout -> git merge
6.标签管理 git tag -> git push
posted on 2019-03-24 11:17 bijian1013 阅读(251) 评论(0) 收藏 举报
浙公网安备 33010602011771号