Git简要教程

Simple Git Course 简要Git教程

同时你也可以在Github上看到这篇文章Git简要教程Github

Git是什么

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git与SVN的区别

GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。
Git 与 SVN 区别点:

  1. GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  2. GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
  3. GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
  4. GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
  5. GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git详细教程以及命令行查询

你可以去github上fork一份:Git详细教程&命令行查询Github
同样你也可以去CSDN博客:Git详细教程&命令行查询CSDN
(Github上格式看着舒服些。)
这一篇教程基本上涵盖了git的所有操作,还有详细的小白教程,或者大神突然忘了某个命令怎么玩可以当文档使使。

Git工作流说明

git工作流图

下面我们根据这幅图来举两个例子:

栗子1

假设现在已经有了一个成熟的项目托管在github上,github就是我们的远程仓库,假设是这个项目 https://github.com/onlynight/Proxy 。项目的所有者邀请你一起参与项目的开发与维护,将你添加为协作伙伴。

1.clone远程仓库

首先,你需要讲远程仓库的代码clone到本地。

$ git clone https://www.github.com/onlynight/Proxy

会更具实际的情况要求你输入Github用户名和密码,执行完成以上命令行出现以下类似代码就证明克隆成功了:

Cloning into 'Proxy'...
remote: Counting objects: 54, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 54 (delta 15), reused 51 (delta 12), pack-reused 0
Unpacking objects: 100% (54/54), done.
Checking connectivity... done.

2.修改代码,提交本地仓库

然后,确定你要修改代码的分支,你可以通过branch命令查看分支,切换分支,比如我们要修改master分支:

查看当前所有分支:

$ git branch
* master

比如我们要修改develop分支我们通过checkout命令切换分支(注意切换份之前必须将当前分支的修改全部提交或者保存到stage中去)

$ git checkout "develop"

然后,我们会根据实际任务修改代码,假设我们新建了一个test.txt文件在项目的根目录并且修改README.md的标题为"Proxy"。接下来我们要做的就是先把新建的文件添加到缓存,然后将缓存提交到本地仓库。

修改的文件添加到缓存:

$ git add test.txt README.md

或者将工作目录下所有的新添加的文件都添加到缓存:

$ git add .

提交缓存到本地仓库:

$ git commit -m "添加test.txt 修改README.md标题"
[master b8b4924] 添加test.txt 修改README.md标题
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt

引号中的文本即为本次提交的描述。

这时候你的代码就正确提交到了你的本地仓库了,但是远程仓库还没有。我们可以使用push命令将代码直接提交到远程仓库,但是这里存在一个问题,如果你和你的协作伙伴同时添加了一行代码到同一个函数的同一行,代码是顺序执行的,但是要求你的代码先执行才行,而在你提交之前你的协作伙伴先提交了,如果这时候直接push的话git很有可能将冲突的代码自动合并,就会对代码造成损坏,所以在你push之前首先将远程仓库的代码pull下来,这时候如果有冲突就可以人工解决冲突,就不会出现上面的问题啦。

3.1推送代码到远程仓库(无冲突)

说这么一大堆废话其实想要说的就是,在你提交到本地仓库以后准备push之前最好先pull一次远程仓库代码:

$ git pull
Already up-to-date.

出现以上的情况就说明你的本地仓库已经是最新的代码啦,这时候你就可以放心的提交远程仓库有啦:

$ git push origin master
Username for 'https://github.com': onlynight
Password for 'https://onlynight@github.com':
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 315 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
To https://www.github.com/onlynight/Proxy
   82f428e..b8b4924  master -> master

