命令总结
本地git命令
感觉git常用的几个:add\commit\checkout\merge\reset\push\pull,其他的都没怎么用
git add filename
git commit -m “message”
github命令
$ ssh-keygen -t rsa -C "youremail@example.com"
git 是什么
Git是目前世界上最先进的分布式版本控制系统,简而言之,可以用作回滚文件版本,把你在过程中的任何版本都保留下来。
分布式和集中式的区别
集中式:干活之前先从中央服务器获得文件的最新版本,干完活再推送给中央服务器,必须要联网(网速限制了其使用的效果)
分布式:每个人电脑上有一个完整的版本库,中央服务器只是用来交换大家的修改
安装git
Linux上安装git:
1 | git |
Mac OS X上面安装git
Xcode里面自带了git,因此你只需要从App Store安装Xcode即可
WINDOWS 安装git
Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样。Cygwin的安装和配置都比较复杂,就不建议你折腾了。不过,有高人已经把模拟环境和Git都打包好了,名叫msysgit,只需要下载一个单独的exe安装程序,其他什么也不用装,绝对好用。
msysgit是Windows版的Git,从https://git-for-windows.github.io下载(网速慢的同学请移步国内镜像),然后按默认选项安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装完成之后,设置git的名字和email地址,用于在网络上区分用户
1 | git config --global user.name "Your Name" |
创建版本库
版本库又称为仓库,英文名为:repository,可以理解成一个目录,这个目录下任何文件的更改删除都能被git跟踪,任何时候都可以将其还原
创建一个版本库
选择一个合适的地方创建一个空目录:
1 | mkdir learngit |
pwd:用于显示当前所在目录的命令
使用windows系统是,请确保文件路径中没有中文
初始化git
```shell
$ git init
1 |
|
其中ls的意思是list,列出
把文件添加到版本库
首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。同样,word的改动也不能被跟踪。
注意:不能用windows自带的记事本来编写文件,因为其UTF-8的标准有问题(在文本最前面加了一段十六进制字符)
现在我们先建立一个readme.txt 文件,内容如下
1 | Git is a version control system. |
把一个文件放到git只需要两部
- 用
git add
指令把文件添加到仓库1
git add readme.txt
没有任何显示表示提交成功
- 用
git commit
指令告诉git,把文件提交到仓库
1 | git commit -m "wrote a redme file" |
简单解释一下git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录
查看文件的各个版本
我们现在修改readme.txt为如下内容:
1 | Git is a distributed version control system. |
现在运行git status
可以看到文件已经modified,但是还没有添加:
1 | $ git status |
接下来,我们使用git diff
查看文件的具体变化:
1 | $ git diff readme.txt |
git diff 顾名思义就是 difference
接下来,我们将提交文件,git add
1 | git add readme.txt |
在执行git commit
之前,我们先运行git status
看看当前仓库状态
1 | git status |
git status
告诉我们,readme.txt文件将要被提交,接下来,我们是用git commit
提交文件
1 | git commit -m "add distributed" |
接下来,我们再用git status
查看当前仓库的状态
1 | git status |
版本回退
现在已经学会了如何修改文件,那么我们再试着做一次,修改readme.txt文件内容如下:
1 | Git is a distributed version control system. |
然后用git status
查看git状态,然后用git diff
查看修改的内容,最终用git add
和git commit
提交修改
1 | git add readme.txt |
一旦出现错误,这样,我们就可以从最近的一个commit
开始恢复
现在,我们回顾一下readme.txt文件一共有几个版本被提交到Git仓库里了:
版本1:wrote a readme file
1 | Git is a version control system. |
版本2:add distributed
1 | Git is a distributed version control system. |
版本3:append GPL
1 | Git is a distributed version control system. |
用git log
命令,我们可以查看从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL
,上一次是add distributed
,最早的一次是wrote a readme file
。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
运行:
1 | git reset --hard HEAD^ |
hard指令的具体含义我们会在后面说明
此时看到,已经回到了上一个版本,但是我们会发现,最新的那个版本不见了。
为了找到最新的版本,我们应该向上找到那个版本号c82373d096fbc635b12d4cd,然后
1 | git reset --hard c82373 |
版本号不用全部填写,只要写一部分就可以了
但是,如果我们已经关闭了串口怎么办,这个时候,我们就需要git reflog
,找到之前的命令
1 | git reflog |
这样,我们看到第二行的id,我们就可以回滚了
小结:
HEAD
用来指定会退的版本,git reset --hard commit_id
用来回退- 可以用git log 查看历史版本
- 用git relog 查看历史命令,以回退历史版本
工作区和暂存区
工作区
工作区就是我们之前创建的git文件夹
版本库
工作区当中有一个隐藏的.git
文件,称为版本库,git版本库中保存了stage暂存区,和git自动创建的第一个分支master
,以及指向master
的一个指针叫head
git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支。
Git管理的是修改,比如你的文件修改后->add->第二次修改->commit,那么此时系统中保留的是你第一次修改的内容,可以用git diff HEAD -- readme.txt
命令查看当前Git中的文件和最新的文件的区别
撤销修改
用命令git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
删除文件
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm
命令删了:
1 | $ rm test.txt |
现在,你可以用git rm test.txt
来删除git中的文件,要么你可以用git checkout -- test.txt
来恢复文件
使用github
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
1 | $ ssh-keygen -t rsa -C "youremail@example.com" |
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,
点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
添加远程库
首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库:
在本地的git
仓库下运行命令:
1 | git remote add origin git@github.com:drawwon/learngit.git |
请千万注意,把上面的drawwon
替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。
注意:此时如果失败,可能是因为你创建库的时候添加了readme文件,那么本地文件就少一个readme.md,因此我们要先从远程pull下来才行,
1 | git pull origin master --allow-unrelated-histories |
最后的--allow-unrelated-histories
:是因为github不允许两个没有建立连接的库进行通信
再次push
1 | git push -u origin master |
-u:与远程库的master分支连接起来,在以后推送时简化命令
从现在开始,只需要在本地使用如下命令,即可push到github
1 | git push origin master |
命令小结
要关联一个远程库,使用命令git remote add origin git@github.com:drawwon/repo-name.git
;
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
从远程库克隆
要使用github开发最好的方式就是先在远程创建一个repository,勾选添加readme文件,然后git clone
远程库
1 | $ git clone git@github.com:drawwon/learngit.git |
或者
1 | $ git clone https://github.com/drawwon/leargit.git |
但是通过原生git的方式最快
分支管理
创建分支
首先,我们传建一个dev分支,并切换到dev分支:
1 | $ git checkout -b dev |
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
1 | $ git branch dev |
我们修改readme.txt并提交:
1 | $ git add readme.txt |
先在切换回master分支:
1 | git checkout master |
可以看到我们之前增加的内容不见了
现在,我们把dev分支的成果合并到master上面:
1 | git merge <name> #合并分支到当前分支上面 |
如果需要有历史版本的merge,那么请使用–no-ff
1 | git merge --no-ff -m "merge with no-ff" dev |
同步到github
接下来讲解一下如何将创建的工程同步到github上。
- 第一步:创建工程之后,用终端进入工程。
1 | $ cd /Users/hanwenguang/Desktop/pods/TestPreject |
- 第二步:建立本地仓库
1 | $ git init |
- 第三步:将本地项目工作区的所有文件添加到暂存区
1 | $ git add . |
- 第四步:将暂存区的文件提交到本地仓库
1 | $ git commit -m “注释" |
- 第五步: 在Github上创建自己的 New repository
1 | 与第一部分的1-4步骤相同。 |
- 第六步:将本地仓库关联到Github上(后加上仓库地址:第一部分中第五步的地址)
1 | $ git remote add origin 地址 |
- 第七步:将代码由本地仓库上传到Github远程仓库,刷新即可看到上传成功。
1 | //(不加这句可能报错出现错误的主要原因是github中的README.md文件不在本地代码目录中 |
这样,上传文件存储和上传已有工程都已经成功。接下来下赠送提交代码的命令:
- 第一步: 查看目前代码的修改状态:
1 | $ git status |
- 第二步: 查看代码修改的内容
1 | $ git diff <file> |
- 第三步: 暂存需要提交的文件
1 | $ git add <file> |
- 第四步 : 提交已暂存的文件
1 | $ git commit -m "注释内容" |
- 第五步: 同步到服务器
1 | 同步到服务器前先需要将服务器代码同步到本地 |
参考
作者:累了就回头_我在身后