Git 入门

维基百科:git 是一个分散式版本控制软体,由Linus Torvalds创作,于2005年以GPL推出
开发动力来自对Linux核心采用来自BitKeeper的付费版本控制软件的不合,尽管BitKeeper母公司授权Linux社区免费使用该软件。其他的开源集中式版本控制系统如CVS/SVN则被Linus所不喜(集中式,速度慢且必须联网使用),于是Linus用了10天时间用C编写了分布式版本控制Git软件,其特点是不需服务器端软体,就可运行版本控制且速度很快,其中最出色的功能是合并追踪(merge tracing)。

简介

关于Git 的详细介绍可参见廖雪峰老师的Git介绍,有详细的比喻。

简要来说就是通过分布式版本控制,每个人电脑上都有一个完整的git版本库,自动记录每次文件及目录的改动,并提供协作编辑的能力(通过服务器实现修改的交换),可追踪多个版本的开发及维护工作,相比CVS/SVN等SCM(Software Configuration Managemen) 工具,有着cheap local branching, convenient staging areas, multiple workflows等优点,且不管是小项目还是大项目,都有很快的速度和极高的效率。

安装

从官网下载安装最新版本,旧版本在Github上可以找到。

使用

  1. git init
    在当前目录下创建版本库(.git目录下), git将用该目录来跟踪管理仓库(repository),该命令会创立唯一的master分支.
  2. git add sample.txt
    将文件sample添加到暂存区(stage或index),以便后续提交到分支中.
    每次修改后,必须用git add命令将修改添加到暂存区再提交.
    git commit -m "wrote a sample file"
    将文件提交到当前分支进行保存,-m后表示提交说明.
    可多次add不同文件,最后提交一次,类似选中多个后提交.
  3. git status
    掌握仓库当前的状态, 想了解文本文件详细的变化可用以下命令:
    git diff sample.txt
    列出文本文件所修改的地方,确认无误后,重新添加提交
    git add sample.txt
    git commit -m "modify some words"
    以上即是对文本修改后的重新提交至仓库,生成新版本
  4. git log
    显示从最近到最远的commit历史,将输出commit_id及提交说明。其中commit_id是由SHA-1校验和作为版本id.
    命令末尾可添加--pretty=oneline,输出简要的id及修改信息.
  5. git relog
    查看命令历史,可用于确定要回到未来的哪个版本.
  6. git reset --hard commit_id
    git通过HEAD指针指向commit的不同版本的Master分支, HEAD^可表示上个版本分支,类似HEAD^^HEAD~**,回退到上上个版本或往上100个版本.
  7. git checkout -- file.txt
    撤销对file的修改,回到上一次commit的状态,用版本库里的替换工作区的。
    checkout -b xxx 表示切换到其他分支
    小结:
    场景1:改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

  1. git remote add origin git@server-name:path/repo-name.git
    将本地仓库关联到一个远程仓库
    git remote -v将用于查看远程分支的信息.
  2. git push -u origin master
    将本地master分支与远程的master分支连接,并将本地所有提交推送到远程
    以上两步通常是远程库为空,将本地库推送到远程的步骤
  3. git clone git@github.com:repo-name.git
    从远程复制仓库到本地,clone仅仅将复制master分支。若要对其他分支进行操作,需要建立与远程分支一致的分支,例如
    git checkout -b dev origin/dev,后续pull,push进行推送即
    git branch --set-upstream-to=origin/<branch> dev(链接本地与origin)
    git pull (注:若有冲突需要先解决冲突再commit后进行push)
    git push origin/dev
    注:从Github上获取clone的地址。
    地址有两种,一种是SSH,一种HTTPS
    HTTPS除了速度慢,每次推送都必须输入口令,在某些只开放HTTP端口的公司内部就无法使用ssh协议而只能用https,而通过SSH支持的原生Git协议速度最快。
  4. git branch
    用于查看当前的分支
    git branch name
    创建name分支
  5. git merge branchA
    将指定branchA分支合并到当前所在分支
    合并有Fast-forward模式,即将当前分支指针指向指向指定的提交,将不保留分支信息,即看不出进行过合并.
    若通过--no-ff禁用Fast-forward模式,Git将通过新建commit进行提交以保留分支信息,即git merge --no-ff -m "merge with no-off" A
  6. git branch -d branchA
    删除branchA
    git branch -D <name>
    将强制删除,适用于删除一个没有被合并过的分支
  7. git log --graph
    显示分支合并图
    小结:
    通常实际中,master分支十分稳定,通过派生出的dev分支进行开发工作,每个人在自己的dev分支上进行开发新功能,再将新功能合并到dev分支上,大版本更新时将dev分支合并到master分支,在master分支上发布新的大版本.
  8. git stash
    将当前工作状态保存后留待后续使用,提供干净的环境,以便处理新的紧急情况
  9. git stash list
    列出保存的工作状态
  10. git stash pop or git stash apply git stash drop
    恢复有两种方式,pop将恢复并删除stash,apply恢复但不删除而通过drop进行删除
  11. git rebase
    将本地未push的分支提交历史整理为直线,使我们查看历史提交更容易,缺点是本地的分叉提交被修改过。
  12. git tag v1.0
    给当前分支取标签,便于记忆及使用,默认是在当前分支最新提交上commit上打标签,即有该commit的分支均可看到该标签
    git tag v0.9 commit_id
    对某个commit打标签
    git show tag_name
    显示标签信息
    git tag
    显示所有的标签
    git tag -d tag_name
    从本地删除某个标签,然后从远程删除git push origin :refs/tags/tag_name
    git push origin tag_name
    推送某个标签到远程, push origin --tags将推送所有未推送过的标签
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容