上面我们是通过https clone的git仓库,所以push的时候需要输入用户名和密码(每次push都需要,如果觉得麻烦你可以配置下ssh,ssh设置密码就不用每次都输入用户名和密码啦,详细配置方法查看我的另外一篇教程Git详细教程&命令行查询Github

第二个参数origin默认origin。
第三个参数master表示你要推送的分支。

3.2推送代码到远程仓库(有冲突)

为了模拟冲突我们去github上修改README.md的标题为"Proxy Pattern",这个修改假设值你的协作伙伴修改的,然后我们再修改RAEDME.md的标题为"Proxy1"。这时候就模拟了你和你的协作伙伴同时修改同一个地方的情况了,这样就会有冲突。修改完成以后先提交本地仓库。然后将远程仓库代码pull到本地:

$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://www.github.com/onlynight/Proxy
   122aa0e..f7eac81  master     -> origin/master
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

查看以上信息可知git自动合并"README.md"失败,需要手动合并。打开README.md文件,搜索"<<<<<<< HEAD"就可以快速定位到冲突的地方:

<<<<<<< HEAD
Proxy1
=======
Proxy Pattern
>>>>>>> f7eac81a3a3e981f0ef7f3e1532c309c9c893981

等号两侧的即时冲突的代码,经过你和你的协作伙伴讨论决定使用等号以下的作为最终结果,然后你需要修改这一段冲突的文本为:

Proxy Pattern

然后再次将你的修改缓存到本地仓库:

$ git add README.md
$ git commit -m "merge README.md"
[master 7c6909f] merge README.md

最后,再将所有的改动push到远程仓库就完成啦:

$ git push origin master
Username for 'https://github.com': onlynight
Password for 'https://onlynight@github.com':
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 607 bytes | 0 bytes/s, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 2 local objects.
To https://www.github.com/onlynight/Proxy
   f7eac81..7c6909f  master -> master

栗子2

你想要自己新建一个项目,然后托管到远程git仓库上分享给大家。

1.初始化本地仓库

如果你已经有项目那么就在你的项目目录下完成以下操作,如果没有新建一个项目目录:

$ git init
Initialized empty Git repository in C:/Users/lion/Desktop/MyFirstGitProj/.git/
# C:/Users/lion/Desktop/MyFirstGitProj/ 就是我的项目路径

这样本地仓库就新建完成啦。

然后我们为项目添加一个README.md文件:

$ touch README.md

这时候我们可以查看以下本地git的状态:

$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        README.md

nothing added to commit but untracked files present (use "git add" to track)

上面的信息说我们有一个文件没有添加到缓存中去。

2.将项目中的文件提交到本地仓库

然后将项目目录下所有的文件添加到缓存中去:

$ git add .

这时候我们再次查看以下本地git的状态:

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   README.md

上面的这个状态就是已提交缓存,现在你可以将缓存中的文件移除,或者将缓存提交到本地仓库。

将缓存提交到本地仓库:

$ git commit -m "inital commit"
[master (root-commit) abff941] inital commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

这样我们的本地仓库就完成啦。

3.新建远程仓库

这里我们使用github作为远程托管仓库,你需要先去https://www.github.com注册并登陆账号。
之后登录后点击" New repository " 如下图所示:

这里写图片描述

之后在在Repository name 填入 GitAdd(远程仓库名) ,description中填写描述"git add test",其他保持默认设置,点击"Create repository"按钮,就成功地创建了一个新的Git仓库:

这里写图片描述

创建成功后,显示如下信息:

这里写图片描述

4.将本地仓库提交到远程仓库

首先,将本地仓库与远程仓库连接:

$ git remote add origin https://github.com/onlynight/MyFirstGitProj

第三个参数origin为该远程仓库的别名,默认为origin
第四个参数就是远程仓库的url

然后将本地仓库push到远程仓库:

$ git push origin master
Username for 'https://github.com': onlynight
Password for 'https://onlynight@github.com':
Counting objects: 3, done.
Writing objects: 100% (3/3), 210 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/onlynight/MyFirstGitProj
 * [new branch]      master -> master

第二个参数是说要push到哪个远程仓库
第三个参数是说要push到远程仓库的哪个分支,默认为master

以上就完成了栗子2的全部内容,你现在就可以把你的项目 https://github.com/onlynight/MyFirstGitProj 分享给你的小伙伴啦。

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

推荐阅读更多精彩内容

  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 3,920评论 3 27
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,412评论 9 163
  • 某日和亚荣同学聊天,亚荣同学其人尤爱花花草草,每次讨论起来总是抑制不住的喜悦以及永远的自说自话,并会毫不委婉...
    沐梓芢卿阅读 174评论 0 0
  • 望一片森林怀念春色拜托山河熄灭尘色
    木卯丁阅读 88评论 0 1
  • 我们在写IOS程序时,有时候需要用到第三方在类库,但有的第三方类库是版本比较早它不支持ARC或者版本比较新不支持M...
    毛茸茸的我总念成橡皮虾阅读 426评论 1 1