git详细命令教程

1.提到git,简单提下几个相似功能的版本管理系统CVS和SVN,首先说CVS和SVN是集中式的版本控制系统,什么是集中式的版本控制系统呢?就是版本库是集中存放在中央服务器的,大家协作的时候就是先从中央服务器获得最新的版本,然后修改后再把自己的活推送给中央服务器,必须联网才能工作,如果遇到中央服务器出问题,网络差,信号不好,上传文件慢,协作起来就有很多问题。

2.git:git是分布式的版本控制系统,每个人的电脑上都有一个完整的版本库,这样,工作的时候无需网络,多人协作时只需要提交我们的修改就好了,即使一个人的电脑坏了,也可以从其他人哪里重新拷贝版本库。git是现在世界上最先进的分布式版本控制系统。

3.git工作区,暂存区(stage、index),版本库的区别:我们的修改都在git的工作区。执行git add之后文件将会被添加到暂存区,执行git commit之后暂存区的修改才会被提交到版本库,git的工作区是一块,暂存区和版本库是两个是在一起的。工作区任何的修改都需要经历git add test.txt,git commit -m "description"这两步才能提交到git版本库。

4.git命令操作:

①:git简单命令

pwd                                  当前位置,Mac默认的是/Users/thy,git操作界面显示的git文件夹的路径,

cd + 文件夹名                  进入相应的文件夹,

git version                        查看git的版本,安装成功git之后就可以查看到git版本,

②:未提交到本地版本库,即执行git commit命令之前可以执行的git操作

mkdir learnGit                  创建文件夹learnGit,在当前位置创建文件夹,

cd learnGit                       进入到文件夹learnGit,

pwd                                  用于显示当前目录路径,Mac下显示/Users/thy/learnGit,

git init                              初始化当前文件夹为git版本库,会多一个.git文件夹,如果没看到,使用ls -ah命令可以看到,

git ls-files 和ls -ah的区别:    git ls-files命令是查看git版本库里面的所有文件和路径,工作区的看不到,ls -ah命令是查看git版本库文件夹的所有文件,包括git版本库文件夹中存在,但不在git版本控制下的文件

git checkout -- git.txt        放弃工作区的修改,如果执行了git add命令添加到暂存区之后则不管用了,如果你本地使用rm命令删除了文件,那么使用此命令可以将版本库的文件重现检出,因为版本库里面还有,如果你对一个文件做了更改,但是还没有git add到暂存区,那么执行git checkout -- git.txt可以从版本库重新检出这个文件,但是如果这个文件git add了,需要先git reset HEAD git.txt然后再git checkout -- git.txt,才能放弃工作区的更改,

git add git.txt                  将git.txt文件从工作区添加到暂存区,也可以将一个文件加入git版本控制,

git status                         可以查看工作区和暂存区中哪些文件被修改,如果执行了git commit之后这个命令就查看不了了,

git reset HEAD git.txt          把git add添加到暂存区的文件重新放回工作区,如果需要放弃修改,还需要git checkout命令,

git diff git.txt                   通过这个命令加文件名,如果有文件被修改,可以查看git status看到的修改文件的具体更改内容如果不加文件名,即使多个文件被修改,默认的也只能看到最后一个修改的文件的内容,但是只能查看工作区的修改,如果执行git add增加到暂存区之后就看不到了,

git diff HEAD -- git.txt        此命令查看工作区和版本库里面最新版本的git.txt文件的区别,如果相同则没反应,

git commit -m "description"    将git add添加的所有文件从暂存区提交到git版本库,只会提交git add到暂存区的,

③:提交到本地版本库,即执行git commit命令之后可以执行的命令

git log                                  git log命令显示从最近到最远的提交日志,git log查看的是git commit的记录,只有提交到版本库的,工作区的修改和git add到暂存区的修改使用git status查看,

git log --pretty=oneline        上面的git log会输出提交头,作者,时间,描述,这个信息简介,挺好的,

git reset --hard HEAD^          回退到上个版本,每加一个^^^^,表示往前回退一个版本,也可以直接下面这样:

