git初识
git 安装与登陆
安装(linux):
1 | sudo apt-get install git |
登陆:由于git的分布式特性,每一个使用其的电脑都必须注册自己,如下:
1 | git config --global user.name "Your name" |
git创建版本库
创建一个空目录
1 | mkdir learngit |
将该目录初始化为git仓库
1 | git init #git的初始化,即将当前目录与git仓库进行关联,当前目录会自动生成一个.git文件夹 |
把文件添加到版本库
1 | echo "Git is a version control system" >> readme.txt |
git版本控制
版本回退
提交历史显示命令,用于查看提交历史记录,以便确定要回退到哪个版本
1 | git log #查看提交历史 |
回退命令,其中HEAD指向当前版本,HEAD^指向上一个版本,HEAD^^指向上上个版本
1 | git reset --hard commit_id #将仓库回退到指定id版本 |
当版本回退成功后,原来的版本丢失,通过 git log 无法查看其commit _id ,这时候可以使用git reflog
1 | git reflog #查看命令历史 |
工作区 暂存区 版本库
工作区:可以理解为自己的本机工作目录,并且这个目录是还未进入git版本库管理的。在这个状态下,我们可以进行增、删、改各种操作。
暂存区:是所有操作真正提交到版本库的前一步,主要是追踪各种操作,以及为多次操作后的批量提交作准备,避免频繁提交。
版本库:可以简单理解为仓库,进入版本库也就意味着已经登记入库了。版本库还可以进一步分为多个分支,一般有一个master主分支,多个次分支,这样可以进行多个版本的跟踪。
新增、修改与删除
不管是文件的新增,还是修改,我们在工作区完成操作后,都是通过add命令完成向暂存区提交的
1 | git add readme.txt |
若是删除文件,我们同样要向暂存区报备,通过rm命令记录删除操作
1 | git rm readme.txt |
最后通过commit命令提交到分支使操作真正生效
1 | git commit -m "add readme.txt/del readme.txt" |
操作回滚
操作回滚分为三类场景:(1)如果你只是误操作,还未进行add提交到暂存区,那么只需一步操作就可以反悔
1 | git checkout -- "readme.txt" #由于还未add,即意味暂存区还保留着该操作在工作区的上一状态,直接checkout就行 |
(2)如果你手残地add到了暂存区,那就要分两步完成回滚
1 | git reset HEDA "readme.txt" #将暂存区的该次误操作丢弃,并重置为分支中的最新版本状态,其他操作不受影响 |
(3)如果你不幸到已经commit了误操作,那即意味着误操作已经进入分支中,成为了最新版本,这时候只能通过版本回退的方式来补救
1 | git reset --hard HEAD^ #后退到误操作之前的那个版本,这样可能丢失除误操作以外的其他有用操作 |
从以上操作我们不难发现,暂存区的存在确保了工作区的不当操作不会直接影响分支;同时,我们可以将多次add/rm操作进行一次commit提交,可以起到对操作的分组效果;最后,如果你只是在场景(1)(2)回退,那么可以最大程度的减小对其他add/rm操作的影响,不至于在回滚某个操作时,丢失其他操作。而(3)版本回退显然不是针对某个特定操作,这种回退的代价是难以估量的。
git远程操作
与github进行连接
通过SSH协议将本地git仓库与github进行配对,首先生成SSH key
1 | ssh-keygen -t rsa -C "youremail" |
执行过后,生成.ssh
目录,其中id_rsa
和id_rsa_pub
分别代表私钥和公钥。我们只需将公钥中的字符串添加到github账户的”AccountSetting”的”SSH Keys”页面中,就OK了。
添加远程仓库
添加github仓库命令
1 | git remote add orgin 仓库地址 #orgin为默认远程仓库地址别名 |
将本地库推送到远程仓库
1 | git push -u origin master #第一次将本地的master分支推送到远程,以后可以省略'-u' |
克隆远程库
直接从远程克隆git仓库,也可以完成本地与远程的关联
1 | git clone <ssh/https>远程库地址 |