Git教程(廖雪峰版本)

Git命令大全
W3C Git常用命令

在这里插入图片描述

Git简介

1.集中式版本(Git)和分布式版本(SVN)
1)集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。
2)那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
3)和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
4)在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
2.安装完成后,还需要最后一步设置,在命令行输入:

git config --global user.name "填写你的名字"         //在git中配置名字
git config --global user.email "填写你github的邮箱地址"  //在git中配置邮箱
git config --global user.name  //使用这个命令查看git配置的名字
git config --global user.email //使用这个命令查看git配置的邮箱

1)因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
2)注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

3.创建版本库
1)初始化一个Git仓库,使用git init命令。
2)添加文件到Git仓库,分两步:
    使用命令git add ,注意,可反复多次使用,添加多个文件;
    使用命令git commit -m ,完成。

Git运用

1.时光穿梭机
1)要随时掌握工作区的状态,使用git status命令。
2)如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
2.版本回退
1)HEAD指向的版本就是当前版本,上一个版本就是HEAD^, 上上一个版本就是HEAD^^,100个版本HEAD~100。因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id,这个指令可以从回退过去,回退过去想到现在的版本只要找到id即可
2)穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
3.工作区和暂存区
image.png
1)版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
2)我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
3)暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。
4.管理修改
流程:第一次修改 -> git add -> 第二次修改 -> git commit
1)我们前面讲了,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了, 也就是第一次的修改被提交了,第二次的修改不会被提交。
2)Git是如何跟踪修改的?每次修改,如果不用git add到暂存区,那就不会加入到commit中。
5.撤销修改
场景1: 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。
场景2: 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
场景3: 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考[版本回退]一节,不过前提是没有推送到远程库。
6.删除文件
1)命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
2)有两种情况:
一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
3)git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!

远程仓库

自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:
1)创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rs和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

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

2)你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
3)如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:
1)登陆GitHub,打开“Account settings”,“SSH Keys”页面:
2)然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
3)为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
4)当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
1.添加远程仓库
1)要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
2)关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
3)此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
4)分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!
2.从远程仓库克隆
1)克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。
2)Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快,git://使用ssh。

分支管理

image.png
1)有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样既安全,又不影响别人工作。
2)其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。
3)Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。
1.创建于合并分支
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
2.解决冲突
1)当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
2)解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
3)用git log --graph命令可以看到分支合并图。
3.分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
1)首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
2)那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
3)你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
image.png
4)合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
4.Bug分支
1)修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
2)当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
5.Feature分支
1)开发一个新feature,最好新建一个分支;
2)如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
6.多人协作
推送分支:
1)并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
2)master分支是主分支,因此要时刻与远程同步;
3)dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
4)bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
5)feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!**

多人协作的工作模式通常是这样:
1)首先,可以试图用git push origin 推送自己的修改;
2)如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3)如果合并有冲突,则解决冲突,并在本地提交;
4)没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
5)如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
总结:
1)查看远程库信息,使用git remote -v;
2)本地新建的分支如果不推送到远程,对其他人就是不可见的;
3)从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
4)在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
5)建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
6)从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
7.Rebase
1)多人在同一个分支上协作时,很容易出现冲突。即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功。
2)rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。
3)rebase操作可以把本地未push的分叉提交历史整理成直线;
4)rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

标签管理

定义:
“请把上周一的那个版本打包发布,commit号是6a5819e…” “ >> 一串乱七八糟的数字不好找!”
“请把上周一的那个版本打包发布,版本号是v1.2” >> “好的,按照tag v1.2查找commit就行!”
所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
1.创建标签
在Git中打标签非常简单,首先,切换到需要打标签的分支上;然后,敲命令git tag 就可以打一个新标签。
1)命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
2)命令git tag -a -m "blablabla…"可以指定标签信息;
3)命令git tag可以查看所有标签。
2.操作标签
1)命令git push origin 可以推送一个本地标签;
2)命令git push origin --tags可以推送全部未推送过的本地标签;
3)命令git tag -d 可以删除一个本地标签;
4)命令git push origin :refs/tags/可以删除一个远程标签。

GitHub

1)在GitHub上,可以任意Fork开源仓库;
2)自己拥有Fork后的仓库的读写权限;
3)可以推送pull request给官方仓库来贡献代码。
这里讲解一下pull request:
当你想更正别人仓库里的错误时,要走一个流程:
1)先 fork 别人的仓库,相当于拷贝一份,相信我,不会有人直接让你改修原仓库的
2)clone 到本地分支,做一些 bug fix
3)发起 pull request 给原仓库,让他看到你修改的 bug
4)原仓库 review 这个 bug,如果是正确的话,就会 merge 到他自己的项目中

