git 流程
安装:
1 yum -y install git*
2 源代码安装
make prefix=/usr/local all
make prefix=/usr/local install
安装文档:
make prefix=/usr/local doc info
make prefix=/usr/local install-doc install-html install-info
使用文档:
git <sub-command> --help
git help <sub-command>
git init
git add * [git clone url]
git commit -m "init"
git pull
git push origin develop
git push -f //强制推
修改上一次commit是的msg
git commit --amend 进入vim编辑界面
[--allow-empty 允许空提交]
修改历史版本中的msg
git rebase -i <commit-id>
删除上一版本中的某个文件
git rm --cached fileName
将修改过的文件加入暂存区
git add -u (update)
将添加删除修改的文件提交到暂存区
git add -A (All)
git add -i (进入交互模式)
git add -f file(提交忽略的文件到暂存区)
对一个文件的内容进行选择性提交
git add -p
git add filename 逆向操作
git reset -- filename
git reset HEAD filename
文件差异比较
git diff filepath [--word-diff 逐行逐字比较 默认按行比较] [--cache 对比暂存区的文件差异 默认比较未commit的文件]
比较上一版本
git diff HEAD^^ -- file
git diff [--word-diff 逐字比较]
git diff HEAD
git diff --cached
原基线和原暂存区比较
git diff stash@{1}^2^ stash@{1}^2
原暂存区和原工作区比较
git diff stash@{1}^2 stash@{1}
原基线和原工作区比较
git diff stash@{1}^1 stash@{1}
用stash@{1} 来回复进度
git stash apply stash@{1}
git diff B A //比较里程碑B A
git diff A //比较工作区 里程碑A
git diff --cached A //暂存区
git diff //工作区 暂存区
git diff --cached //暂存区 HEAD
git diff HEAD //工作区 head
git diff path1 path2 //非git文件比较
保存工作进度
git stash
查看保存的工作进度列表
git stash list
取出最近保存的工作进度
git stash pop
切换分支
git checkout <new_branch>
基于HEAD~3版本创建一个本地分支
git checkout -b newbranch HEAD~3
撤销工作区中尚未提交的修改
git checkout -- filename
git checkout .(全部)
使用master分支中的文件替换工作区和暂存区的全部或部分文件 较危险
git checkout HEAD . [filename]
恢复到之前保存的工作进度
git stash pop
删除 (默认删除最近的)
git stash drop
git stash sava "msg"
清楚所有的进度
git stash clear
基于进度创建分支
git stash branch
清理文件 同时会清理掉本地已修改的git代码
git clean -fdx
git reset --hard
测试可能删除的文件
git clean -nd
删除暂存区文件 工作区不受影响
git rm --cache filename
暂存区目录树被master重写
git reset HEAD
引用退一步 暂可以理解为commit 撤销一次
git reset --soft HEAD^
git reset --mixed HEAD^
设置别名
git config --global(当前用户) [--system 面向全部用户] alias.st status
开启颜色设置
git config -global color.ui true
搜索工作区文件内容
git grep key
查看工作区状态
git status [-s 精简格式输出] [-b(branch) 列出属于哪个分区] [--ignored]
编辑git config文件
git config -e
[默认对当前项目下的.git/config 文件编辑 (版本库级别)]
[--global 对当前用户全局的git配置文件编辑 .gitconfig (用户级别)]
[--system 系统级编辑 /etc/gitconfig (系统级别)]
设置config下的值
git config a.b.c d
表示设置 节点
[a "b"]
c = d
查看日志
git log [--stat 文件变更统计]
git log -p -2 //-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
git log --author=<pattern> //查看某人提交
git log --grep=<pattern> [filename]
git log filename //查看文件操作记录
git log --oneline --graph --decorate //图形查看提交树
重置master到某一版本
git reset --hard HEAD^(head^表示父版本 提交ID->sha1)
恢复master到某一版本
git reflog show master | head -n
找到需要的ID 执行
git reset --hart <commit-ID>
切换URL
git remote set-url origin git@127.0.0.1:tete/api.git
已注册的远程版本库
git remote -v
注册远程版本
git remote add new-remote [--no-tags 避开远程版本库中的里程碑引入本地] file:///path
修改远程版本库名
git remote rename new-remote new-remote1
获取所有远程版本库更新
git remote update
忽略上一个命令的远程更新
git config remote.remotename.skipDefaultUpdate true
删除注册的远程版本库
git remote rm remotename
将最近3个提交转换为补丁文件
git format-patch [-s 当前用户签名] HEAD~3..HEAD
工作区中搜索
git grep 'wxpay'
查看提交日志中每次修改的文件及修改大小
git log --pretty=fuller --stat
git log [--pretty=oneline精要 fuller提交者 raw原始数据]
git log [--graph 显示分支图] --oneline [-p 显示日志的时候显示改动] [--stat 变更概要]
重置到某一次提交
git reset --hard 9eaass0
git reflog show master | head -6
git reset -- hard master@{2}
打tag 里程碑
git tag -m "tag msg" tagname [ID 可选 默认HEAD]
获取tag名
git describe
git tag -n5 //获取五个tag名
git tag -d tagname //删除tag
git tag -m "f update" tagname HEAD^//-f 强制更新
显示里程碑D及其提交
git show D -- stat
图形工具
gitk --all //显示所有分支
gitk --since="2 weeks ago"
git mergetool //图形合并工具
gitg &
qgit &
文件追朔
git blame filepath [-L n,m 查看某段]
rebase
git rebase --onto <newbase> <since> <till> //自since到till
git rebase --onto <-i ...> <--continue> <--skip> <--abort>
-i 变基过程中被中断时可采用的命令 继续变基或终止 等
--continue 变基过程中遇到冲突而暂停时 先解决冲突后添加到暂存区不提交 然后在恢复变基操作时使用
--skip 变基过程中遇到冲突而暂停时 跳过当前提交而使用
--abort 变基过程中遇到冲突而暂停时 终止变基操作 回到之前分支时使用
克隆
git clone [--bare] [--mirror] <repository> <local-dir>
<repository> 源 <local-dir>本地目录
--bare 克隆裸版本库 已dir.git .git为后缀
--mirror 同上 不过对上有版本库进行了注册 这样可以使用git fetch与上游版本库持续同步
丢弃relog 默认90天之前的
git relog expire --all
git relog expire=now --all //将全部relog过期
对版本库进行整理
git gc
git gc --prune=now 清理未关联的对象
git gc --auto
分支
git branch [-v 查看分支 -r查看远程分支]
git branch branchname
git branch branchname start-point //从point开始做分支
git branch [-d 删除分支] [-D 强制删除分支]
git branch [-m -M 强制重命名]
将开发中的分支develop,合并到稳定分支master
git checkout master
git merge develop
git commit
开发中的分支develop,衍合到稳定分支master
git checkout master
git rebase develop
git rebase --continue