git使用大全

1 篇文章 0 订阅

一、git简介

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题。
  • 分布式:Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自己搭建这台服务器,也可以使用GitHub网站

二、安装与配置

(1)安装命令如下:

  • sudo apt-get install git

(2)安装成功后,运行如下命令,可以获取到各种场合常见的git命令:

  • git
    在这里插入图片描述

三、创建版本库:

(1)新建一个目录yuanma,在yuanma目录下创建一个版本库,命令如下:

  • git init
  • 可以看到在yuanma目录下创建了一个.git隐藏目录,这就是版本库目录。
    在这里插入图片描述

四、版本的创建于回退

4.1使用:

  • 在yuanma目录下创建一个文件code.txt:
    在这里插入图片描述

  • 使用如下两条命令可以创建一个版本:

git add code.txt
git commit –m '版本1'

在这里插入图片描述

  • 使用如下命令可以查看版本记录:git log
    在这里插入图片描述

  • 继续编辑code.txt,在里面增加一行。
    在这里插入图片描述

  • 创建一个版本后再查看版本记录:
    在这里插入图片描述

  • 现在若想回到某一个版本,可以使用如下命令: git reset --hard HEAD~1(回到上一个版本)
    在这里插入图片描述
    在这里插入图片描述

其中HEAD表示当前最新版本,HEAD^表示当前版本的前一个版本,HEAD^^表示当前版本的前前个版本;
也可以使用HEAD~1表示当前版本的前一个版本,HEAD~100表示当前版本的前100版本。
  • 假如我们现在又想回到版本2,这个时候怎么办?
    (1)可以使用如下命令: git reset --hard 版本号
    从之前的git log中,可以看到版本2的版本号为:
    在这里插入图片描述

  • 在终端执行如下命令:
    在这里插入图片描述
    现在发现版本2又回来了。可以查看 code.txt 里面的内容如下:
    在这里插入图片描述

  • 下面把终端关了,然后再打开终端,发现之前版本2的版本号看不到了。 那么怎么再回到版本2呢?git reflog命令可以查看我们的操作记录。
    在这里插入图片描述
    可以看到版本2的版本号,我们再使用如下命令进行版本回退,git reset --hard 版本重新回到了版本2。
    在这里插入图片描述

4.2、工作区和暂存区

4.2.1、 工作区(Working Directory)

  • 电脑中的目录,比如我们的yuanma,就是一个工作区。

4.2.2、 版本库(Repository)

  • 工作区有一个隐藏目录.git,这个不是工作区,而是git的版本库。

  • git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

  • 因为我们创建git版本库时,git自动为我们创建了唯一一个master分支,所以,现在,git
    commit就是往master分支上提交更改。

  • 你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
    在这里插入图片描述

  • 前面讲了我们把文件往git版本库里添加的时候,是分两步执行的:

     第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
     第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
    
  • 使用如下命令查看当前工作树的状态:git status
    当工作区文件和暂存区不一致时
    在这里插入图片描述

如果文件都被提交到了版本库
在这里插入图片描述

4.3、管理修改

  • git管理的文件的修改,它只会提交暂存区的修改来创建版本

4.4、撤销修改

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD
    file,就回到了场景1,第二步按场景1操作。
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节。

4.5、对比文件不同

  • 现在要对比工作区中code.txt和HEAD版本中code.txt的不同。使用如下命令:

在这里插入图片描述

4.6、删除文件

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

五、分支管理

5.1、创建和合并分支

  • git把我们之前每次提交的版本串成一条时间线,这条时间线就是一个分支。截止到目前只有一条时间线,在git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支

  • 一开始的时候,master分支是一条线,git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
    在这里插入图片描述
    每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

  • 当我们创建新的分支,例如dev时,git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
    在这里插入图片描述
    git创建一个分支很快,因为除了增加一个dev指针,改变HEAD的指向,工作区的文件都没有任何变化。

  • 不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
    在这里插入图片描述

  • 假如我们在dev上的工作完成了,就可以把dev合并到master上。git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
    在这里插入图片描述
    git合并分支也很快,就改改指针,工作区内容也不变。

  • 合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
    在这里插入图片描述
    举例说明:

  • 执行如下命令可以查看当前有几个分支并且看到在哪个分支下工作 git branch
    在这里插入图片描述

  • 创建一个分支dev并切换到其上进行工作
    在这里插入图片描述
    在这里插入图片描述

  • 修改code.txt内容,在里面添加一行,并进行提交
    在这里插入图片描述

  • 切换回master分支 git checkout master
    在这里插入图片描述

