版本控制工具——Git学习

本文参考资料:廖雪峰的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来请求更改别人库里的代码
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,561评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,218评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,162评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,470评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,550评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,806评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,951评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,712评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,166评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,510评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,643评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,306评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,930评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,745评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,983评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,351评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,509评论 2 348

推荐阅读更多精彩内容