Git 命令总结
终于静下心来,花了两天时间,把git工具的命令行熟悉了一遍,在此记录一下,以后忘了再复习复习。本篇的大部分都是从廖雪峰博客站点上面的git教程抽取出来的,因此放一个链接:http://www.liaoxuefeng.com/。本来想捐助一分自己的心意,可是支付方式我现阶段一个都没有,真是汗颜。算是在此记下了。以后有机会一定补上,虽然我还在实习阶段。
首先下载git,一步一步操作,然后在桌面右键即可看到多出几个—gitinit here
Git bash , Git Gui,
git init here:一般在一个文件夹下创建git的仓库,也叫版本库(respository)
Git bash:弹出git命令行界面
Git Gui:弹出git图形化界面
当然也是安装成功的标志。
安装完成后的最后一步设置:
Git config--global user.name “your name”
Git config–global user.email email@example.com
说明:git config后面的—global参数,表示本机上所有的Git仓库都会使用该设置,相当于全局设置。
注意:要先在仓库中添加文件,或者文件夹。
这时可以先
git status:查看当前仓库的状态,有多少文件被更改,被添加,,或者没有提交。
然后或者直接:
git add <filename>
这时候第二步:
git commit –m“some content to explain what have done”
表示提交到仓库。
Git commit –m的-m 后面输入的是本次提交的说明,见名知意。
多次add;
Git add<filename>
Git add<filename>
Git add<filename>
Git commit –m“add 3 files”
当提交的某个文件被修改后想查看被修改的文件具体修改了哪些内容:
Git diff<filename>
当然一般在 git add之后再执行 git status再git commit
此时我们已经有了操作历史记录,可以使用
Git log查看从最近到最远的提交日志
当然还可以加上格式化参数,方便预览
Git log --pretty=oneline
说明HEAD表示当前版本,可以使用HEAD^上一个版本,HEAD~100,回退到上一百个版本
此时想要回退某个版本的话可以使用下面的命令:
Git reset –hard <versioncode> :versioncode 就是版本号的前七位(可以更精确些),比如ea34578d5496d7dd233c827ed32a8cd576c5ee85
取前7位则是ea34578
此时可以查看文件内容
Cat <filename>
此时想要再到当前版本的话可以使用如下命令查看之前操作的命令记录
Git reflog
然后想要到哪个版本的话就可以使用
Git reset –hard<commit_id>
工作区和暂存区的概念
工作区就是自己电脑里能看到的目录,工作区有个隐藏的文件夹 .git,windows先设置显示隐藏文件才能看到,这个不算工作区,而是git 的版本库
Git版本库里有很多重要的东西,有个s叫tage的暂存区,git自动创建的第一个分支master,以及指向master的一个指针是HEAD.
之前向git版本库里添加的时候,是分两步执行的:
第一步:git add 把文件添加进去暂存区,或者将修改的文件添加到暂存区。
第二步:git commit 提交更改,实际上就是把暂存区里的所有内容提交到当前分支。
说明:git创建版本库时,git自动为我们创建了唯一的一个分支master,所以,现在,gitcommit就是往master分支上提交更改。
Git跟踪并管理的是修改,而不是文件,所以你在github,或者oschina上看到的开源项目或者自己的项目都没有管理文件的设置。而是管理仓库和项目的东西。
当工作区和版本库里最新版本出现不同时可以使用下面的命令查看不同:
Git diff HEAD -- <filename>
所以这种情况是非常囧的,因此每一次修改或者添加都是按照两个步骤进行的:
Git Add 到暂存区,然后
Git commit 到版本库里。
当然我们修改后,可能要撤销修改因此可以使用
Cat <filename> 查看修改的文件,是修改了哪些内容
Git status查看修改的文件状态
然后进行下面的操作:
Git checkout -- readme.txt,这个操作是丢弃工作区的修改,与下面的不同
该命令的意思是:把文件在工作区的修改全部撤销,注意中间有两个减号,如果少了话就是
git checkout <filename> 这个命令四创建新的分支的意思。
当然也可以使用该命令将在暂存区的修改文件的修改内容撤销,重新放回工作区中:
Git reset HEAD<filename>
所以这里有几个比较重要的场景:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版版本回退,不过前提是没有推送到远程库。
如果在本地的版本库中某个文件没有用了,可以直接进入文件管理器进行删除,或者使用下面的命令:
rm <filename>
不过删除操作同样需要两步,因为删除后暂存区和版本库就不一致了,所以可以这样
Git rm <filename>
Git commit –m “remove something”
现在就从版本库中删除文件了,
Git checkout 命令的作用就是用版本库里的版本库替换工作区的版本,无论工作区是修改还是删除,都可以”一键还原“
这里要记录git与github远程交互的内容:
首先在该网站上创建账号:https://github.com/
此时本地有一个仓库,github上也会有一个仓库,可以使用git命令将两个仓库同步起来,
第一步:创建SSH Key
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
ss-keygen –t rsa–C youremail@example.com
然后一路回车,使用默认值即可,
此时可以在用户主目录里找到.SSH目录,里面有id_rsa和id_rsa.pub两个文件,
这两个就是SSH key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第二步登陆:github,打开”Accountsetting“,”SSH Keys”页面
然后点击Add SSH Key,填写任意的title,在key文本框里粘贴id_rsa.pub文件的内容:
在进行上面的操作后你需要在github上创建自己的仓库,比如learngit,然后让本地的仓库与之同步:
创建远程仓库就不说了,
在github上创建后的git仓库是空的,不过可以从这个仓库克隆出新的仓库,也可以把
一个已有的本地仓库与之关联,然后把本地仓库的内容推送到github仓库。
首先可以在本地的仓库目录下运行git命令:
git remote add origin git@github.com:coderman/learngit.git
Origin是远程仓库的意思,默认叫法。
下一步将本地仓库的内容推送到远程仓库中:
git push –u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
推送成功后就可以在github上查看已经推送的文件了。
从现在起只要本地做了提交,就可以通过命令:
git push origin master
把本地master分支的最新修改推送至github,现在github就可以当做自己的分布式版本库了
小结:
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
当然上面说的是从创建本地仓库与远程仓库交互,现在可以从github远程库上克隆项目到本地仓库中:
首先在github上创建一个新的文件,注意勾选initializethis respository with a README
选项,然后在里面添加这个仓库的简介。
下一步就是使用git clone 克隆一个本地仓库
Git clone git@github.com:coderman/gitskills.git
多人协作开发的话,各自从远程克隆一份即可。