Git

git基本概念

  • 工作区:仓库的目录。工作区是独立于各个分支的。

  • 暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。

  • 版本库:存放所有已经提交到本地仓库的代码版本

  • 版本结构:树结构,树中每个节点代表一个代码版本。

git安装

Git - 安装 Git (git-scm.com)

在 Windows 上安装

  • 打开 https://git-scm.com/download/win,下载会自动开始

  • 另一个简单的方法是安装 GitHub Desktop。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。 稍后我们会对这方面有更多了解,现在只要一句话就够了,这些都是你所需要的。 你可以在 GitHub for Windows 网站下载,网址为 GitHub Desktop 网站

在 Linux 上安装

  • CentOS

    $ sudo dnf install git-all
  • Ubuntu

    $ sudo apt install git-all

在 macOS 上安装

在 Mac 上安装 Git 有多种方式。 最简单的方法是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 'git' 命令即可。

$ git --version

安装过程不多做赘述

git使用

考虑到大多数同学电脑为windows环境,此教程基于windows

全局配置

安装完成后打开git bash

 

  1. 首先我在电脑E盘目录下新建了一个文件夹git_learn,当前文件夹中没有任何文件

     

  2. 在git bash中cd到当前文件夹

    • 如果不太懂命令行路径的可以直接复制路径

    • 在git bash中粘贴为shift+insert

    • 复制为ctrl+insert

     

  3. 效果如下:进入了E盘的git_learn文件夹目录下

     

全局配置命令(只会用到一次)

  • git config --global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中

  • git config --global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中

  • git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中

跟着一步一步来

  1. 首先设置全局用户名

    git config --global user.name qfzwy
  2. 然后设置全局邮箱地址

    git config --global user.email 528916069@qq.com
  3. 最后将当前目录配置成git仓库,信息记录在隐藏的.gitconfig文件中

    git init

     

  4. 好了,到此一个仓库的初始化已经完成了,但你可能不知道有用什么,别急,先学点常用的命令

    • ls:查看当前目录下的所有文件或者文件夹(不包括隐藏的文件)

    • ls -a:查看当前目录下的所有文件或者文件夹(包括隐藏的文件)

    • cd:进入某个目录

    • cat:查看某个目录或者文

    • 感觉windows下也不怎么使用命令,感兴趣的同学可以学习一下Linux

       

       

       

开始使用

为了让教程简单,通俗易懂。我以多人写一篇文章的背景来进行教学

仓库建立

每个成员都需要配置一下自己的用户名和邮箱,但是仓库只需要队长来创建。

队长在本地配置好git仓库以后,把仓库push到云端,课程要求使用gitee,那本教程也以gitee为例,其他网站类似

  1. 队长登录到gitee后,新建仓库,这里我命名为git_learn

     

     

     

  2. 创建好之后会到达这个页面

     

  3. 首先全局设置我们已经在之前设置好了(如果),所以直接跳过

  4. 然后本地仓库也已经创建了,所以直接从touch README.md开始,直接复制粘贴命令即

    • touch:创建一个文件

    • mkdir:创建一个文件夹

       

  5. 继续按照命令复制粘贴执行(暂时不解释含义,一会儿就懂了)

     

  6. 执行完这些步骤后,刷新当前页面,可以看见仓库已经和本地同步,那接下来将开始正式教学

     

个人使用

  • git add XX :将XX文件添加到暂存区

  • git add . :将所有修改过的文件加入暂存区 添加或删除

  • git commit -m "给自己看的备注信息":将暂存区的内容提交到当前分支 持久化暂存区内容

  • git status:查看仓库状态

  • git log:查看仓库节点日志

