Git指令整理

来源:互联网 发布:网络与手机失泄密 编辑:程序博客网 时间:2024/04/26 00:27

好好学习一下Git, 之前都是可视化界面操作的学了才知道,还是指令方便啊。
官方文档 写得非常好,受益匪浅.. 就是书太厚啊啊

还在整理,边试边记在整理 慢慢来 ..

Git的基本工作流

Git仓库 用来保存项目的元数据和对象数据库的地方。
工作目录 本地的工作目录。
暂存区域一个“索引”文件,保存了下次讲提交的文件列表信息。

基本的 Git 工作流程如下:
1. 在工作目录中修改文件。
2. 暂存文件,将文件的快照放入暂存区域。
3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

文件的四种状态:
1. untracked 未追踪
2. unmodified 未修改
3. modified 已修改
4. staged 已暂存

Git配置

初始化 $ git init
用户信息姓名 $ git config --global user.name "Aloe"
用户信息邮箱 $ git config --global user.email llh@betahouse.us
检查配置信息 $ git config --listgit config <key>

获取帮助

$ git help <verb>$ git <verb> --help$ man git-<verb>

仓库基础操作

$ git add <file>1.将未追踪文件添加为追踪文件并至暂存区域2.将已修改文件添加至暂存区域3.合并时把有冲突的文件标记为已解决状态提交至仓库$ git commit -m 'initial project version'跳过暂存区域提交至仓库 $ git commit -a克隆已有仓库$ git clone [url]克隆已有仓库,并更改本地仓库名$ git clone [url] [repositiry-name]检查状态$ git status检查状态 紧凑格式$ git status -s|--short    $ git status -s      M README             右M修改过的文件未暂存    MM Rakefile           暂存区域后又有修改并未刷新暂存区    A  lib/git.rb         A暂存区域文件(staged)    M  lib/simplegit.rb   左M修改了并以暂存    ?? LICENSE.txt        ??未追踪文件

忽略文件

$ cat .gitignore*.[oa]*~

(glob 模式) (要外链)

查看修改

未暂存 $ git diff ,即当前工作目录下该文件与暂存区域中快照的比较
已暂存$git diff --staged|cached

git diff 使用插件

$ git difftool --tool-help  查看你支持哪些插件$ git difftool --tool=vimdiff

移除文件

可以glob匹配模式
彻底移除 $ git rm <file>
强制彻底移除 $ git rm -f <file> , 若有修改并已换存
移除追踪,保留文件 $ git rm --cached <file>

移动文件

$ git mv file_from file_to

标签

列出标签 $ git tag $ git tag -l 'v1.8.5*'

创建附注标签  $ git tag -a v1.4 -m 'my version 1.4'查看 $ git show v1.4创建轻量标签  $ git tag v1.4-lw查看 $ git show v1.4-lw

对过去的提交打标签 $ git tag -a v1.2 9cgeb02 需要提交当此的校验和

共享标签 (git push不会推标签到远程服务器)

$ git push [remote-name] [tag-name]  单个标签$ git push [remote-name] --tags      全部标签

检出标签 ?

查看历史

$ git log  // 上新下旧

-p 每次提交内容的差异。-p -2仅显示最近两次。

--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)仅显示最近的 n 条提交

--since,--after仅显示指定时间之后的提交。$ git log --since=2.weeks

--until, --before 仅显示指定时间之前的提交。

--author 仅显示指定作者相关的提交。

--committer 仅显示指定提交者相关的提交。

--grep 显示提交说明中含指定关键字的提交,同时满足两个必须用--all -match

-S 仅显示添加或移除了某个关键字的提交

撤销操作

重置上一次提交commit $ git commit --amend
取消暂存文件 $ git reset HEAD <file>
撤销对文件的修改 $ git checkout -- <file>

分支

低效版本控制系统分支通常需要完全创建一个源代码目录的备份;
Git的分支本质上仅仅是指向提交对象的可变指针HEAD,默认分支master。

提交对象(Commit Object)指向暂存内容规定快找,包涵作者的姓名邮箱、提交时输入的信息、指向它父对象的指针。

首次提交对象及其树结构

提交对象及其父对象 ‘ Snapshot快照 ’

分支创建 $ git branch <branch-name> 创建了一个可移动的新指针在当前提交对象上
分支切换 $ git checkout <branch-name> 即改变 HEAD指针的指向
分支创建并切换到新分支 $ git checkout -b <branch-name>

合并到master分支 (合并有merge指令和rebase指令)

$ git checkout master$ git merge hotfixmerge指令合并分支会找最优的共同祖先做简单的三方合并.合并后可能不止一个父提交.

查看冲突文件(未合并状态) $ git status
可视化合并工具 $ git mergetool

删除分支 $ git branch -d <branch-name>
强制删除分支 $ git branch -D <branch-name>

查看分支列表 $ git branch *未Head所指
查看各个分支当前所指向的对象 $ git log --decorate
查看各个分支的最后一次提交 $ git branch -v
查看已合并到当前分支的分支 $ git branch --merged
查看未合并到当前分支的分支 $ git branch --no-merged
查看历史提交、各个分支的指向以及项目分支分叉的情况 $ git log --online --decorate --grapg --all

分支操作完整例子
变基 rebase 还不太懂..

远程仓库

远程仓库默认名:origin

查看已配置的远程仓库 $ git remote
查看已配置的远程仓库的简写和url $ git remote -v
添加远程仓库 $ git remote add <shortname> <url> shortname仓库的简写

从远程仓库中抓取与拉取

$ git fetch [remote-name] 会抓取上一次抓取后新推送的所有工作*$ git clone$ git pull

推送到远程仓库 $ git push [remote-name] [branch-name]
查看远程仓库 $ git remote show [remote-name]
远程仓库重命名 $ git remote rename [old-name] [new-name]
远程仓库的移除 $ git remote rm [remote-name]

远程分支

()

Git的校验机制

Git 用以计算校验和的机制叫做 SHA-1 散列,由40个十六进制字符串组成。
[具体校验原理]

版本控制系统

本地化版本控制系统 RCS
集中化版本控制系统 CVS、Subversion、Perforce
分布式版本控制系统 Git、Mercurial、Bazaar、Darcs

涉及点:
1. 版本控制系统对待数据的方法: 分布式直接纪录快照、集中化纪录差异
2. 克隆操作:分布式是对代码仓库的完整备份、集中化提取最新版本文件快照

1 0