在这里插入图片描述
查看code.txt,发现添加的内容没有了。因为那个提交是在dev分支上,而master分支此刻的提交点并没有变

  • 把dev分支的工作成果合并到master分支上 git merge 分支名称
    在这里插入图片描述
    再查看code.txt的内容,就可以看到,和dev分支的最新提交是完全一样的

在这里插入图片描述
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快

  • 合并完成后,就可以放心地删除dev分支了,删除后,查看branch,就只剩下master分支了
    在这里插入图片描述
    总结:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>

5.2、解决冲突

  • master分支和dev分支各自都分别有新的提交:
    在这里插入图片描述
  • 执行如下命令尝试将dev分支合并到master分支上来
    在这里插入图片描述
  • git status也可以告诉我们冲突的文件
    在这里插入图片描述
  • 查看code.txt的内容
    在这里插入图片描述
  • git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存
    在这里插入图片描述
  • 再提交

在这里插入图片描述

  • 现在,master分支和dev分支变成了下图所示
    在这里插入图片描述
  • 用带参数的git log也可以看到分支的合并情况
    在这里插入图片描述

5.3、分支管理策略

通常,合并分支时,如果可能,git会用fast forward模式,但是有些快速合并不能成而且合并时没有冲突,这个时候会合并之后并做一次新的提交。但这种模式下,删除分支后,会丢掉分支信息

  • 创建切换到dev分支下;
  • 新建一个文件code3.txt编辑内容,并提交一个commit;
  • 切换回master分支,编辑code.txt并进行一个提交;
  • 合并dev分支的内容到master分支;
  • 出现如下提示,这是因为这次不能进行快速合并,所以git提示输入合并说明信息,输入合并内容之后git会自动创建一次新的提交
    在这里插入图片描述
    在这里插入图片描述

如果要强制禁用fast forward模式,git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

  • 创建并切换到dev分支;
  • 修改code.txt内容,并提交一个commit;
  • 切换回master分支;
  • 准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward;
    在这里插入图片描述
    因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去
  • 合并后,我们用git log看看分支历史
    在这里插入图片描述
    在这里插入图片描述

5.4、bug分支

每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除

  • 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,恢复工作现场

六、使用github

6.1、创建仓库

  • 注册github账户,登录后,点击"New respository "
    在这里插入图片描述

  • 在新页面中,输入项目的名称,勾选’readme.md’,点击’create repository’
    在这里插入图片描述

  • 添加成功后,转到文件列表页面
    在这里插入图片描述

6.2、添加ssh账户

  • 点击账户头像后的下拉三角,选择’settings’(如果某台机器需要与github上的仓库交互,那么就要把这台机器的ssh公钥添加到这个github账户上);
    在这里插入图片描述

  • 点击’SSH and GPG keys’,添加ssh公钥。
    在这里插入图片描述

  • 编辑文件.gitconfig,修改某台机器的git配置

  • 修改为注册github时的邮箱,填写用户名
    在这里插入图片描述

  • 使用如下命令生成ssh密钥 ssh-keygen -t rsa -C "邮箱地址"
    在这里插入图片描述

  • 进入主目录下的.ssh文件件,下面有两个文件

     公钥为id_rsa.pub
     私钥为id_rsa
    
  • 查看并复制公钥内容

  • 回到浏览器中,填写标题,粘贴公钥
    在这里插入图片描述

6.3、克隆项目

  • 复制git地址
    在这里插入图片描述

6.4、推送项目

  • 推送分支,就是把该分支上的所有本地提交推送到远程库,推送时要指定本地分支,这样,git就会把该分支推送到远程库对应的远程分支上
git push origin 分支名称
例:
git push origin smart

6.5、将本地分支跟踪服务器分支

git branch --set-upstream-to=origin/远程分支名称 本地分支名称
例:
git branch --set-upstream-to=origin/smart smart

在这里插入图片描述

6.6、从远程分支上拉取代码

git pull orgin 分支名称
例:
git pull orgin smart

在这里插入图片描述
注:参考网络上文档编写,部分内容并非原创!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值