Git是目前世界上最先进的分布式版本控制系统。
创建版本库
mkdir <dir> //创建一个空目录<dir>
cd <dir> //跳转至目录<dir>
pwd //显示当前目录
git init //在当前目录初始化一个Git仓库
创建一个Author,让Git知道是谁在操作这个Git仓库,需要用到Name、Email
git config --global user.email "Your [email protected]"
git config --global user.name "Your name"
提交文件至Git
git add <file> //将文件file添加到当前的Git仓库
git commit -m <"message"> //将git add添加的文件提交到Git仓库,<"message">为本次提交的说明,每次提交都会生成一个对应的commit_id
git status //查看当前状态
修改与删除
修改版本
git log //按照由近到远的顺序显示最近提交的日志,会显示出每一次提交的commit_id
git reflog //记录每次的命令
Git中有一个指向当前版本的HEAD指针,只需要改变这个指针指向的commit_id就可以更改版本:
git reset -- hard commit_id //使HEAD指针指向commit_id版本
关于工作区与版本库
工作区:项目文件保存的目录;
版本库:在工作区中有一个隐藏的文件夹.git,就是Git的版本库;
版本库中,有暂存区、主分支master、自己创建的其他子分支、以及指针HEAD;
git add 实质上是将工作区的文件修改添加到暂存区;
git commit 实质上是将暂存区中的内容提交到当前分支上;
撤销修改
git checkout -- <file> //直接丢弃工作区的修改
git reset DEAD <file> //撤销暂存区的修改
git reset -- hard commit_id //撤销commit_id的提交
git checkout -- <file> //实际上是用版本库中的文件替换工作区的版本,可以用于还原修改与删除
删除文件
rm <file> //删除工作区文件
git rm <file> //删除工作区与版本库中的文件
Git分支管理
初始化Git仓库时会创建一个唯一的主分支master,master指向最新的提交,HEAD指针指向master,表明当前的提交点;
每一次提交,master向前移动一步,指向最新的提交;
HEAD指针指向新的master,完成版本更新;
当创建一个新的分支dev时,Git创建了一个新的指针,此时dev指向与master相同的提交;
将HEAD指针指向dev,使得新的分支dev成为当前使用的分支,后面所有的提交都会提交至dev分支;
git commit提交一次后,dev分支向前移动一步,HEAD指针指向dev分支上最新的提交,但master不变;
当dev分支上的工作内容完成,需要将dev分支合并至master分支,只需使master指向dev的最新一次的的提交即可。
相关指令
git branch <dev> //创建dev分支
git checkout <dev> //切换至dev分支
git checkout -b <dev> //创建dev分支,并切换至dev分支
git branch //查看所有分支,当前分支前有一个*号
合并分支步骤
- 切换至master分支,使master分支成为当前分支 git checkout master
- 将指定分支dev合并至当前分支 git merge
- 删除子分支dev git branch -d
git merge <dev> //将dev分支合并至当前分子
git branch -d <dev> //删除dev分支
git branch -D <dev> //删除一个没有合并过的分支,当这个分支的所有工作内容都不想要时,可以用次命令
git merge --no-ff -m "message" <dev> //将dev分支合并至当前分支,并保留合并分支的所有信息
临时工作保存
git stash //保存当前的工作现场
git stash list //显示已经保存的所有工作现场
git stash apply stash@{0} //恢复指定的stash
git stash drop //删除stash
git stash pop //恢复stash并删除
标签管理
git tag <name> //创建一个名为name的标签
git tag //查看所有标签
git tag -a <tagname> -m "message" //创建一个名为tagname的标签,标签的信息为message
git show <tagname> //查看标签tagname的信息
git push origin <tagname> //推送一个本地标签;
git push origin --tags //推送全部未推送过的本地标签;
git tag -d <tagname> //删除一个本地标签;
git push origin :refs/tags/<tagname> //删除一个远程标签。
远程操作
git clone <https://github.com/google/glog.git> //将https://github.com/google/glog.git上的项目下载至本地