git基本使用教程

题外话

以前不了解git的时候,总感觉git是非常高大上的东西,很长一段时间都没有接触上。但后来用了一段时间后,发现git这个东西真是厉害啊,在厉害的同时它还这么地"接地气",既能让线上线下同步仓库,多条分支工作,也能随时fork别人的优秀的项目来参考学习,真是受用无比。我这人忘性比较高,为方便记忆,特意记录下git 的基本使用。(ps:以下部分截图来自廖雪峰老师的git教程)

正文笔记(以下内容针对windows平台)

首先安装git可以去git官网下载git for windows.

安装好git后在任意一个目录下右键选择 git bash here

这里写图片描述

配置git的身份

就是如果你想克隆服务器上的仓库,你得告诉别人你的身份

git config --global user.name <your_name>
git config  --global user.email <your_email>

创建版本库

//learngit就是仓库所在地方,你可以设为任意名字
mkdir learngit
cd learngit

空仓库初始化

git init

[站外图片上传中...(image-ae70c0-1515859609638)]

这句命令会初始化空仓库learngit,cd 进入 learngit,会发现多了个.git目录,这个目录是git用来跟踪版本库的,一般不要去碰它。

一般仓库下都会有个README.md文件用来对仓库进行必要的说明。


这里写图片描述

注意:在编辑README.md时不要用windows 自带的记事本保存utf-8编码的文件时会自动在文件头部添加Oxefbbbf(十六进制)的字符。替代记事本:NotePad++,EditPlus,sublime Text3 等。

添加文件到git仓库

//告诉git这是个要放到仓库的文件,放在暂存区
git add README.md
/**
*提交到git仓库,-m 后面是指该次提交的说明信息
*提交成功后会返回提示:多少个文件被提交,插入了多少行内容
*/
git commit -m "update README.md"

版本回退

git log 命令会显示从最近到最久的提交日志,如果嫌输出信息太多,可以在后面加上 --pretty=online参数

[站外图片上传中...(image-75ce58-1515859609638)]

git reset –-hard HEAD^ //HEAD表示当前版本,表示回退到上一个版本,^回退到上两个版本,以此类推,太多数的话可以写HEAD~100

也可以根据commit id号回退到特定的版本,没必要写全,写几个前面的数字就可以,git会自动寻找。

git reset --hard 3628164

现在总结一下:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hardcommit_id
  • 穿梭前,用 git log 可以查看提交历史信息,以便确定要回退到那个版本。
  • 要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的那个版本。

工作区与暂存区

工作区就是在电脑中能看到的目录,比如learngit文件夹就是一个工作区。工作区里有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

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

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,此一次性提交到暂存区的所有修改。

比如,你对README.txt(或者README.md)进行修改一下,暂存区就会变成这样:

这里写图片描述

一旦提交后,如果你没有对工作区做任何修改,那么工作区就是“”干净的“”!nothing to commit.

这里写图片描述

小结:

  • 暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。

管理修改

为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。每次修改,如果不 add 到暂存区,那就不会加到 commit 中。命令:

git add <something>
git commit -m "description"

撤销修改

git checkout --README.txt //可以撤销最近一次的修改

有两种情况:

  1. README.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态。

  2. README.txt已经添加到暂存区后,又作了修改,现在,撤销修改就会回到添加到暂存区后的状态。

删除文件

eg:

git rm test.txt
git commit -m "delete test.txt"

如果是删除了的话,可以用 git checkout -- test.txt 来恢复文件。

远程仓库

Github 专门提供 git 仓库的托管服务 。

由于本地 git 仓库和 github 仓库之间的传输是通过 SSH 设置的,因此,需要设置一下 。

1.创建 SSH KEY

ssh-keygen -t rsa -C youremail@example.com

为什么 github 需要 SSH KEY 呢? 因为 github 需要识别出你推送的提交时你推送的,而不是别人冒充的,而 git 支持 SSH 协议,所以, github 只要知道了你的公钥,就可以确认只有你自己才能推送。

2.添加SSH KEY 到 github 或 coding net

github

这里写图片描述

coding net

这里写图片描述

添加远程仓库

1.将本地的内容推送关联到 github 仓库

git remote add origin git@github.com:your_usename/repos_name.git