本文所有内容主要参考于廖雪峰的Git教程:https://www.liaoxuefeng.com/wiki/896043488029600

### 回答1: 《Git教程廖雪峰PDF》是一本非常受欢迎的学习Git版本控制工具的教程。这本教程由知名的计算机程序员廖雪峰所编写,以简洁明了的语言和实际操作示例,向读者介绍了Git的基本概念和使用方法。 这本教程Git的起源和基础开始介绍,以帮助读者了解为什么Git成为现代软件开发必备的工具。然后,教程详细介绍了Git的安装和配置,包括如何创建和克隆仓库,添加、提交和查看文件的历史记录等等。同时,教程还介绍了如何使用分支、合并、解决冲突等高级功能,以及如何与远程仓库进行交互和协作。 这本教程采用了一种循序渐进的方式,通过一步步的实例演示和练习,帮助读者逐渐掌握Git的基本操作和常用命令。并且,教程还涉及了一些高级主题,如打标签、忽略文件、子模块等,以满足读者的不同需求。 廖雪峰作为一位经验丰富的程序员,他在教程中还分享了一些他个人在使用Git过程中的一些心得和建议,这对于读者来说是非常有价值的。总体来说,《Git教程廖雪峰PDF》是一本浅显易懂、实用性强的Git入门教程,适合初学者和有一定基础的开发者阅读和学习。无论是作为参考资料还是学习教程,这本书都能够帮助读者快速掌握Git的基本使用技巧,提高版本控制和团队协作能力。 ### 回答2: 《Git教程廖雪峰PDF》是一本由知名程序员廖雪峰编写的关于Git版本控制工具的教程。这本教程以简洁明了的方式,详细介绍了Git的原理、基本操作和常见使用场景。 首先,教程Git的基本概念入手,向读者介绍了Git的核心理念:分布式版本控制,并与集中式版本控制工具进行了对比。接着,教程详细介绍了如何安装Git,并通过简单的命令行操作演示了基本的Git使用方法,如创建仓库、添加文件、提交变更等。 除了基本操作,教程还介绍了Git工作区、暂存区和版本库的概念,以及常用的分支管理策略。同时,教程还重点讲解了远程仓库的使用,包括如何与Github等网站协同工作、如何进行分支合并和冲突解决等。 此外,教程还提供了一些高级应用技巧,如如何使用Git进行代码回滚、如何管理大型项目等。同时,教程中穿插了一些案例和示例,帮助读者更好地理解和应用Git。 总的来说,《Git教程廖雪峰PDF》是一本很好的入门教程。通过该教程的学习,读者可以了解Git的基本概念和操作方法,同时也能够掌握一些高级应用技巧。该教程以简单易懂的语言和清晰明了的实例,使得读者可以较快地上手Git,并在实际项目中应用所学知识。无论是初学者还是有一定经验的开发者,都能够从《Git教程廖雪峰PDF》中获得实用的Git技巧和经验。 ### 回答3: 《Git教程廖雪峰pdf》是一本详细介绍Git版本控制系统的教程,由知名程序员、技术作者廖雪峰所著。教程总共分为五个部分,包括了Git的基本概念、安装与配置、基础操作、团队协作和Git衍生工具。 在这本教程中,廖雪峰首先介绍了Git的基本概念,包括仓库、提交、分支、合并等。通过这些概念的解释,读者可以对Git的工作原理有一个初步的了解。 然后,廖雪峰详细介绍了Git的安装与配置,包括了Windows、Mac和Linux系统的安装步骤,以及Git的基本配置和常用命令。这部分内容对于初学者来说非常实用,可以帮助他们快速入门Git。 接着,廖雪峰介绍了Git的基础操作,包括了创建仓库、提交修改、查看修改记录等。通过这些操作的演示,读者可以掌握Git的基本使用方法。 在团队协作部分,廖雪峰教授了使用远程仓库进行团队协作的方法,例如克隆远程仓库、推送修改、拉取更新等。这部分内容对于多人协作或开源项目的参与者来说尤为重要,可以帮助他们高效地进行代码管理与版本控制。 最后,廖雪峰介绍了一些基于Git的衍生工具,如GitHub、GitLab和Bitbucket等。这些工具提供了更多的协作和管理功能,能够帮助开发者更好地利用Git进行项目管理和版本控制。 总的来说,《Git教程廖雪峰pdf》是一本非常实用的Git入门教程,对于初学者或有一定经验的开发者来说都非常有帮助。通过学习这本教程,读者可以快速掌握Git的基本操作和团队协作的方法,从而更好地管理和控制代码的版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Apple_Web

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值