使用git命令非常方便。Git是目前世界上最先进的分布式版本控制系统。SVN和Git的主要区别是什么? SVN是一个集中式版本控制系统。版本库集中在中央服务器上,工作时使用的是自己的电脑,所以必须先从中央服务器上获取最新版本,然后才能工作,完成后需要将自己所做的工作推送到中央服务器。集中式版本控制系统必须连接到互联网才能工作。如果在局域网内还可以,带宽够大,速度够快。如果是在Internet下,网速慢的话,会很混乱。 Git是一个分布式版本控制系统,所以它没有中央服务器。每个人的电脑都是一个完整的版本库。这样工作的时候就不用联网了,因为版本都在自己的电脑上。.既然每个人的电脑都有一个完整的存储库,那么多人如何协作呢?比如你在自己的电脑上改了文件A,别人在你的电脑上改了文件A,这时候,你们两个只需要把自己的改动推送给对方,就可以看到对方的改动了。从官网下载Git,按顺序安装Git,输入gitconfig--globaluser.name""gitconfig--globaluser.email""以用户名和email为标识,然后使用常用Git命令gitinit在本地新建一个repo,进入一个项目目录,执行gitinit,会初始化一个repo,并在当前文件夹下创建一个.git文件夹。gitclone获取一个url对应的远程Gitrepo,并创建一个本地副本。一般格式为gitclone[url]。克隆的repo将以url的最后一个斜杠命名,并创建一个文件夹。如果要指定具体名称,可以用gitclone[url]newname指定。gitstatus查询仓库的状态。gitstatus-s:-s表示short,-s的输出标志会有两列,第一列是暂存区,第二列是工作目录。gitlog显示一个分支的提交历史。gitlog--oneline--number:每条日志只显示一行,显示数字条。gitlog--oneline--graph:可以图形化显示分支合并的历史。gitlogbranchname可以显示特定分支的日志。gitlog--onelinebranch1^branch2,可以查看分支1的commit,不能查看分支2的commit。^表示排除该分支(Windows下^branch2可能需要加引号)。gitlog--decorate会显示标签信息。gitlog--author=[authorname]可以指定作者的提交历史。gitlog--since--before--until--after根据提交时间过滤日志。--no-merges可以排除合并的提交。gitlog--grep根据提交信息过滤日志:gitlog--grep=keywordsgitlog--grep--author默认是OR关系,即满足一个就返回。如果你希望它们是AND关系,你可以添加--all-match选项。gitlog-S:通过引入的差异进行过滤。例如:gitlog-SmethodName(注意S和后面的词之间没有等号)。gitlog-p:显示每次提交时引入的补丁。每个提交都是一个快照(snapshot),Git会为每个提交计算差异并将其作为补丁显示给你。另一种方法是gitshow[SHA]。gitlog--stat:显示每次提交时引入的更改的差异统计。也可以使用来查看变化的相关信息,--stat比-p的输出更简单。gitadd在提交之前,Git有一个暂存区(stagingarea),可以放新添加的文件或者添加新的更改。commit时提交的变更是上次添加到暂存区的变更,不是我们磁盘上的变更。gitadd会递归地添加当前工作目录下的所有文件。gitdiff不带参数的gitdiff:显示未暂存更改的差异。该命令比较工作目录下当前文件与暂存区快照的差异,即修改后未暂存的变化。要查看已经暂存的文件和上次提交时的快照的区别可以使用:gitdiff--cached命令。显示分阶段更改的差异。(Git1.6.1及之后的版本也允许使用gitdiff--staged,效果是一样的)。gitdiffHEAD显示所有暂存或未声明更改的差异。也就是将woking目录与上次进行对比提交之间的所有更改。如果想查看自某个版本以来发生了什么变化,可以使用:gitdiff[versiontag]和log命令一样,diff也可以添加--stat参数来简化输出。gitdiff[branchA][branchB]可以用来比较两个分支。它实际上会返回一个从A到B的补丁,这不是我们想要的结果。一般我们想要的结果是两个分支分开后的变化是什么,由命令给出:gitdiff[branchA]...[branchB]。实际上它是gitdiff$(gitmerge-base[branchA][branchB])[branchB]的结果。gitcommitCommithasbeenAddthechangesinthecommitmessagegitcommit-m"thecommitmessage"gitcommit-a会先把跟踪文件的所有变化都加进去,然后再提交(有点像svn提交,不需要先暂存)。对于没有track的文件,还是需要gitadd才行。gitcommit--amend补充提交。将以与当前提交节点相同的父节点进行新的提交,旧的提交将被取消。gitreset撤消更改和提交。这里的HEAD关键字指的是当前分支末尾的最新提交。即,存储库中分支上的最新版本。gitresetHEAD:unstagefilesfromindexandresetpointertoHEAD这个命令用来把不小心添加的文件从staged状态中取出来,可以单独对某个文件进行操作:gitresetHEAD--filename,this--也可以省略。gitreset--soft将HEAD移动到特定的提交引用,索引和暂存区保持不变。gitreset--hardunstage文件并撤消自上次提交以来工作目录中的ny更改。使用gitreset--hardHEAD进行重置,即在上次提交后,所有暂存更改和工作目录中的更改都会消失,恢复到上次提交时的状态。这里的HEAD可以写成任何提交的SHA-1。不带软硬参数的gitreset其实是把default参数混合了。总结:gitreset--mixedid改变了git的HEAD(即提交记录改变),但是文件没有改变,(即工作树没有改变)。commit和add的内容被取消。git重置--softid。其实gitreset--mixedid之后,git又做了一次add。也就是取消commit的内容。gitreset--hardid。它改变了git的HEAD,文件也改变了。修改顺序如下:soft(commit)