先介绍几个命令,现在教程正式开始

  1. 首先我们使用第一条命令git status

    • status即查看当前仓库的状态,是否发生变化,发生了什么变化

    • 这里由于未对仓库做出任何操作,所以具体的变化会在后面讲解

       

  2. 当前我们的git_learn文件夹目录下只有一个README.md文件,但是为了方便教学,我使用txt文件给大家做演示

     

  3. 文本编辑会使用vim的可以使用vim,不会使用的也可以在本地打开txt文件进行编写。

    • vim

       

       

    • 本地

       

       

    • 为了方便,接下来我就使用vim了

  4. 当然,不着急编写,我们先看看仓库的状态

     

    可以看到红色的article.txt,这是因为我们在仓库中新建了一个名为article.txt的文件仓库发生了变化,由此我们可以引入下一条命令

  5. 将文件加入暂存区:git add XX

    • 我们先来试一下,可以看到将article.txt加入暂存区,再查看status时,article变成了绿色

    • 然后我们再来使用下一条命令git commit

  6. 提交一个节点:git commit -m "info"

    • git commit -m "touch article"

       

       

    • 提交后再查看git status发现仓库又恢复了最初的样子,但是整个过程发生了什么变化呢?我们可以使用下一条命令:git log 来了解

  7. 查看节点日志;git log

    • git log

       

    • 可以发现当前仓库一共有两个节点:节点ID可以看commit的前六位即可

      • 包含的信息有Author,Date,以及 git commit -m "xxx"引号中的信息

  8. 所以其实可以总结一下上面的几个操作

    1. 我们创建一个article.txt文件

    2. 将该文件放入了暂存区

    3. 然后把暂存区的内容提交,也就是生成一个新的节点

    4. 整个过程可以想象成一棵树的增长(画的还行吧)

       

  9. 以上我通过几个简单的过程,介绍了四个命令,你可能还是比较懵,但是接下来我会不断重复使用,并且详细介绍。

 

进一步的使用

  1. 我们尝试往article里写一点内容:qfzwy-gitlearn

     

  2. git status:它告诉你,你对article进行了修改,红色表示还未放入暂存区

     

    • 这里我简单(通俗易懂)解释一下暂存区,简单的说:我们写完自己的代码后,如果想提交,你总得告诉他你想提交什么吧。而add就是把你工作区写好的东西放入暂存区,也就是让他等着,我一会儿提交。

    • 提交一下,看看信息。哎,出了一个警告,查了一下,这是windows下的问题,设置一下就好git config --global core.autocrlf false

       

       

  3. 刚刚已经将article.txt放入了暂存区,此时我们试试继续对其进行更改

    • 第二行添加了:modify_1

       

    • 再查看一下

       

    • 呐这就和第一次修改后的状态一样了,呐,我们再将其加入暂存区。(git add .:. 就是把当前目录下所有修改过的文件都加入暂存区)。可以发现经过刚刚的修改后,没有出现警告了

       

  4. 但是在实际工作中,我们可能会遇到一些问题,如果我想撤回刚刚的修改怎么办。

    • 如果已经放入了暂存区,那么需要先将其从暂存区移出:git restore --staged

       

    • 但这只是将它从暂存区移出,没有撤销修改。撤销修改:git restore

       

    • 现在查看一下文件,发现文件为空。所以,只要你没有提交,其内容都没有被持久化保存。可以进行修改。即使提交了也没事,只是麻烦一点,一会儿会讲。

       

  5. 现在我还是往里写一点内容,并放入暂存区进行一次提交

     

     

    • 查看日志可以看见,有一个HEAD指针,指向了当前这个版本,这涉及到之后的版本回滚,现在知道有这个东西就行。图中用红色代表HEAD指针

       

  6. 我们再去看看云端

    • 哎,发现云端没有东西,那就需要引出下一条命令:git push

  7. 将内容推送到云端:git push

    可以发现云端的内容也更新了

     

     

  8. 在云端的统计-提交中,我们可以看到和git log一样的东西

     

  9. 所以总结一下,在日常的开发中,我们个人使用就是这几个简单的命令(只要不涉及版本回滚,但是一般都不会涉及,本教程只为简单,所以暂时不讲,如有需要后续会补)

日常使用总结

  1. 写完一些东西 :git add . or git add filename:加入暂存区

  2. 此时如果要反悔: git restore --staged or git restore --staged filename:撤出暂存区

  3. 撤出暂存区后如果想撤销操作:git restore filename

  4. git commit -m "info" :提交一个节点

  5. git log:可以查看节点日志;git log --pretty=oneline

  6. git reset --hard id :id为日志文件中 commit前6位就行 返回到某一个节点

  7. 但是此时git log就已经看不到当前节点操作之后的节点,如果想返回,使用git reflog即可看到所有节点

 

团队使用

其实团队使用,为难的只是队长一个人啦

让成员也加入云端git

  1. 让成员的ssh公钥传递到云端

  2. 然后git clone

  3. 然后创建一个dev分支

  4. 然后绑定到git branch --set-upstream-to=origin/branch_name1 branch_name2

  5. 当两个成员使用dev的时候,当成员1已经git push以后,成员2再git push会报有冲动,此时需要git pull 将云端的分支拉到本地,处理冲突,再push

