GIT使用详解
Git SSH配置,分为三步
- 配置基本用户信息
- 配置SSH公钥和密钥
- 配置远程仓库公钥
Git Bash配置
1)$ git config --global user.name “huangyu”
2)$ git config --global user.email “huangyu@qq.com”
Get Clone
使用git clone从现有Git仓库中拷贝项目
Git clone <repo> <directory>
将仓库克隆指定的目录
克隆Ruby语言的Git代码仓库Grit,可以用下面的命令
$ git clone git://github.com/schacon/grit.git
执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个.git的目录,用于保存下载下来的所有版本记录。
如果要自己定义新建的项目目录名称,可以在末尾指定新的名字:
$ git clone git://github.com/schacon/grit.git mygrit
git clone时,可以使用不同的协议,包括ssh,git,https等,其中最常用的是ssh,因为速度快,还可以配置公钥免输入密码
git clone git@github.com:fsliurujie/test.git --SSH协议
git clone git://github.com/fsliurujie/test.git --GIT协议
git clone https://github.com/fsliurujie/test.git --HTTPS协议
配置ssh公钥和私钥
ssh-keygen rsa -C “your email”
rsa为加密算法,-C为注释信息
生成的公钥路径为~/.ssh/id_rsa.pub 私钥为~/.ssh/id_rsa
配置远程仓库公钥
拷贝内容,cat ~/.ssh/id_rsa.pub,复制到远程ssh key下即可
提交代码的步骤
git st #查看上次更新后的更改或者写入缓存的改动
git add <file> #添加修改或新增文件至缓存区
HEAD commit版本
Index staged版本
git diff #比较工作目录和暂存区域之间的差异
git diff --cached #查看已经暂存起来的文件(staged)和仓库之间(HEAD)的差异
git diff HEAD #显示工作版本(working tree)和HEAD的差别
git diff --stat #显示摘要而非整个diff
git commit -m “xxx” #将缓存区内容添加到仓库中
git reset HEAD <file> #用于取消已缓存的内容
git rm <file> #从git中移除某个文件
git rm -f <file> #如果删除之前已经修改过并且已经放到暂存区域的话,使用-f
git rm --cached <file> #从暂存区域移除,但仍希望保存在当前目录中
git rm -r * #递归删除该目录下的所有文件和子文件
git mv <old filename> <new filename> #用于移动或者重命名一个文件、目录、软连接
分支管理
1)git branch <branch name> #创建分支命令
2)git checkout <branch name> #切换分支
3)git checkout -b develop origin/develop #checkout远程Release分支,在本地起名为develop分支,并切换到本地develop分支
4)git branch -d <filename> #删除分支命令
git log -x #查看前x条提交信息
git log --online #查看历史记录的简洁版本
git log --graph #查看历史什么时候出现
git标签
git tag -a <标签> #为最近一次提交打上(HEAD)“v1.0”标签
git tag --decorate #查看标签
git tag -a v0.9 85fc7e7 #为某次提交追加标签
git log --oneline --decorate --graph
git tag #查看标签
git tag -a <tagname> -m “runoob.com标签” #指定标签信息命令
git checkout --readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
1)readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
2)readme.txt已经添加到暂存区后,又作了修改,现在,撤销就是回到添加到暂存区后的状态
3)readme.txt已将添加到暂存区,并且提交了后,又作了修改,现在,撤销啥也没有,打开readme.txt回到修改之前的状态
撤销修改,已经commit了
git revert -m 1 HEAD #创建一个新的commit,并且回到合并之前的状态
git reset --hard commid_id/HEAD~ #回退到指定的commit节点 #将本地仓库、暂存区、工作目录恢复到上一个版本(所有的修改都将失去)
git reset --mixed HEAD~ #将本地仓库、暂存区恢复到上一个版本,工作目录保存着修改
git reset --soft HEAD~ #将本地仓库、上一个版本、暂存区、工作目录保存着修改
没有commit前提下
git merge --abort #丢弃正在进行的合并
储藏与清除
背景:如果在其他分支开发,突然有个更紧急的bug需要修复,怎么办?
此时只要切回master分支,继续其他分支开发就可以。但是,要留意你的工作目录和暂存区那些还没有被提交的修改,它可能会和你即将检出的分支产生冲突从而阻止git切换到该分支。最好的方法时,在你切换分支之前,保持一个干净的状态,有两个方法:①将修改的文件存储起来,②将修改的文件清除。
储存文件:指的是在当前分支先将目前修改的文件保存起来(保存进度(stashing)),完成任务之后再回到该分支恢复进度(apply)。
git stash
默认情况下,git stash会缓存下列文件:
l 添加到暂存区的修改(staged changes)
l Git跟踪的但并未添加到暂存区的修改(unstaged changes)
但不会缓存以下文件:
l 在工作目录中新的文件(untracked files)
l 被忽略的文件(ignored files)
git stash --include-untracked(-u) #将当前工作目录已跟踪的文件储藏起来,同时存储未跟踪的文件,使用-a或者--all命令可以stash当前目录下的所有修改。
git stash list 查看储藏列表
git stash apply 将最近一次储藏恢复到工作目录,但是恢复后,储藏内容并不删除
git stash apply stash@{<num>} #恢复某个指定的缓存
git stash drop stash@{<num>} #将某个缓存从列表中移除
git stash pop 恢复最近一次缓存,并立即从列表上移除
如果不小心删除了缓存,可以使用g'i't fsck --lost-found命令查看,找到你刚才stash@{0}时成功删除的id,使用git show <id>查看是否为丢弃的改动,是,直接git merge <id> 即可找回
清除文件
对于工作目录中一些工作或文件,你想做的不是储藏而是移除
git clean 移除未跟踪文件(不包括忽略的文件),恢复不了
git clean -d -f 移除工作目录中所有未跟踪的文件以及空的子目录
git clean -d -x 移除未跟踪文件(包括忽略的文件)
远程仓库使用
远程仓库是指托管在因特网或其他网络中的项目的版本库。其常使用的指令有如下:
git clone <url> 克隆远程仓库到本地
git remote 列出每个远程仓库的简短名字
git remote -v 列出每个远程仓库的简短名字与其对应的 URL
git remote show [remote-name] 查看某个远程仓库的详细信息
git remote rename [old name] [new name] 重命名远程仓库
git remote rm [remote-name] 移除某个远程仓库
git remote add <shortname> <url> 添加一个远程仓库
git fetch [remote-name] 从远程仓库数据拉取最新到本地,但不自动合并本地的修改
git pull [remote-name] [branch-name] 把远程仓库数据拉到本地,并自行合并
git pull 的魔法经常令人困惑所以通常单独显式地使用 fetch 与 merge 命令会更好一些。
git push [remote-name] [branch-name] 把本地代码推送到远程仓库,一般先执行git
pull、在执行git push 确保代码是最新的,不然会被拒绝
git push [remote-name] HEAD:refs/for/[your branch] 将本地分支push到远程分支,经过评审之后才能merge到远程
如果一个分支没有关联到远程分支上,使用以下命令:git branch --set-upstream-to=origin/<remote branch> <your branch>
***如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令:
git branch --set-upstream branch-name origin/branch-name
设置别名
git config alias.br branch
git config alias.ci commit
git config alias.co checkout
git config alias.st staus
解决中文名字问题
git config core.quotepath false
Vim文件操作
退出vim
1)按ESC键
2)最下面出现一条能输入命令的地方->输入冒号:
3)输入命令
:w 保存文件但不退出
:w file 将修改另外保存到 file 中,不退出
:w! 强制保存,不退出
:wq 保存文件并退出
:wq! 强制保存文件,并退出
:q!不保存文件,强制退出
:e! 放弃所有修改,从上次保存文件开始再编辑