git 的基本使用

本来写了很多很多的(16页world),从基本命令行到工作区暂存区,分支等等。可是不知脑子怎么了,点了关闭问我是否保存,我点了否???本来想放弃的,可是想了想,我准备写这个blog不就是为了克服懒惰的么。所以我还是准备记录一下简单的git使用方法(当然不会把所有都写上了,没那个精力了)

目录

1.什么是git?

2.git的安装

3.常用git命令解释

4.git与GitHub/Gitee

1.什么是git

        Git是目前世界上最先进的分布式版本控制系统,能够管理历史版本,当你一次次更改文件后想要恢复至原来的某次版本,git可以很好的帮助你做好这一点。

        在公司很多情况下一个文件是需要多人协作完成的,每个人负责不同的模块。如果你现在写着某个文档,文档的其中一部分需要另一个人来完成,但同时你还需要继续写该文档,如果通过你把你的文档复制给他然后他然后他写完在发给你,你再对你当前正在写的文档和他发给你的那个文档进行整合,那是多么麻烦的事情

       然而,很多人使用这个只是为了从GitHub上clone个程序,或者提交老师布置的作业(比如我)

2.git的安装

Ubuntu  :sudo apt-get install git

Windows:   下载https://git-scm.com/downloads  (有时需要翻一下墙)

下载完一路默认点下来就行,当然安装位置需要改一下,默认c盘的

安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"

$ git config --global user.email "email@example.com"

3.常用git命令的解释

这一部分我不会直接告诉你命令并且给你解释解释就算了,我打算以创建一个git库的方式来表达

我们当然是想本地有一个代码库,GitHub上有一个代码库,并且我们在本地更改文件,可以提交到GitHub上,使GitHub上也发生改变。同样也想,如果老师或者同时在GitHub上修改或添加了代码,我们可以使修改的部分更新到我们的本地库来。

我们从创建一个本地版本库开始

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

        我们首先建一个文件夹,这个文件夹就是你存储本地工程所有代码的地方。并进入这个文件夹。(打开git的命令行工具 git bash 在你的开始菜单)cd 地址

          

 

现在我们已经进入这个文件夹了,我们怎么让这个普通的文件夹成为版本库呢?

我们输入git init 命令来使这个文件夹变成能被git管理的文件夹,此时会生成一个.git文件夹(不要动,它就是我们的仓库,我们的版本管理都是靠这个文件夹),但是这个文件夹使默认隐藏的,我们可以更改查看选项看一下

好了,现在我们往里面存一个文件,比如readme.txt


 

 这个时候git 是没有存储readme.txt的版本信息的,我们需要通过命令git add readme.txt 来将它添加到库中,并且使用命令git commit -m "说明信息" 来记录一下你添加了什么东西呀什么的。

 现在我们已经将文件添加到版本库里了。实际上我们新建readme.txt的地方叫做工作区,我们通过git add filename 命令 将它提交到了“暂存区”,然后通过git commmit -m "说明信息" 将暂存区的东西提交到了“分支”。暂存区,分支的概念现在不需要知道。但是现在需要说明的一点是:

        git add filename 可以多此调用 或者通过 git add filename filename2 来将多个文件一次或者多次提交到暂存区,但是git commit -m " "只要运行一次,就会将暂存区中所有的文件转移到 分支上。

下面我们来看怎么进行版本管理的:

我们将readme.txt 添加一行:

我们输入 git status 查看当前版本库状态 

它告诉我们 readme.txt 发生了改动 。但是我们没有提交。

我们通过 git add readme.txt   git commit -m "说明" 提交它:

我们再输入git status 查看状态 

 

 此时他就告诉我们,工作区是干净的,也就是说没有发生任何改变,因为我们已经把发生了的改变提交了。

经过上边这个例子,是时候说说这个提交到底是什么意思,可能有人已经猜到了。我们第一次通过那两个命令提交,生成了我们的第一个版本。我们修改后,又提交,提价了的是我们的第二个版本。

接着上边例子,我们如果想要查看修改什么,我们输入git diff readme.txt 来查看。如果我们修改了此数多了,我们可能记不清修改了几次,每次修改了什么,此时我们可以通过git log 来查看版本信息

 

现在我们如果想要回到原来的版本怎么办?

他是从最近的更改往下排的 commit 后边那一堆字母数字为版本号

