美文网首页
版本控制工具——Git学习

版本控制工具——Git学习

作者: 风一样的我1 | 来源:发表于2022-07-31 12:48 被阅读0次

    本文参考资料:廖雪峰的GIT教程
    快捷使用导航:

    日常使用
    廖老师总结的常用命令
    github官网

    一、什么是Git

    Git是分布式版本控制系统,由Linusk开发。其作用可总结为两点:

    二、常用操作

    1.导入文件

    版本库(repository)是git要管理的目录。

    • 创建版本库
    mkdir <文件目录>
    cd <文件目录>
    git init
    

    git init为初始化版本库。

    • 添加文件
      需要在创建的git目录下将文件导入,然后执行下列操作
    git add <文件名>
    git commit -m "备注"
    
    add.png
    commit.png

    最终显示1个文件被改动,插入一个,删除一个。

    • 重要概念:工作区和暂存区


      工作区和暂存区

      工作区:存放文件的目录
      暂存区:文件add后到这里
      master:分支,commit后暂存区的内容提交到分支
      可以多次add,一次commit。修改之后,只有add到暂存区再commit才会生效。

    2.修改查询

    • git diff 查看修改的内容。 git diff HEAD -- <文件名>查看当前提交的和目录下文件的区别。
    • git status 查看目前工作区的状态
      修改上述的java文件,在add之前,执行git status命令,结果如下


      status

      使用git diff 查看修改了什么,如下图,结果告诉我们从红色改成了绿色。


      diff

    3.版本回退

    • 查看提交历史:git log。回退到过去:log+reset。
    • 版本回退:git reset --hard <commit_id> 或者git reset --hard HEAD标识。
    • 查看命令历史:git reflog。穿梭到未来:reflog+ reset。
      首先通过git log查看提交的历史,结果显示出三个提交历史,并显示了commit时的备注(要好好写备注)。其中head指向的是当前的版本。


      log

      要回退版本,有两个方式:(1)使用版本号(commit_id),即log信息里显示的一大串编码。(2)使用HEAD标识,HEAD^标识上个版本,HEAD~N表示往上N个版本。
      使用git reset --hard HEAD^操作,并使用cat <文件名>查看当前文件内容。确实回退回来了。


      reset
      如果后悔回退,可以使用git reflog看一下自己的命令历史,然后找到此前的版本号。
      回退到备注为"commit"时的版本。
      回到未来.png

    4.撤销修改

    • git checkout -- <文件名>
      撤销修改分为以下几种情况:
    • 工作区修改,未add,撤销后和现存版本库的一样
    • 提交到暂存区后修改,未commit,撤销后和提交到暂存区后一样
    • 工作区修改后提交到暂存区想撤销工作区的修改:分两步走
      step1:先git reset HEAD <文件名>撤销add操作
      step2:git chechkout -- <文件名>撤销修改操作
    • 已经commit到分支,撤销修改使用版本回退操作

    5.删除文件

    删除和创建文件的流程相似,先手动删除目录中的文件,再使用命令行

    • git rm
    • git commit -m "备注"
      如果误删,可以使用git checkout -- <文件名>撤销删除操作。

    三、github远程仓库

    为github账户添加key,可以从本地电脑推送文件到github仓库。
    添加key的操作见:
    https://www.liaoxuefeng.com/wiki/896043488029600/896954117292416

    1.关联github和推送

    • git remote add origin git@<github用户名>:path/repo-name.git
    • git push -u origin master第一次推送master分支的所有内容;将本地的master和远程的master关联上
    • 此后每次修改,git push origin master推送最新修改;
      推送Git.java到我的github:


      github

    2.从github克隆

    • git clone 地址,地址可以在github的clone选项中找到
      Git支持多种协议,包括https,但ssh协议速度最快。

    四、分支操作

    1.分支概述

    分支可以实现多人协作,每个人在自己的分支上干活,最后进行合并。
    其中,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;干活在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。


    多人协作
    分支
    分支合并

    HEAD指向当前分支

    2.分支操作

    • 查看分支: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 branch -D <name>
      创建一个分支dev,对文件进行修改后提交。切换为maste分支,发现内容并未改动。


      创建分支

      将主分支和dev分支融合,再查看内容,发现内容已改变。


      分支融合
      如果分支修改的内容不一致,需要手动解决冲突。

    3.冲突解决

    • 在master分支上创建一个新的practice.txt文件
    • 创建一个新的分支feature1,并在该分支下修改practice文件(增加一列内容:It is Saturday.)提交。
    • 切换分支到master,可以看到在master分支显示的还是未修改时的文件内容(即没有“It is Saturday.”)。在master分支下新增最后一行为“It is Sunday.”提交。
    • 尝试融合feature1和master两个


      合并显示有冲突

      打开practice.txt文件,可以看到git帮助我们标记出了两个分支的不同

    This is a practice text.
    Created by Pengu
    Aug.21st, 2022.
    <<<<<<< HEAD
    It is Sunday.
    =======
    It is Saturday.
    >>>>>>> feature1
    

    在practice.txt文件后更改“It is Sunday, not Saturday.”手动解决冲突,然后提交

    • 通过git log --graph --pretty=oneline --abbrev-commit命令查看分支合并情况
      显示如下:


      分支合并情况
    • 删除分支feature1

    4.bug分支和feature分支

    • bug分支,如果要修复bug,要新建bug分支,然后合并,删除bug分支。
    • feature分支,开发一个新功能,最好新建一个分支,合并到dev分支上。

    四、多人协作

    1、各自推送到远程

    • git push origin <branch-name>

    2、解决冲突

    • git pull
      先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送。如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

    五、github操作

    • 任意Fork开源仓库到自己的github
    • 更改别人的代码后可以pull requests来请求更改别人库里的代码

    相关文章

      网友评论

          本文标题:版本控制工具——Git学习

          本文链接:https://www.haomeiwen.com/subject/nychwrtx.html