如下为git经常使用的命令的总结,方便你们查阅与参考:css
如下文章中,远程仓库表示git clone 来源的仓库,上游仓库是git add <remote>的仓库;html
借用图来讲明:git
几个概念:github
workspace:工做区,也就是咱们写代码的地方,它持有实际的文件;缓存
index:也能够叫作stage,暂存区,它实际上就是一个包含文件索引的目录树 ,当对工做区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新。bash
local repository:本地仓库,咱们使用“git commit”时,实际是把代码提交到了本地仓库;服务器
remote repository:远端仓库,当咱们使用“git push”时,才将咱们的本地代码提交到了远端的仓库,好比github上。编辑器
originide
远程库的名字就是origin,这是Git默认的叫法,也能够改为别的。fetch
克隆本地仓库:
git clone /path/to/repository复制代码
克隆远端服务器仓库:
git clone username@host:/path/to/repository复制代码
设置上游仓库,就可对上游仓库的代码进行fetch等操做,多用于协同开发;
git remote add <name> <url>复制代码
url是远程仓库的的地址,这么设置后,可用name代替url;
查看全部上游仓库分支:
git branch -r复制代码
查看全部上游仓库名字:
git remote复制代码
查看全部上游仓库名字和git地址:
git remote -v复制代码
删除上游仓库:
git remote rm <remote>复制代码
替换已有的上游分支的url:
git remote set-url <remote> <url> //这会使本来关联的remote的url替换成新的url复制代码
建立仓库的时候,
是“默认的”。在其余分支上进行开发,完成后再将它们合并到主分支上。
建立一个feature_x分支,而且切换到feature_x分支上:
git checkout -b feature_x //不加-b则是切换到某一分支上复制代码
删除分支:
git branch -d feature_x复制代码
查看当前所处分支:
git branch复制代码
查看包括上游仓库与远程仓库全部分支:
git branch --all复制代码
git fetch //拉取远程仓库更新到本地仓库,默认为git clone的那个仓库;
git fetch <name> <branch> //拉取远程仓库名为<name> 的 某一分支<branch>上的代码,<branch>可省略;复制代码
若是咱们有多个remote都须要更新,可使用:
git remote update
//或者
git fetch --all复制代码
若是有冲突,则要手动合并;
在合并以前能够选择性执行以下操做:
git diff <name>/<target_branch>//比较本地工做区与上游仓库特定分支的差异;
git stash //保存当前更改到缓存区
git merge <name>/<target_branch> //将上游仓库的特定分支代码合并到本地;
git stash pop //将缓存区代码提出到本地,并修改冲突;复制代码
快捷操做:
git pull //至关于git fetch和git merge的两部操做 复制代码
强制更新远程仓库的代码到本地(慎用):
git merge --rebase 复制代码
rebase与merge区别参考连接:hackernoon.com/git-merge-v…
缓存区存放工做区文件改动内容,当执行git stash后,全部改动被放到缓存区,而且工做区恢复到没有改动以前。
git stash
git stash pop复制代码
添加到暂存区(index):
git add <filename>;//添加单个文件;
git add . //git 2.0 以上添加全部改动;
git add -u //添加修改某些文件和删除某些文件的改动,但不添加新建文件的改动;复制代码
提交暂存区的改动到本地仓库:
git commit -m "代码提交信息"复制代码
推送本地仓库改动到远程仓库,好比要提交到master分支上:
git push origin master复制代码
强制推送(慎用):
git push --force复制代码
列出当前目录全部尚未被git管理的文件和被git管理且被修改但还未提交(git commit)的文件:
git status复制代码
查看全部commit记录:
git log复制代码
git log经常使用选项:
选项 | 说明 |
---|---|
-p | 按补丁格式显示每一个更新之间的差别 |
–stat | 显示每次更新的文件修改统计信息 |
–shortstat | 只显示 –stat 中最后的行数修改添加移除统计 |
–name-only | 仅在提交信息后显示已修改的文件清单 |
–name-status | 显示新增、修改、删除的文件清单 |
–abbrev-commit | 仅显示 SHA-1 的前几个字符,而非全部的 40 个字符 |
–relative-date | 使用较短的相对时间显示(好比,“2 weeks ago”) |
–graph | 显示 ASCII 图形表示的分支合并历史 |
–pretty | 使用其余格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式) |
限制输出长度
除了用 -n
来限制输出 log 的条数,还能够用 --since
和 --until
按照时间做限制。
用 --author
选项显示指定做者的提交,用 --grep
选项搜索提交说明中的关键字。
执行git reset --hard commit_id
:
例如咱们须要回退到新增MVC模式
的上一个版本,则执行:
git reset a5f2a27f02d32b666e01c24ed2218598db57a183 //此为默认方式,不带任何参数的git reset它回退到某个版本,只保留源码,回退commit和index信息复制代码
若是是--hard参数,则完全回退到某个版本,本地工做区也会变为上一个版本的内容:
git reset --hard a5f2a27f02d32b666e01c24ed2218598db57a183复制代码
若是是--soft参数,会保留工做区和暂存区的记录,在下次能够直接commit:
git reset --soft a5f2a27f02d32b666e01c24ed2218598db57a183复制代码
这种状况下在push时,要执行:
git push --force 复制代码
比较当前工做区与暂存区之间的差别:
git diff复制代码
比较暂存区与本地仓库之间的差别:
git diff --cached复制代码
比较当前工做区与本地仓库之间的差别:
git diff Head复制代码
比较当前工做区与另一个分支的差异,好比分支为test:
git diff test复制代码
比较当前工做区与暂存区有哪些文件被改动,改动了多少行:
git diff --stat复制代码
比较两个分支的操做:
git diff <source_branch> <target_branch>复制代码
列出即将push的全部git commit ,编辑这些commit,能够对这些commit进行合并,修改,丢弃,编辑,拆分操做:
git rebase -i //会打开编辑器,可修改commit记录
git rebase -i <after-this-commit> //当前分支中的全部提交复制代码
rebase 参考连接git-scm.com/docs/git-re…;
rebase 拆分commit参考连接:www.codebelief.com/article/201…/
git简易指南:www.bootcss.com/p/git-guide/
git协同开发:www.cnblogs.com/arkenstone/…
github文章借鉴:github.com/WarpPrism/B…
gitbook:gitbook.liuhui998.com/index.html