注意账户名不要写错,添加后,远程库的名字就是origin,这是 git 的默认叫法,也可以改成别的。

2.将本地库的所有内容推送到远程库上。

把本地库的内容推送到远程,用 git push 命令,实际上是把本地的 master 推送到远程仓库。

git push -u origin master

如果远程仓库是空的,第一次推送 master 分支时,加上了 -u 参数, git 不但会把本地的 master 分支内容推送的远程到远程新的 master 分支,还会把本地的 master 分支 和远程的 master 分支关联起来,在以后的推送或者拉取时间时就可以简化命令。

若要删除远程仓库的关联,可以用命令: git remote rm hello-world.git

这里写图片描述

从远程仓库克隆

git clone git@github.com:your_username/repos_name.git

小结:

  • 要克隆一个仓库,首先必须知道仓库的地址,然后使用 git clone 命令克隆。
  • git 支持多种协议,包括 https ,但通过 ssh 支持的原生 git 协议才最快

分支管理

分支可以创建属于个人的工作空间,开发完毕后再一次性合并到原来的分支上,这样安全又不影响别人工作。

创建与合并分支

在 git 中, master 分支也叫主分支,HEAD 严格来说不是指向提交,而是指向 master

首先,创建 dev 分支,然后切换到 dev 分支
git checkout -b dev ,这个命令相当于:

git branch dev
git checkout dev

可以用 git branch 来查看分支,当前分支前面会出现一个"*"号;

git checkout dev 切换分支,回到 master 分支

合并分支: git merge dev ,把 dev 分支修改的内容合并到 master 分支上。

合并完成后,便可以放心删除 dev 分支。

这里写图片描述

解决冲突

假设这种情况:新建一个分支 future,修改 readme.txt 内容后提交;切换回 master 分支又修改 readme.txt 内容后提交;

[站外图片上传中...(image-d52db4-1515859609639)]

这种情况下,git 无法执行 "快速合并",只能试图把各自修改合并起来 ,但这种合并可能会有冲突。

这里写图片描述

果然冲突了,git 告诉我们, readme.txt 文件存在冲突,必须手动解决再提交, git status 可查看冲突的文件。

只能手动修改,git用 <<<<<<<,=======,>>>>>>标记处不同分支的内容。修改保存再提交。

这里写图片描述

可见冲突解决了。

小结:

  • 当 git 无法自动合并分支时,就必须首先解决冲突,解决冲突后,再提交,合并完成。用 git log
    --graph命令可以看到分支合并图。

分支管理策略

一般合并分支时,git 会用 fast forward模式,这种模式下,删除分之后会丢掉分支的信息,如果要强制禁用 Fast Forward 模式,git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m "merge with no-ff" dev

因为这个合并要创建一个新的 commit ,所以加上 -m 参数,把 commit 描述写进去。合并用 git log 查看操作信息。

git log --graph --pretty=online --abbrev-commit 

[站外图片上传中...(image-d52d31-1515859609639)]

Bug分支

软件开发过程中遇到 bug 时可以新建一个分支来修复,修复完成后,合并分支,然后将临时分支删除。

那现场的工作怎么办?git 提供了一个 stash 功能,可以把当前工作现场储藏起来,等以后恢复现场后继续工作。

git stash

修复 bug 后,返回之前的分支

git stash list

查看之前的工作现场。
恢复现场:

git stash apply
git stash drop
//或
git stash pop

推送分支

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

git push origin master
//或
git push origin dev

bug 分支只用于在本地修复 bug ,就没必要推到远程仓库了。

END

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

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,647评论 4 54
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,626评论 9 163
  • 滨戏 婊子无情,戏子无义 因为她们都是在演戏 呻吟和哭泣是职业需要 不要被伪装蒙敝 人生的舞台上大家 都在演戏 也...
    5988阅读 206评论 0 0
  • 片头:他不敢望向繁华的都市。孤独与落寞充斥他的双眼,但他明...
    三秋予迟阅读 478评论 0 2
  • 许先生的立夏书 1. 在夏快要过去的尾声里。 我婉拒了前公司表示挽留我的提议,找了一家不甚起眼的报社做文字编辑。小...
    谷谷阅读 3,990评论 101 91