下面进行版本回退:

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD(实际上是一个指针,后边会说到)表示当前版本,也就是最新的提交的d5979e876.....(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

输入 git reset --hard HARD^  或git reset --hard d5979e876(太长了不写全了,实际上也不需要写全git会自动查找相近的,只要写好前边就行)

 此时已经回退到第一个版本了。

现在是时候说明清楚工作区,暂存区,分支了:

工作区:在电脑中能看到的目录  就是上边创建的gitcsdn 文件夹  (除了.git 文件夹)

版本库:就是那个.git文件夹

版本库里又存在着两个部分  分别是暂存区(stage) 与 master(分支) 这两个是什么作用呢  当我们在工作区进行更改时,如果我们不输入git add file  那么暂存区中还是空的 ,如果我们将更改了的文件进行git add file  那么更改了的文件将“暂时”存在暂存区。直到现在我们还没有提到分支master ,那是因为我们还没有进行git commit -m 当我们进行了这个命令,暂存区中存储的修改后的文件将被“挂载到分支上”,同时暂存区变为空(这就是为什么叫做暂存区)。那这个分支是什么意思呢?分支master 就相当于一条时间线,我们每次修改通过 git add git commit 后的东西就相当于一个时间结点“挂载”到这个时间线上。这个时间线是有一个指针的(叫做HEAD)(学过c的都知道指针的意思)这个指针指向的是当前最新修改的节点(就是说我们新commit 的文件 这个指针就指向它),当我们进行版本回退时,我们只需要将这个指针指向上一个节点或者你指定的节点(通过输入前边所说的版本号 版本号就相当于你每一次修改的文件挂载位置的地址,门牌号)

请大家明确,我举上边这个例子只是为了让大家更好的清楚各部分的作用,实际上git管理的是修改的部分,而不是整个文件

git命令行部分其实还有很多内容,比如如果错删了怎么办什么的,一般我们不会用到,用到我们再Google就行了。

还有一部分命令行的内容将在下面这一部分讲解,因为它涉及的是远程库与本地库之间的一些操作

4.git 与 GitHub/gitee(其实这部分才是我们经常使用的)

我们以gitee为例,GitHub的操作和gitee是一样的,但是github懂得都懂在国内经常崩(有办法解决但是还是以gitee吧)

我们的需求无非就两个:

(1)创建本地仓库,将本地仓库同步到GitHub上进行多人协作或者自己存着玩之类的

(2)参加别人的项目,或者自己clone一个别人的到本地进行编辑

由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

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

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

打开gitee

讲sshkey 复制进去 GitHub一样 

 

(1)创建本地库--->链接到Gitee

首先我们在gitee上建立一个仓库

点创建,

按照第三个来,或者第二个,按自己需求

这里我们已经有了自己的本地仓库了,

 

 

 

按照上边的代码我们就完成了本地库与gitee链接。

需要说明一点的是:

git remote add origin https://gitee.com/********/gitcsdn.git

remote 是指远程   origin 是可以更改的名字 只是默认为origin   后边地址为GitHub库的地址

git push -u origin master

只有第一次往远程库推东西时 才加-u 之后就不需要了

master 是你远程库origin 的master 分支  

分支的概念自己百度百度 ,我觉得还是挺重要的 ,但是如果就提交个作业啥的不需要了解了

现在我们对readme.txt 进行更改: 

 

进行 git add   git commit 

然后我们通过命令 git push origin master 向远程库提交更改:

 

 

 可以看到此时远程仓库中文件也已经变了

那么我们如果在远程的库中对文件更改(或者其他同时,老师对文件进行了更改添加)我们怎么对本地代码进行更新呢?

我们将远程添加了一行777777

 

我们在本地命令行输入git pull  来使本地代码库更新至远程库最新版本:

我们可以看到已经变为 7777了 

但是我们不支持使用这样的方法 为什么呢? 难道别人改什么你更新什么吗?

答案是否定的,我们需要查看一下改了什么,再决定是否更新

我们再加一行88888

命令行输入git fetch origin master:tmp  将远程库拉取的文件放在tmp

 

输入git diff tmp 查看本地文件与tmp之间的差别

可以看到多了88888

输入git merge tmp 将更改与本地库结合 

 

直到现在我们已经会了 怎么建立本地库 并连接到远程库 等等

(2)clone 其他人的代码库并到本地

clone 其他人的代码首先你需要将他人的仓库fork一下到自己的代码库

 

现在已经到我们的仓库来了

在本地建立一个文件夹  opencvpro 

在该文件夹内 打开命令行 输入 git init 初始化仓库

输入 git clone https://gitee.com*********/opencv343_face_recognition.git

 

 

 

到目前这个仓库已经到本地了,我们也可以通过修改文件 然后 git add git commit 进行修改了

但是目前还有一个重要的东西就是require pull 

因为我们是clone其他人的项目  我们当然可以本地改了使我们自己的远程仓库也进行改,可是我们如果想让原来那个人的项目也改应该怎么办,比如我们给他提了一个bug ,就通过pull来进行只要对方同意接受,就可以了。

借鉴一个图:

好了写完了!还有很多知识,比如分支什么的,各位自己百度啦。本文说的这些对大多数人已经够了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苹果香蕉柠檬c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值