git基本使用

<meta charset="utf-8">

git

2020年1月10日

9:00

git

git是目前世界上最先进的分布式版本(项目版本)控制系统(没有之一)

分布式:代表git :每一个客户端都可以充当中央服务器。

集中式:代表svn 有一台电脑充当中央服务器的,每一个客户端先把代码提交到中央服务器上,免的突发事件的时候整个项目全部没有了。可以从中央服务器上下载。

安装git

起名字

邮箱号

建立仓库

初始化(git init)会在仓库创建一个隐藏的git文件夹

把文件添加到仓库一定要放到仓库根目录下,子目录也行

提交

方法

init 初始化

status 测试

add 添加

可以多次提交

git add file1.txt git add file2.txt file3.txt $ git commit -m "add 3 files."

commit 提交 -m“为什么提交”-m一定要写,相当于一个注释。

时光穿梭机

checkout 回到修改之前的状态,可以理解为chri+z

diff 文件名 辅助命令(决定我下步的操作方向)当前和修改和以前的状态,都会显示。你来决定提交或返回

版本回退

.当前目录下的所有文件。

log 来查看我们提交的次数

git reset --hard dead^ 一个^号退一个版本,如果版本过多了可以用~数字来会到多少版本

git reset -hard 版本id 回到指定id版本 (当前窗口未关闭的话)

reflog 查看命令历史,以便回到未来某个版本。(窗口关闭的话可以通过它来查询历史版本号)

--hard 回到上一个版本,电脑没关之前可以找找上个版本id号回来。

工作区和暂存区

直接可见的目录

[图片上传失败...(image-2cdad3-1584625294017)]

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

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

管理修改

管理的是修改而非文件本身

撤销修改

checkout --文件名 利用命令行撤销,回复到上一个版本。

在工作区还没有上传到暂存区可以直接删除

reset HEAD 文件名 相当于撤销ADD操作。

先撤销add操作在checkout给他删除。

如果已经conmit了就回退版本

如果推送到远程了,就没有办法了。

删除文件

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

$ rm test.txt

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

删除恢复

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- test.txt

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

远程操作

1:生成私钥和公钥

$ ssh-keygen -t rsa -C "350018192@qq.com";

2:登录github官网

账号:jie-han1

密码:qq密码

3:账户设置-新键 - 取名,粘贴密钥 - 创建仓库-=关联网上类库和本地git remote add origin git@github.com:jie-han1/hanjie.git

4:本地操作

1:push 推送

执行一次如果下次还是往master这个分支上加的话直接可以git push就行

把本地文件推送到网上内库上的master分支上()

2:一旦改了就往远程推送之前要先推送本地

add~~commit~push

从远程库克隆

git clone 克隆指令 git clone 加地址

创建分支

首先,我们创建dev分支,然后切换到dev分支:

$ git checkout -b dev

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

git branch dev git checkout dev Switched to branch 'dev'

然后,用git branch命令查看当前分支:

$ git branch * dev master

git branch命令会列出所有分支,当前分支前面会标一个*号。

切换到master上

[图片上传失败...(image-887836-1584625294017)]

merge

现在,我们把dev分支的工作成果合并到master分支上:

$ git merge dev Updating d46f35e..b17d20e Fast-forward readme.txt | 1 + 1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

合并完成后,就可以放心地删除dev分支了:

$ git branch -d dev Deleted branch dev (was b17d20e).

解决冲突

同时多人操作的话,提交之后会后提交的会落后于master 所以会有冲突。git判断不出两个文件我们要留哪个,需要我们手动操作:

我们可以直接查看readme.txt的内容:

Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. <<<<<<< HEAD Creating a new branch is quick & simple. 提示俩个我们有冲突 ======= Creating a new branch is quick AND simple. >>>>>>> feature1

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:

Creating a new branch is quick and simple. 注意and是小写

再提交:

git add readme.txt git commit -m "conflict fixed" [master cf810e4] conflict fixed

分支管理策略

分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:

[图片上传失败...(image-e03041-1584625294016)]

小结

Git分支十分强大,在团队开发中应该充分应用。

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

多人协作

要查看远程库的信息,用git remote:

$ git remote origin

或者,用git remote -v显示更详细的信息:

$ git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push)

推送分支

pull 抓取远程文件

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

如果要推送其他分支,比如dev,就改成:

$ git push origin dev

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

  • master分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

小结:

  • 查看远程库信息,使用git remote -v;
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

忽略特殊文件

创建一个文件。后缀名事gitigonore

[图片上传失败...(image-57089b-1584625294016)]

把不需要的文件名放在这个文件里

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

推荐阅读更多精彩内容

  • 一、本地建立Git 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: $ mkdir learn...
    alex_zj阅读 516评论 0 0
  • (git下载地址) Git学习地址 http://www.yiibai.com/git/git_basic_con...
    52Alice阅读 434评论 0 1
  • 一、安装git linux上安装git 首先输入git,检测系统是否安装git 如果是Debian或者Ubuntu...
    Lhuo阅读 298评论 0 1
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,384评论 0 7
  • 题外话 以前不了解git的时候,总感觉git是非常高大上的东西,很长一段时间都没有接触上。但后来用了一段时间后,发...
    _星辰夜风阅读 504评论 0 1