git reset --hard commitID      直接回退到指定的版本,这个commitID可以通过git log命令查看,webstrom按回车可以查看记录,

git reflog                              当你关闭窗口之后看不到commitID之后,可以用这个命令查看命令的历史记录,继续回退操作,

④:删除文件

rm git.txt                               删除一个文件,执行之后,必须要git add,然后git commit,这个文件才会在版本库里面被删掉,如果没有执行后面两步,可以直接git checkout -- git.txt来从版本库重新检出

git rm git.txt                         如果使用这个删除命令,则默认直接删除文件并加入到了暂存区,如果想要不删除,要使用命令git reset HEAD git.txt来把暂存区的修改放回工作区,再使用git checkout -- git.txt来还原git.txt,如果执行了这个命令可以不用git add,直接git commit就可以删除版本库文件,

git remote                            显示当前版本库的连接的远程仓库名字,

git remote -v                       显示当前版本库连接的远程版本库地址的下拉和推送的仓库地址,

⑤:分支系统

git branch dev                     创建分支dev,

git checkout dev                 切换到分支dev,

git checkout -b dev            创建并切换到分支dev,相当于上面两条命令,

git branch                            查看所有分支,

git merge dev                      合并dev分支到当前分支,现在是master分支,就是把dev分支的修改合并到当前的master主分支,

git merge --no-ff -m 'description' dev  禁用默认合并方式Fast forward的合并方式,详见下面

git diff git.txt                        如果合并出现冲突,那么可以使用git status查看冲突的文件,然后使用git diff来查看冲突的地方和内容,git里面也会显示,文件里面也会显示冲突的部分,修改冲突重新提交,合并,

git branch -d dev                删除分支,如果删除的是当前的分支则会失败,

git log --graph                    查看分支合并的详细图解,内容显示的完善,

git log --graph --pretty=oneline --abbrev-commit  查看分支合并的缩略图解,这个更好一点,展示信息也可以,

关于git分支:git的HEAD默认的是指向master主分支的,当你创建了新的分支dev的时候两个分支是重叠的,HEAD指向dev分支,当你在dev分支上做修改的时候master分支依然不动,dev分支向后移动,合并分支之后master分支向后移动,当我们在dev分支上面工作的时候,所做的修改在master分支上是看不到的,只有合并了之后才能看到,

关于冲突的产生:只有当两个分支dev和master都改了一个地方提交了之后合并时才会产生冲突,如果dev改动提交了,master没有进行任何工作区的更改或者提交,那么合并时候是不会产生冲突的,因为master还指向之前的地方,没有新的更改,

关于带参数的合并:git的分支合并默认的是使用Fast formard,在这种模式下,删除分支之后会丢失分支信息,如果添加上参数:--no-ff表示禁用Fast formard模式,使用普通合并模式,创建一个新的commit,所以加上-m参数,把提交的描述写进去,可以查看到合并记录,而默认的合并模式不能看到合并历史,

关于分支的应用:master分支应该是非常稳定的,应该只用来发布版本1.0,2.0这些,我们应该都在dev分支上干活,dev上有每个人的分支dev1,dev2...等等,然后每个人在自己的分支上干活,做好了合并到dev分支上,因为创建、合并、删除分支都非常快,所以git鼓励你是用分支完成某个任务,合并后再删除掉分支,这和直接在master分支上工作效果是一样的但是过程更安全,

⑥:git版本库与远程版本库的连接:

1.先建远程库,再建本地库:

1.1   假如我们先建立了远程库,无论是SSH协议(协议地址样式:git@git.oschina.net:thythy/git.git),还是https协议(协议地址样式:https://git.oschina.net/thythy/git.git),我们都可以使用git clone + 远程仓库地址直接克隆项目,只要自己在项目里面,克隆完成之后直接进入文件夹就可以直接上传下拉,默认的就和你克隆的远程库关联了,(未发现https协议每次都需要输入账号密码的问题)

2.先建本地库,再建远程库

2.1使用SSH协议:首先使用ssh-keygen -t rsa -C "136031858@qq.com",然后连续三次回车,然后在用户目录里面找到隐藏文件夹.ssh,里面有id_rsa和id_rsa.pub两个文件,id_rsa是私钥,id_rsa.pub是公钥,然后登陆码云等代码仓库网站添加SSH Key,因为git支持SSH协议,然后码云上创建项目,然后在本地git仓库运行git remote add origin git@git.oschina.net:thythy/git.git,如果提示origin已存在,则输入git remote rm origin,然后重新远程连接,连接完成之后需要先git pull --rebase origin master因为本地没有readme.md文件,直接推送是会报错的,执行完之后本地多出了readme.md文件,然后git push -u origin master,首次推送需要添加上-u的参数,用来将本地的版本库和远程的版本库关联起来,以后就可以推送代码:git push origin master,下拉代码:git pull origin master,可以使用ssh -T git@git.oschina.net测试ssh是否配置成功,如果返回了Welcome to Git@OSC,coding!证明ssh配置成功,

2.2使用https协议:首先本地新建一个文件夹,然后使用git init命令将文件夹初始化为本地仓库,然后使用git remote add originhttp://git.oschina.net/thythy/git和远程版本库建立远程连接,然后可以使用git remote -v命令查看是否成功,如果成功则返回下拉和上传的版本库路径,和远程建立连接成功之后,这时候我们无论下拉上传都不行,因为git远程版本库多了一个readme.md文件而本地没有,所以建立连接成功之后我们需要执行git pull --rebase origin master命令把readme.md文件同步到本地,这时候本地就会多出一个readme.md文件,然后再执行git pull origin master命令就可以拉取远程库代码到本地代码库了,也可以使用git push originmaster推送修改的代码到远程仓库,

⑦:添加git忽略文件:新建.gitignore文件,然后把需要忽略的文件都添加进去,如果有的文件在忽略文件列表,那么你想添加到git版本库是添加不成功的,可以移出git版本库或者使用命令git add -f a.js命令来强制添加,或者可以使用命令,git check-ignore -v a.js命令来查看是否是忽略文件的原因

⑧:配置git命令别名:因为git命令比较长,输起来也不方便,我们可以给它配置别名来更好操作,例如:我们使用git status命令来查看工作区和暂存区的状态,我们使用git命令配置命令别名:git config --global alias.st status下次我们就可以直接使用git st来代替git status命令,查看状态。同样的git reset HEAD git.txt,我们可以使用git config --global alias.rb "reset HEAD",然后git rb git.txt,目前我也只配置了这两个git命令。

⑨:git输出颜色:git config --global color.ui true和git config --global color.ui false两个命令分别是开关git默认配置颜色。

另外:①:origin/master:origin是仓库的名称,master是仓库的分支名称,远程仓库名默认是origin,分支名可以是master1,master2等,git commit的提交就是提交到了master分支。②:cat git.txt  cat+文件名,如果文件存在,把文件内容输出数来,如果文件不存在,当做字符串输出出来,关于git add和git commit:如果你的每次提交,不git add的话,就不会加入到git commit的队列,(cat + 文件名好像是是unix命令,linux是学的unix,所以linux也有这个命令,不是太清楚,说错勿怪。)

*注意:所有的版本控制系统,只能跟踪文本文件的改动,比如txt、网页、程序代码等,git也不例外,对于图片、视频这些二进制文件,虽然也能由版本控制系统管理,但是没法跟踪文件的变化,只能把二进制的文件每次改动串起来,只知道图片从100KB变成了80KB,但是到底改了啥不知道,不幸的是Microsoft的word格式是二进制格式,因此版本控制系统没法跟踪word文件的改动,所以要真正的使用版本控制系统,就要以纯文本方式编写文件。

结语:以上差不多是git常用命令的所有集锦和命令解释了,但git的功能远不止这些,更具体的git教程可以看廖雪峰老师的git教程,写的太完美了,这篇文章git简明指南也可以,还有OSX,windows,linux三个系统的git版本,也非常不错。

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

推荐阅读更多精彩内容