当前位置:   article > 正文

Git 入门——分布式版本控制系统_gi是一种分布式版本控制系统,使用git可以创建tag用于版本发布。

gi是一种分布式版本控制系统,使用git可以创建tag用于版本发布。

一、Git简介

1、什么是git
  • git是一个开源的分布式版本控制系统,用于高效敏捷的管理大小项目代码。
2、集中式与分布式

在这里插入图片描述

二、安装 Git

1、Linux 上安装Git
sudo apt-get install git  
  • 1

或者

sudo apt-get install git-core
  • 1
2、Windows 上安装Git

官网 下载 (不过比较慢)
CSDN 下载(Windows 64位系统,Git 版本为:2.18)
然后按默认选项安装即可.

查看是否安装成功:Win + R -> cmd -> git
在这里插入图片描述
安装完成后,还需要最后一步设置(你的名字和Email地址),在命令行输入下面两条命令:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
  • 1
  • 2

三、创建版本库,并把文件添加到仓库

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

1、创建 Git 版本库(目录路径中最好不要包含中文)
在这里插入图片描述
2、把目录变成Git可以管理的仓库
在这里插入图片描述
然后同级目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

3、把文件添加到版本库 git add 文件名
在这里插入图片描述
4、用命令git commit告诉Git,把文件提交到仓库
在这里插入图片描述
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

5、总结

初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:

  1. 使用命令git add <file>,注意,可反复多次使用,添加多个文件;
  2. 使用命令git commit -m <message>,完成。
  3. commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
  • 1
  • 2
  • 3

四、查看状态、查看不同

修改文件内容,在文件中添加add:2019_1009_11:05,运行git status命令看看结果:
在这里插入图片描述
git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
在这里插入图片描述
git diff这个可以让我们看到具体修改了什么内容
在这里插入图片描述
总结

  • 要随时掌握工作区的状态,使用git status命令。
  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

五、版本回退

如果误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失

1、git log命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
在这里插入图片描述
2、在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。退回到上一个版本可以使用git reset命令:
在这里插入图片描述
3、返回上次的版本
在这里插入图片描述
当要返回到上一次的版本并且没有版本号(版本 ID)时,Git提供了一个命令git reflog用来记录你的每一次命令:
在这里插入图片描述
总结:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

六、工作区、暂存区、版本库

在这里插入图片描述
我们把文件往Git版本库里添加的时候,是分两步执行的:

  • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
  • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

七、撤销修改

1、git checkout -- <filename> 撤销在这里插入图片描述

命令git checkout -- lemon.txt意思就是,把lemon.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是lemon.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是lemon.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

2、git reset HEAD <filename> 撤销

用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区,当我们用HEAD时,表示最新的版本。
在这里插入图片描述

总结:
  1. 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
  2. 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
  3. 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考五、版本回退一节,不过前提是没有推送到远程库

八、删除文件

1、rm <filename> 删除

在这里插入图片描述
查看文件状态发现:版本库中的文件并没有删除

2、git rm <filename> 删除

在这里插入图片描述
查看文件状态发现:版本库中的文件已经删除

总结

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

九、远程仓库(以 CODING 为例)

远程仓库就是可以把自己本地版本库里的文件上传到的服务器仓库,然后其他人可以通过这台服务器仓库提取和提交。
远程仓库比较主流的有三个:GitHub码云CODING

第一步:创建SSH Key

在用户主目录下(C:/Users/Administrator),看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:$ ssh-keygen -t rsa -C "youremail@example.com"
在这里插入图片描述
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第二步:拷贝公钥

登陆CODING,打开“个人设置”,“SSH 公钥”页面, 点击”新增公钥“。然后,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
在这里插入图片描述

第三步:添加远程库

新建项目,代码浏览
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第四步:从远程库克隆

在这里插入图片描述
把复制的地址 粘贴到命令行即可
在这里插入图片描述

SSH原理:

在这里插入图片描述

十、Git 分支

一、创建与合并分支

在这里插入图片描述

总结:

Git鼓励大量使用分支:

  • 查看分支:git branch
  • 创建分支:git branch <name>
  • 切换分支:git checkout <name>或者git switch <name>
  • 创建+切换分支:git checkout -b <name>或者git switch -c <name>
  • 合并某分支到当前分支:git merge <name>
  • 删除分支:git branch -d <name>
二、解决冲突

在这里插入图片描述

总结:
  • 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
  • 解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
  • git log --graph命令可以看到分支合并图。
三、分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

$ git merge --no-ff -m "merge with no-ff" dev   //准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward
  • 1
注意:

在实际开发中,我们应该按照几个基本原则进行分支管理:

  • 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活,那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。所以,团队合作的分支看起来就像这样:在这里插入图片描述
注意:
  • Git分支十分强大,在团队开发中应该充分应用。
  • 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
四、 Bug 分支

在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交,这时该怎么办呢??
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

总结:

  • 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
  • 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
  • 在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
五、 Feature 分支

如果做好了的工作需要销毁的话:$ git branch -d <filename>
如果销毁失败。Git友情提醒,filename分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的-D参数。。

总结:

  • 开发一个新feature,最好新建一个分支;
  • 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
六、 多人协作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
要查看远程库的信息,用git remote;或者,用git remote -v显示更详细的信息

推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master
  • 1

如果要推送其他分支,比如dev,就改成:

$ git push origin dev
  • 1

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

  • master分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

抓取分支
多人协作时,大家都会往masterdev分支上推送各自的修改。git clone
当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。
推送分支:git pull;如果推送失败,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:
因此,多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

总结

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

十一、标签管理

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。

一、创建标签

在Git中打标签非常简单,首先,切换到需要打标签的分支上;然后,敲命令git tag <name>就可以打一个新标签:$ git tag v1.0;可以用命令git tag查看所有标签。
比方说要对add merge这次提交打标签,它对应的commit id是f52c633,敲入命令:$ git tag v0.9 f52c633
注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:$ git tag -a v0.1 -m "version 0.1 released" 1094adb
总结:

  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
  • 命令git tag可以查看所有标签。
二、操作标签

如果标签打错了,也可以删除:$ git tag -d v0.1
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin <tagname>;或者,一次性推送全部尚未推送到远程的本地标签:$ git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:$ git tag -d v0.9,然后,从远程删除。删除命令也是push,但是格式如下:$ git push origin :refs/tags/v0.9

总结

  • 命令git push origin <tagname>可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d <tagname>可以删除一个本地标签;
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/909014
推荐阅读
相关标签
  

闽ICP备14008679号