一.基础知识
工作区:本地git管理的文件夹的内容
缓存区:git add将工作区内容更新到缓存区
本地分支:git commit将缓存区内容更新到本地分支
远程分支:git push将本地分支更新到远程服务器端分支
用git check -b 分支名 来创建新分支并切过去时,切换后的分支版本库与切换前分支版本库相同,且working tree clean
git管理的文件夹内的.gitignore文件可以告诉git不用管理有哪些后缀的文件
若untracked file在版本切换和分支切换前存在于工作区,则该文件会出现在切换后的工作区,且仍处于untrack状态
一个良好的习惯是,再切换分支和切换版本前git add,git commit一遍,保证working tree clean
二.常用指令
基础指令
git add -A //添加工作区所有文件到缓存区(包括.git,.gitignore等隐藏文件)
git add filename //添加指定文件到缓存区
git commit -m "注释" //将缓存区内容提交到当前分支,并附带备注
git push //将当前分支push到远程服务器,前提是远程服务器上已有对应分支
git pull //将远程服务器端分支的更新同步到本地分支
git status //比较工作区和分支文件异同(新增或删除了哪些文件)和缓存区的哪些文件还未提交到分支
git clone 仓库url //从远程服务器克隆仓库到本地
git init 仓库名 //在本地工作区创建新的仓库
删除、恢复文件
git rm filename//在工作区已经删除文件的情况下,该指令能从缓存区删除该文件,且git status查询时untracked file中不包含该文件(此时等同于git add filename)
git rm -f filename//在工作区没有删除文件的情况下,该指令能从工作区和缓存区删除该文件
git rm --cached filename //将指定文件从缓存区删除,不改变工作区和分支,且git status查询时untracked file中包含该文件
git checkout -- filename //将文件内容恢复到上个版本
这里有两种情况: 一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; 一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 总之,就是让这个文件回到最近一次git commit或git add时的状态
git reset HEAD filename //当我们在工作区修改了文件且add到了缓存区时,上一条指令是不能回退到修改前的版本;这条指令能用本地分支的版本覆盖缓存区的版本,再用上条指令就能恢复了
分支查询、切换操作
git checkout --orphan 分支名 //创建一个与当前分支无关的新分支并切换过去,查询git status时缓存区有东西待commit(且只有commit一次后才能用git branch查到该分支)
git checkout -b 分支名 //创建一个从当前分支衍生出的分支并切换过去,新分支与旧分支版本库相同,且working tree clean
git checkout 分支名 //切换到已有的分支
git branch -a //查看本地和远程服务器上的所有分支
git branch //查看本地所有分支
git branch -d 分支名 //删除非当前分支的分支
版本切换
git reset --hard 版本号 //上个版本可用HEAD^表示,上上个版本是HEAD^^;该命令会重置工作区和缓存区为版本库内容;若版本回退前有untracked file存在于工作区,切换版本会将该文件带到回退后的版本
git log //显示从最近到最远的提交日志(git bash输入git log后可按q退出日志)
git log --pretty=oneline //显示从最近到最远的提交日志,每个commit占一行,只显示版本号和comit时的注释
git reflog //用来记录你的每一次操作
$ git reflog e475afc HEAD@{1}: reset: moving to HEAD^ 1094adb (HEAD -> master) HEAD@{2}: commit: append GPL e475afc HEAD@{3}: commit: add distributed eaadf4e HEAD@{4}: commit (initial): wrote a readme file
本地分支与远端分支同步
git push --set-upstream origin //当本地创建新分支想创建远程分支时使用的命令
git push -u origin master//将远程空仓库克隆到本地后,使用该命令第一次推送本地master分支的所有内容到远端
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令