开始动手
  1. 在Windows下查看[c盘->用户->自己的用户名->.ssh]下是否有"id_rsa、id_rsa.pub"文件,

    • 注意一点:直接复制的路径是C:\Users\mingj.ssh 终端中需要将\改为/

       

    • ssh-keygen 后 一路回车

       

       

    • 保护好你的密钥,不要泄露

       

  2. 然后把pub中的内容给你的队长,队长将其上传到自己的git

    就这样把团队成员公钥都加入后就OK了

     

     

团队开发命令

一般不会在主分支上开发

  • 主分支:master分支

  • git checkout -b branch_name:创建分支并切换到这个新的分支

  • git branch:可以看到当前有哪些分支,*就是当前所在的分支

  • git checkout branch_name:切换到哪个分支

  • git merge branch_name:将分支branch_name合并到当前分支上

  • git branch -D dev:删除分支

  • 将本地分支推到云端

    • 此时删除分支

    • git branch -D dev 删除本地分支

    • git push -d origin dev删除云端分支

  • 云端分支下载到本地

    • 本地创建该分支 git checkout -b branch_name

    • 将远程的branch_name分支拉取到本地:git branch --set-upstream-to=origin/branch_name1 branch_name2

    • 将远程仓库的当前分支与本地仓库的当前分支合并:git pull

  • 如果本地分支删了,也可以直接在云端把分支内容合并到master:git pull origin branch_name。此时master会直接多一个节点push即可

创建dev分支并同步到云端
  1. 首先,团队开发时不要直接在主分支上进行开发。每次进行合并时,应该由队长来进行审核。

    • 队长创建一个dev分支:git checkout -b branch_name

  2. 创建dev分支并切换到这个新的分支:git checkout -b dev

     

    • 如果想切换回主分支:git checkout master

    • 查看当前在哪个分支:git branch

       

  3. 将本地分支推到云端

     

     

  4. 然后自己也需要将本地dev和云端dev绑定:git branch --set-upstream-to=origin/dev dev

  5. 之后的工作就都在dev上进行了

成员将云端的仓库拉到本地
  1. 首先队员需要将云端的仓库拉到本地:git clone

     

     

  2. 把远程仓库的dev拉到本地

    • 进入仓库查看分支会发现,当前成员处于master分支,而没有dev分支

       

     

    • 首先在本地创建dev分支,然后将本地dev分支绑定到云端

      • git checkout -b dev

      • git branch --set-upstream-to=origin/dev dev

       

在dev分支上进行开发
  1. 假设现在两个成员都处在dev分支:左边为大明,右边为二明

     

  2. 现在大明正在写大明的内容,同时二明也在写二明的内容

    想象一下,他们两个人写的位置是一样的,但是内容不同,如果同时提交的话,会怎么样。

    我们试一下

     

    现在大明先提交,二明后提交

     

    修改提交后查看日志,可以看到到此都还是正常的,因为是在本地进行修改

    那么试一下push到云端

     

    可以看到大明push后,二明再进行push就报错了,它提示二明需要git pull一下。

    实际上是因为云端已经有过修改,此时需要先git pull一下,把云端的分支拉到本地

     

    然后我们再试一下push,依然报错

            

 

    此时是需要处理一下冲突

               我们需要对article.txt进行一下修改,查看article.txt会发现一些不是我们写的东西,那就是我们要处理的

             

 

             经过手动处理之后

             

 

              

 

              成功push,然后我们可以去云端查看一下

 

 

             

 

 

 冲突处理没有错,HEAD是当然我忘了删,不过没事,刚好给后面队长审查合并做了栗子

最后将dev分支合并到master分支

git merge branch_name:将分支branch_name合并到当前分支上

由队长去合并

  1. 队长先将云端的dev拉到本地:在dev分支进行:git pull

  2. 然后对内容进行审查修改

     

    别忘了commit

     

  3. 然后切换到master分支

     

    当前master分支的内容就是最新内容可以提交到master分支啦

           

 

            云端中也是提交到了master分支

 

最后由于这次修改是在master分支中提交的,那么dev中的版本就低了一个版本,所以需要同步,队长可以在云端进行同步

 

 

同步后就和master分支一样了

下一次成员开发时,还是从云端pull下dev分支就可以处理冲突进行提交了

结语

基本的使用就是这样啦,如果还有哪里不明白可以问我喔

 

 

 

posted @ 2023-05-11 20:28  qfzwy  阅读(595)  评论(0)    收藏  举报