当前位置: 首页 > 科技观察

GIT命令操作全攻略,请收下我的膝盖!

时间:2023-03-12 01:11:12 科技观察

一、介绍在介绍git操作命令之前,我们先来了解一个故事!很多人都知道,Linus在1991年创建了开源的Linux操作系统,在过去的30年里,Linux系统不断发展。已成为全球最大的服务器系统软件。虽然Linus创造了Linux操作系统,但Linux操作系统的壮大是因为全世界热心志愿者的参与。全世界有这么多人为Linux操作系统编写代码。Linux操作系统的代码是如何管理的?什么?2002年以前,全世界的志愿者通过diff把源代码文件发给Linus,然后Linus自己手动合并代码!然而到了2002年,Linux操作系统已经发展了十年。代码库的规模让Linus难以继续手动管理,社区的兄弟们也对这种方式表示了强烈的不满。有的同学可能会问,不是有CVS、SVN等免费的版本控制系统吗?为什么不使用它们来托管Linux操作系统代码?因为Linus本人坚决反对CVS和SVN,因为这些集中式版本控制系统不仅速度慢,而且必须联网才能使用。所以Linus选择了一个商业版本控制系统BitKeeper。BitKeeper的所有者BitMover出于人道主义精神授权Linux社区免费使用此版本控制系统。随着Linux社区对BitKeeper版本控制系统的深入了解,原本安定团结的局面在2005年被打破,原因是Linux社区中优秀的人很多。一个叫Andrew的开发者破解了BitKeeper的商业许可协议(做这个的其实不止他一个),后来被BitMover发现了(监控工作做的不错!),于是BitMover生气了想收回免费使用权Linux社区的权利。Linus向BitMover公司道歉,并承诺以后会严格管教兄弟们。嗯,别人不破解其实是不可能的。之后,Linus花了两周的时间,自己用C写了一个分布式版本控制系统。这就是我们今天要介绍的Git!源代码已由Git管理!在那之后,你一定知道Git已经迅速成为世界上最流行的分布式版本控制系统。在代码托管方面,基本上是最好的!尤其是2008年,GitHub网站上线了,它为开源项目提供免费的Git存储,无数的开源项目开始迁移到GitHub,包括jQuery、PHP、Ruby等等!说了这么多,Git到底是个什么软件?和CVS、SVN这些免费的版本控制系统有什么区别?上面我们也提到了Git其实是一个分布式的版本控制系统。可能你还不明白什么是分布式。先说什么是中心化!Centralized简单来说,当你想工作的时候,你通常使用自己的电脑。首先需要从中央服务器获取最新版本,然后开始工作,然后把自己的直播推送到中央服务器。集中式版本控制系统的优点是统一管理,但缺点也很明显。它必须连接到Internet才能工作。如果在局域网还好,带宽够大,速度够快,但是如果在互联网上网速慢,提交一个10M的文件可能要5分钟,不够憋气人们死亡。分布式版本控制系统和集中式版本控制系统最大的区别是没有中央服务器这样的东西。每个人的电脑上都有一个完整的版本库。可以说每台电脑都是一台中央服务器。工作时,无需联网,直接提交工作内容即可。如果对方电脑想知道你的工作内容,你只需要将相应的工作文件推送给对方,对方就可以看到,其他无关文件不需要推送给对方!与集中式版本控制系统相比,分布式版本控制系统的安全性更高。高很多,因为每个人的电脑里都有一个完整的版本库。某个人的电脑坏了不要紧,从别人那里复制一个就行了。而如果集中式版本控制系统的中央服务器出现问题,大家将无法工作。既然git这么火了,那我们就开始git的学习之旅吧!2、安装GIT2.1,在Linux上安装Git如果你当前的电脑操作系统是Linux,安装起来会很简单,先试试输入git,看看系统中是否安装了Git:$git程序'git'是当前未安装。您可以通过键入以下命令来安装它:sudoapt-getinstallgit像上面的命令一样,许多Linux会告诉您Git未安装,它还会告诉您如何安装Git。根据提示输入以下命令安装git!sudoapt-getinstallgit2.2,在MacOSX上安装Git如果你是使用Mac进行开发,安装Git有两种方式!一种是安装homebrew,然后通过homebrew安装Git。具体可以参考homebrew的文档:http://brew.sh/。第二种方法更简单,推荐使用。就是直接从AppStore安装Xcode,因为Xcode集成了Git,但是默认没有安装。需要运行Xcode,选择菜单Xcode->Preferences,在弹出的窗口中找到Downloads,选择CommandLineTools,点击Install完成安装。Xcode是Apple的官方IDE。它非常强大。是开发Mac和iOSApps的必备设备,而且免费!2.3.在Windows上安装Git在Windows上使用Git是一种愚蠢的方式。下载安装程序并使用默认选项进行安装。安装完成后,在开始菜单找到Git->GitBash,弹出类似命令行窗口的东西,说明Git安装成功!以上所有安装完成后,还需要最后一步进行设置,在命令行输入:#配置全局用户名gitconfig--globaluser.name"YourName"#配置全局邮箱gitconfig--globaluser.email"email@example.com"配置你的用户名和邮箱地址,因为Git是分布式版本控制系统,所以每台机器都要声明自己!3.GIT操作手册上面我们对git的安装做了一些简单的介绍。环境准备完成后,我们就可以开始GIT之旅了!3.1.配置管理上面我们介绍了用户名和邮箱的全局配置。如果你的用户和邮箱输入错误,你想修改,怎么办?也可以使用如下命令修改!#重新配置用户名gitconfig--globaluser.name"zhangsan"#重新配置邮箱gitconfig--globaluser.email"zhangsan@example.com"同时也可以通过以下命令查询配置#查看当前配置gitconfig--list如果要针对某个Repository,直接在当前仓库的根路径下设置用户名和邮箱地址,可以通过以下方式分别配置!#配置某个仓库的用户名和邮箱gitconfiguser.name"你的名字"gitconfiguser.email"email@example.com"如果你配置的仓库的用户名和密码不对,可以清除通过以下命令,然后重新配置!核心模块,具体操作如下!当你要提交一个文件到GIT时,首先需要初始化一个版本库#Initializeaversionlibrarygitinit然后,你可以通过下面的命令添加或修改指定的文件!#add或修改指定文件gitadd当然你也可以通过以下命令添加当前目录下的所有文件!#添加或修改所有文件gitadd--all添加完成后,需要提交文件,命令如下#提交文件gitcommit-m查看历史提交的命令!#查看历史的命令submissiongitreflog查看文件修改内容!#查看当前文件修改内容gitdiff查看workspace和repository中最新版本的区别!#查看当前文件与版本库中最新版本的差异gitdiffHEAD--<文件名>如果要回滚当前文件对于历史某个时间点提交的文件,可以使用如下命令!#先查询你要回滚到历史某个点的版本idgitlog--pretty=oneline#然后用下面的命令执行回滚操作gitreset--hard当你修改了一个文件,但是没有提交,想回滚,请问怎么处理?可以通过以下命令提现!#撤销对一个文件的修改gitcheckout--<文件名>如果要全部撤销,可以通过以下命令撤销全部!#撤消所有修改gitcheckout。当然,如果你不想要某个文件,可以按如下方式删除!#删除指定文件gitrm3.3、分支管理GIT的分支管理非常强大,远远优于CVS、SVN等免费版本控制系统。是一件很棒的神器!GIT在初始化仓库的时候,默认会创建一个master分支,也就是trunk分支!如果你想创建一个分支,你可以用下面的命令创建它!#创建分支gitbranch比如创建一个develop分支!gitbranchdevelop这条命令执行时,git的develop分支指针会指向当前分支的当前位置!切换到分支机构怎么样?我们可以使用gitcheckout命令来切换分支!#Switchbranchgitcheckout当然你也可以通过以下命令一步创建和切换分支!#createbranch+switchbranchgitcheckout-b通过下面的命令可以查询到当前的分支!#查看当前分支gitbranch如果分支切换失败,可以使用gitstatus命令查看失败原因。分支切换失败的主要原因是当前工作区的代码没有提交到版本库。可以查看代码是否提交到本地仓库!在平时的开发过程中,我们经常会遇到合并分支的需求,比如将develop分支合并到master分支,如何处理呢?您可以使用以下命令来实现快速合并!#快速合并分支gitmerge合并时,可能会出现文件冲突。如果是,请检查并修改文件,然后提交!当然你也可以使用下面的命令来实现分支合并提交!#普通模式合并分支+提交gitmerge--no-ff-m"mergewithno-ff"如果不想某个分支,想删除它,可以使用如下命令实现它!#删除分支gitbranch-d如果删除过程中出现错误,可以使用如下命令强行删除!#强制删除分支gitbranch-D最后可以通过以下命令查询当前版本分支的变化!#查看分支合并图gitlog--graph3.4,标签管理标签管理也是git的核心功能!通过标签,我们可以快速定位到仓库中的某个版本,并进行代码回滚!可以通过以下命令创建标签,比如v1.0标签#创建标签gittagv1.0查看标签情况#查看所有标签gittag如果想查看某个标签,具体详情,可以使用如下命令!#查看标签信息gitshow如果不想要,可以通过以下命令删除标签!#删除taggittag-d当然如果你想给某个历史版本打tag,可以通过下面的方式来实现!#查看历史版本idgitlog--pretty=oneline--abbrev-commit#标记某个版本ID,名称为v0.9gittagv0.9我们也可以将标记推送到远程分支,命令如下如下:#推送所有标签到远程库gitpushorigin--tagsdelete远程标签库#删除本地标签gittag-dv0.9#推送到远程分支gitpushorigin:refs/tags/3.5,忽略文件管理GIT也为我们提供了一个庞大的Sharp工具,我们可以通过配置忽略文件来忽略当前目录下的一些文件,不提交到版本库。怎么做?首先在当前版本库的根目录下新建一个.gitignore文件,内容自己定义。比如下面的内容就是编辑器定义的忽略文件,/target/!.mvn/wrapper/maven-wrapper.jar###STS###.apt_generated.classpath.factorypath.project.settings.springBeans.sts4-缓存###IntelliJIDEA###.idea*.iws*.iml*.ipr*.class###NetBeans###/nbproject/private//nbbuild//dist//nbdist//.nb-gradle//build/###mac###.DS_Storefile/logs/*/targettarget/然后,执行下面的命令让被忽略的文件生效!#清除缓存gitrm-r--cached.#添加所有文件gitadd.#提交到Repositorygitcommit-m"update.gitignore"#提交到远程分支(如果有的话)gitpush3.6,远程仓库管理的上面介绍的基础都是本地仓库的操作。如果我们需要和其他电脑配合,怎么处理呢?如果我们本地没有仓库,可以直接从远程分支拉取一个版本库同步到本地。命令如下#从远程服务器创建主分支gitclone我们可以通过以下命令查询远程分支的详细信息#查看远程库gitremote-v如果你已经通过gitinit初始化了本地仓库并且想关联远程分支,可以使用下面的命令来实现!#添加远程地址gitremoteaddorigin如果填错地址想删除,可以使用下面的命令删除,然后再添加!#删除远程提交地址gitremotermorigin如果之前没有推送过内容到远程库,可以使用以下命令推送#第一次推送到远程库并创建分支gitpush-uorigin(第一次把内容推送到master分支)后面再推送到远程分支,可以这样#推送到远程分支gitlaterpushorigin#可以简写,pushgitpushquickly有时,我们还需要查询远程分支的情况,可以通过以下命令进行操作:#查看所有远程分支gitbranch-a有时,我们还需要从远程分支服务器拉取指定分支到本地,可以通过以下命令来完成:#从远程服务器拉取一个指定的分支到本地,并创建一个分支gitcheckout-borigin/big在某些情况下,当远程服务器更新版本库并在通知我们需要更新,可以通过以下方法将远程版本库的最新内容同步到我们本地电脑的版本库中。#拉取远程分支的内容并同步到本地版本库gitpull有时候,需要设置本地分支和远程分支的链接,可以通过以下命令来完成:#设置本地分支和远程分支的链接本地分支和远程分支gitbranch--set-upstreamdevorigin/dev有时候,我们需要删除没有未跟踪的文件,可以通过以下命令来完成:#Deletefileswithoutuntrackedgitclean-d-xf3.6,远程仓库管理以上介绍的基本都是本地仓库的操作,如果我们需要配合其他电脑,怎么处理呢?如果我们本地没有仓库,可以直接从远程分支拉取一个版本库同步到本地,命令??如下。#从远程服务器创建主分支gitclone我们可以通过以下命令查询远程分支的详细信息#查看远程库gitremote-v如果你通过gitinit初始化了本地仓库,想关联远程分支,可以通过以下命令实现!#添加远程地址gitremoteaddorigin如果地址填写错误想删除,可以用下面的命令删除,重新添加!#如果之前没有推送过,删除远程提交地址gitremotermorigin可以通过以下命令推送到远程库的内容#第一次推送到远程库,并创建分支gitpush-uorigin(第一次把内容推送到master分支)以后推送到远程分支,可以这样#以后推送到远程分支gitpushorigin#可以缩短,快速推送gitpush有时候,我们还需要查询远程分支的情况,可以通过以下命令进行操作:#查看所有远程分支gitbranch-a有时候,我们还需要从远程服务器拉取指定的分支到本地,这可以通过以下命令来完成:#从远程服务器拉取一个指定的分支到本地,并创建一个分支gitcheckout-borigin/大多数情况下,当远程服务器更新版本时库并通知我们它需要updated,可以通过以下方式将远程版本库的最新内容同步到我们本地电脑的版本库中。#拉取远程分支的内容并同步到本地版本库gitpull有时候,需要设置本地分支和远程分支的链接,可以通过以下命令来完成:#设置本地分支和远程分支的链接本地分支和远程分支gitbranch--set-upstreamdevorigin/dev有时候,我们需要删除没有未跟踪的文件,可以通过以下命令来完成:#Deletefileswithoutuntrackedgitclean-d-xf3.7,冲突处理版本同步的时候,如果大家都修改在同一个文件里,难免会发生冲突。比如修改后的文件没有提交,直接远程拉取代码就会有冲突。我应该怎么办?可以这样处理#先将本地修改存放gitstash#将本地修改暂存后,就可以pull了。gitpull#恢复暂存的内容gitstashpopstash@{0}此时系统会提示如下类似信息:Auto-mergingc/environ.cCONFLICT(content):Mergeconflictinc/environ.c意思是系统自动合并修改内容,但是里面有冲突需要解决。然后打开冲突的文件并修改它。修改完成后,执行以下命令提交!gitadd.gitcommit-m"comment"gitpush当然也可以进行强制更新操作,覆盖本地代码。库内容gitfetch--all#不做任何合并,gitreset会把HEAD指向刚刚下载的最新版本gitreset--hardorigin/master4.与服务器建立ssh连接之前的电脑,支持的模式有两种:HTTP和SSH。HTTP的传输会比较慢,这样SSH方式可以互相推送,效率会很高!所以在实际使用过程中,建议使用SSH方式与远程服务器建立连接!比如与GitHub的连接,具体操作配置方法如下!4.1.在当前计算机用户的主目录下创建SSHKey,查看是否有.ssh目录。如果有,查看该目录下是否有id_rsa和id_rsa.pub,如果已经有这两个文件,可以直接跳过。如果没有,打开Shell(Windows下打开GitBash),创建一个SSHKey:ssh-keygen-trsa-C"youremail@example.com"你需要把邮箱地址换成你自己的邮箱,回车一路走来,用默认值就行了。由于此密钥不用于军事用途,因此无需设置密码。如果一切顺利,您可以在用户的??主目录中找到.ssh目录。其中有两个文件id_rsa和id_rsa.pub。这两个就是SSHKey的秘钥对。id_rsa是私钥,不能泄露。id_rsa.pub是公钥,你可以放心的告诉任何人。4.2.配置公钥到服务器并登录GitHub,打开Accountsettings,SSHKeys页面:然后,点击AddSSHKey,随便填Title,在Key文本框中粘贴id_rsa.pub文件的内容:单击添加密钥,您应该会看到已添加的密钥!至此,本地和远程服务器的连接配置就完成了,剩下的就是直接从远程服务器拉取代码,提交的时候再gitpush!5.总结本文主要对GIT的背景和常用的操作命令进行了介绍。有些地方可能是粗糙和不完美的。希望老手们批评指正!