git的使用教程

一、简介

1.版本控制系统

cvs、svn: 集中式,需要中央服务器支持
git: 分布式,中央服务器辅助交换,不必须。(作者:linus)
所有的版本控制系统只能跟踪文本文件的改动,比如TXT文件,网页,所有程序代码等等,图片,视频无法跟踪其文件变化。
强烈建议所有文本使用标准的UTF-8编码,所有语言使用一种编码,没有冲突,又被所有平台支持。
注意:千万不要使用window自带的记事本编辑任何文件,原因自行百度。

2.安装

download from https://git-scm.com/downloads
全局配置

git config --global user.name "Your Name"
git config --global user.email "email@example.com"


二、创建仓库

使用git合作开发项目,首先得新建一个git的公共仓库即远程仓库。

1.初始化一个空的git仓库

mkdir test
cd test
git init //初始化

tips:
显示Initialized empty Git repository in D:/test/.git/即初始化成功。
add多个文件时,可以多次add,也可以git add file1.txt file2.txt,这样更为方便。
当前目录多了一个.git的,此目录是用来跟踪版本管理库的,注意不要动此文件夹。

2.向仓库提交文件

echo "our first git repository">>file //新建一个供提交的文件
git add file //将文件信息添加到git仓库的索引库中
git commit -m "the first file to commit" //提交到仓库中

tips:
显示[master (root-commit) 0c72641] the first file to commit
7 1 files changed, 1 insertions(+), 0 deletions(-)
8 create mode 100644 file
-m后为输入的是本次提交的说明,最好用意义。

3.一些常用命令

git status命令可以让我们时刻掌握仓库当前的状态。现在我们来修改之前提交的test文件,之后运行git status,查看结果:

 D:\test>git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
      modified:   test.txt
no changes added to commit (use "git add" and/or "git commit -a")

git diff命令可以帮助查看文件距上次修改了什么内容,运行git diff test.txt,查看结果:

  D:\testGit>git diff file
  diff --git a/file b/file
  index 1928b89..1207063 100644
  --- a/file
  +++ b/file
  @@ -1 +1,5 @@
  -"our first git repository"  //删除的内容
  +jfhsfiiisnjchdskgsssssssssssssss  //增加的内容

git log查看提交日志(作者、修改时间、修改内容)。如果嫌显示的日志太多,可以加上参数--pretty oneline
git reset --hard HEAD^^回退到上一次commit的版本,需要注意是 HEAD后面有两个^号,如果要回退到上上一个版本则要使用四个 ^号,这里本人亲测,可能版本不同对应的个数不同,仅供参考!当然如果回到上一个版本有想回到当前版本,同样使用git reset --hard commitId这里commitId为当前版本的id,可以通过git reflog命令查看之前每次提交生成的id。

4.工作区和暂存区的概念

为了便于大家理解,这里引入一张图:

0.jpg

打开本地仓库的根目录即为工作区,而前面提到的.git文件夹为git的版本,版本库最重要的就是称为stage的暂存区,还有git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。由此不难理解为什么可以通过HEAD指针实现版本之间来回穿梭!
理解上面版本库和工作区的概念,就可以理解下面一些指令,

  • 如果想要查看工作区和版本库里面最新版本的区别,可以使用git diff HEAD
  • git checkout命令是将版本库里的最新版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原。
  • git rm test.txt命令+git commit是从版本库里删除test.txt文件。

5.远程仓库

以上已经学了git的基本操作,学会这些远远不够,下面介绍git真正强大的地方。实际工作情况往往是这样,一台电脑充当服务器的角色,其他人都从这个服务器仓库里克隆一份到自己的电脑,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。

添加远程仓库
  • 创建SSH Key。在用户的主目录下查看有没有.ssh目录,如果有打开查看是否有id_rsa和id_rsa.pub这两个文件,没有则需要创建SSH Key:
    ssh-key -t rsa -C 'youremail@example.com'
    输入自己的邮箱一路enter,可自己设置密码,如果一切顺利可以在.ssh目录下找到id_rsa和id_rsa.pub两个文件
  • 登录github,打开"Account settings","SSH Keys"页面,将id_rsa.pub文件内容添加到页面中,填上任意标题,点击添加即可。
  • 在github上创建一个仓库test,此时仓库还是空的,现在我们在本地仓库目录运行如下命令:
    git remote add origin git@github.com:huangzhongren/tes.git
    huangzhongren是对应github的账户名,添加后,远程库的名字就是 origin
  • 推送内容,执行下面命令:
    git push -u origin master
    把本地库内容推送到远程,用 git push命令,实际上是把当前分支master推送到远程。
    由于远程库是空的,我们第一次推送master分支时,加上-u参数,git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
从远程库克隆

准备好远程仓库后执行:
git clone git@github.com:huangzhongren/test.git
这样可以克隆一个本地库,然后可以修改本地仓库。

6.分支管理

  1. 查看分支:git branch(本地分支)
    • 查看所有分支: git branch -a
    • 查看远程分支: git branch -r
  2. 创建分支:git branch <name>
  3. 切换分支:git checkout <name>
  4. 创建+切换分支:git checkout -b <name>
  5. 合并某分支到当前分支:git merge <name>
  6. 删除分支:git branch -d <name>
    通常我们在合作开发时,往往不是在主分支master上直接操作,master分支一般都是用来发布的稳定的分支,干活都在dev分支上,到最后版本发布时在进行合并!当然你也可以创建其他的分支,例如bug修改分支,feature功能添加分支,也可以创建自己隐藏的分支。
    在测试提出bug修改需求时,而你又不想把手中没有完成时开发提交,这时你就可以使用git stash命令将当前的‘工作现场’隐藏起来,然后切换到需要修改bug的分支例如master分株,创建并切换到一个bug分支issue1,修改之后提交,在切换到master分支,使用git merge -no-ff -m 'merge bug fix' issue1合并bug,此时master的分支就被修改了,如果想回到之前的工作现场,使用git stash pop命令恢复之前的工作现场。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,639评论 4 54
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,615评论 9 163
  • 小木在今日头条的第一篇文章是4月15日,在5月12日终于等来过新手期的通知,这期间看到有网友抱怨头条新手期很难过,...
    小木杂评阅读 366评论 0 1
  • 寒假离校之前,曾经在学校做了很多的计划,有看书学习的,还有出去和同学一起玩耍的,更想着,趁着这个假期,在我生长的城...
    Yive_Zhang张凶残阅读 194评论 0 0
  • 若如秋风 我愿化作一片孤叶 挽着你飘落一生一世 若如细雨 我愿化作一柄油纸伞 守着你游荡大街小巷 懵懂中 哭着 笑...
    凝潇大男孩阅读 251评论 0 3