git入门指北


git是分布式版本控制系统,啥是分布式的呢,就是每一个用户的主机上都有一个版本库,可以在本地进行版本管理。如果需要多人合作的时候,就再通过中央服务器进行版本交换。和集中式的版本控制的区别就是,集中式的版本管理是只在远程,每一次commit都必须联网,这就有网络的时延大大滴,而且当中央服务器挂掉的时候所有人都挂了,因为完整仓库只存在于服务器。

git版本库
版本库可以理解为Git仓库,这个目录下的所有文件都会被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还原。

命令:
在一个目录下,git init就可以把此目录变成Git可以管理的目录。

git工作目录

这里有几个概念:
工作区:电脑里能看到的目录,嗯,就是单纯的目录
版本库(Repository):Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
把文件往Git版本库里添加的时候,是分两步执行的:

  • 第一步是用git add file把文件添加进去,实际上就是把文件修改添加到暂存区;
    同理rm 是删除,git rm file 是将文件在暂存区内删除

  • 第二步是用git commit -m "commit message"提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

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

如果有一些文件没有add到暂存区,那么这些文件也是commit不上去的哦~

但是难免会犯错

  • Case1:当改乱了工作区的修改,想直接丢弃工作区的修改,回退到clean的状态,用命令git checkout -- file
  • Case2:改乱了工作区的修改,并且add到暂存区了。首先,将暂存区的内容回退到add前的版本git reset HEAD file,其次丢弃工作区的修改git checkout -- file
  • Case3:已经提交(add)了修改至暂存区,并且commit到版本库了,使用git reset --hard commit_id回退到commit_id的版本。commit_id是怎样获得的呢,通过git log,git log --pretty=online,git reflog来查看。
    git loggit reflog的区别是,git log当回退到某个版本时,此版本之后的记录都自动抹去了。git reflog是提交的完整的命令历史,回退到某个版本,仍然可以查到位于此版本号以后的版本号。

远程仓库
关联远程仓库:git remote add origin git@server-name:path/repo-name.git
关联后,使用命令git push -u origin master第一次推送master分支的所有内容
以后每次本地提交后,都可以使用git push origin master推送最新修改
使用git clone从远程仓库克隆至本地呀

git创建分支

git branch 查看当前分支
git branch dev 创建dev分支
git checkout dev 切换至dev分支
git checkout -b dev  创建并切换至dev分支
git merge xxx 用于将指定分支的工作成果合并到当前分支
git branch -d branchname

git解决冲突
当两个分支同时对一个文件进行修改时,merge时会发生冲突,解决办法是git status查看冲突文件,然后查看文件内容,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容。
例如:

<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

然后手动修改冲突的内容,解决冲突。

git log可以查看分支历史。git log --graph命令可以看到分支合并图

git 分支管理策略
一般情况下,合并分支是采用的fast-forward,即当前分支与要合并的分支指针指向同一处。

不使用fast-forward,命令为git merge --no-off dev,两个分支的指针是指向不同位置的。

bug分支
存在的问题:当前工作区在开发新功能,但是线上出了问题急需解决,需要一个干净的工作区。
git提供了一个stash功能,git stash可以把当前工作现场储藏起来,拉过来一个干净的工作现场,然后从master分支拉出来一个新的分支,修复完成后,切换到master分支并完成合并。

恢复工作现场时:
查看工作现场:git stash list
恢复工作现场:git stash apply
删除工作现场:git stash drop
恢复&删除工作现场:git stash pop
如果多次stash,恢复的时候先用git stash list查看,然后恢复指定的stash:git stash apply stash@{0}

开发新分支
开发一个新feature,最好新建一个分支
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

多人合作
多人协作的工作模式通常是这样:

  • 首先,可以试图用git push origin branch-name推送自己的修改;
  • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  • 如果合并有冲突,则解决冲突,并在本地提交;
  • 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
  • 查看远程库信息,使用git remote -v

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

标签
Git标签是版本库的快照,其实是指向某个Commit的指针,是以一种容易记忆的方式设定的,一般可指定为版本号vx.x

打标签git tag v1.0
正常情况下,标签是打在此分支的最新提交的commit上的

git tag 查看标签
git show tagname 查看标签信息
git tag commit_id 为commit_id打标签
git tag -a v0.1 -m "version 0.1 released" 3628164 创建带有说明的标签,-a指定标签名,-m指定说明文字
git push origin v0.1 推送标签到远程
git push origin --tags 一次性推送尚未推送到远程的本地标签
git tag -d v0.1 在本地删除标签
git push origin :refs/tags/v0.9 删除远程的标签

参考文献
Git教程

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

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,458评论 1 26
  • 【视频: http://www.iqiyi.com/v_19rrlho3ak.html】 我一向不说脏话,但是,也...
    海伦_Helen阅读 1,249评论 0 1
  • 林帅摘下耳机,退出游戏,晃了晃被枪声震了一下午的脑袋,靠在椅子上,愣了会儿。 瞥了眼右下角的时间,六点。 该吃饭了...
    河米阅读 501评论 3 4
  • 今天依旧是我喜欢的雨天,虽然刚才有点闷闷的,但现在正吹来细细的凉风,让人心里感觉好畅快。 不知...
    IDu21阅读 300评论 0 0
  • 手起刀落,快意江湖。 作为一个刀客,最重要的是刀。 一把好刀。 当十三妹直接了断地说想我买这把刀的时候我是惊讶的。...
    lichun阅读 251评论 0 0