git协做经常使用命令

如下为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复制代码

分支

建立仓库的时候,

master

是“默认的”。在其余分支上进行开发,完成后再将它们合并到主分支上。

建立一个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>复制代码

交互式的rebase

列出即将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

相关文章
相关标签/搜索