[TOC]
更新自己的分支开发(上班第一件事)
git checkout mastergit pull origin mastergit checkout zongqigit merger mastergit push zongqi
或者
git checkout -b zongqigit pull origin master
文件的三种状态
- untracked - 新增的文件,Git 根本不知道它的存在
- not staged - 被索引过又被修改了的文件
- staged - 通过
git add后被即将被提交的文件
git config
配置文件
~/.gitconfig
获取配置清单
git config --list
git config --list --system
git config --list --global
git config --list --local
git config --list 或者 cat ~/.gitconfig
git config --global user.name 'xxx'
git config --global user.emall 'xxx'
git config --global color.ui true
设置命令别名
git config --global alias.co chechout — 将checkout设置成co
git init
初始化git库
git init 与git init —bare 区别:
- 不使用
—bare选项时,就会生成.git目录以及其下的版本历史记录文件,这些版本历史记录文件就存放在.git目录下 - 使用
—bare选项时(俗称裸库),不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面.
git clone
git clone xxxx — 默认拉取master分支
git clone -b branchName xxxx — 拉取指定分支
git cherry-pick
当你通过一番挣扎终于搞定一个bug,顺手提交到 git 服务器,心里一阵暗爽. 这时发现你当前所在的分支是 master !!!这个分支不是开发者用来提交代码的,可惜现在剁手也晚了.
git checkout master—切到主分支git log— 获取你提交的版本号git checkout -b dev—切换到开发分支git cherry-pick [commit id]
git mv
重命名
git mv [file-oldName][file-newName]— 改名文件,并且将这个改名放入暂存区
移动文件
git mv [file-oldName_dir][file-newName_dir]
git checkout
git checkout --[fileName]— 撤销某个文件的修改
git checkout HEAD -- [fileName] — 恢复到fileName最近的一次提交
撤销git add后的文件
git add之后,文件就参加到了暂存区,想丢弃修改分两步.
git reset HEAD [fileName]— 从暂存区移除文件git checkout --[fileName]— 撤销这个文件的修改
git reflog
这个一直没用过
ithelp.ithome.com.tw/articles/10…
git remote
更改仓库的源
git remote set-url origin XXX
Git同时提交到多个远程仓库
git remote add all [url]git remote set-url --add all [url]git config branch.master.remote all
注意:: all 是可以随意起名字的.
最后push 的时候
git push all master
git add
git add [file1][file2]…— 添加指定文件到暂存区git add .— 添加当前的所有文件到暂存区
- git最最小的颗粒是
hunk
git add [file_name] -p
使用命令git add -p时,你可以在每个改动“块”(即:连续的改动会被组织到一起)时进行一些选择,比如:切分当前块为更小的块、跳过一个改动块、甚至手动的编辑该块,你可以敲入?来查看所有该命令提供的选项。
- 若不小心把多余的文件add进去了,staging area 移除出来,但不能删除文件
git rm [file_name] --cached
git commit
git commit -m '描述信息'— 提交暂存区到仓库区git commit -a— 提交工作区自上次commit之后的变化,直接到仓库区. eg:git commit -a -m 'hello world',这个提交不需要使用git addgit commit -v— 提交时显示所有diff信息git commit --amend [file1]... -m '描述'— 向一个commit里追加新的改动文件
git reset
-
git reset –mixed此为默认方式,不带任何参数的
git reset,即时这种方式,它回退到某个版本,保留修改源码,回退commit和index信息. 下次提交还需要git add. -
git reset –soft回退到某个版本,保留修改源码,回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可(不需要
git add) -
git reset –hard彻底回退到某个版本,不保留修改源码,本地的源码也会变为上一个版本的内容
不会出现commit
git revert
会有commit
git diff
git diff --cached 或者 git diff --staged— 查看暂存区的改动
git difftool --cached — 使用工具查看
git push
git push origin branch-name --force —force 强制推送
git rebase
git merge
推荐:
不实用 Fast-forward的方式合并
git merge branche1 --no-ff
冲突情况
git mergetool
git rebase --abort
git tag
在使用Git 版本控管的过程中,会产生大量的版本,随着寒暑易节、物换星移,在这众多的版本之中,一定会有一些值得我们纪录的几个重要版本,这就是标签 (Tag) 能帮我们做的事.
轻量tag
轻量tag是指向提交对象的引用,
附注tag
附注Tag则是仓库中的一个独立对象。建议使用附注Tag。
git stash -暂时保存自己的修改
git stash save(save可以省略) -u '说明信息'— 保存到git 栈git stash list— 列出git栈信息git stash pop— 取出最近一次保存的内容git stash apply stash@{1}— 取出指定的内容git stash drop stash@{1}— 删除指定的内容git stash clear— 清空git 栈
git branch 分支
git branch— 列出所有本地分支git branch -r— 列出所有远程分支git branch -a--列出所有本地和远程分支git branch [branchName]— 新建一个,并依然停留在当前git checkout -b [branch-name]— 新建分支,并切换该分支git checkout [branch-name]— 切换分支git fetch origin branchname:branchname— 拉取远程分支到本地git branch -d (-D强制删除) [branch-name]— 删除本地分支git push origin --delete [branch-name]— 删除远程分支git branch -m [old_branch_name] [new_branch_name]— 重命名分支git branch --merged— 本地分支里哪些分支是已经合并进你当前所在的分支git branch --no-merged— 哪些分支还没有合并进当前所在的分支
切换分支注意事项
- 切换之前,确保当前分支的没有文件状态的变化. (可以使用
git stash保存起来) - 如果不小心地带着未commit的工作跳转到了另一分支下,不做任何修改直接再跳回去就好.
分支说明
- 功能(feature)分支 . 它是为了开发某种特定功能,
git checkout -b feature-x master
- 预发布(release)分支
git checkout -b release-1.2 develop
- 修补bug(fixbug)分支
git checkout -b fixbug-X master
git log
git log --pretty=oneline— 查看commit号- --oneline- 压缩模式,在每个提交的旁边显示经过精简的提交哈希码和提交信息,以一行显示。
- --graph- 图形模式,使用该选项会在输出的左边绘制一张基于文本格式的历史信息表示图。如果你查看的是单个分支的历史记录的话,该选项无效。
- --all- 显示所有分支的历史记录
- --decorate
git log --oneline -5
git log --oneline -5 --author="zongqi"
git log --oneline -5 --grep="index.html"
git log --oneline -5 --before='2017-07-01' 1 week, 3 days
git log --oneline -5 --before='1 week'
git bisect
tig — 查看小工具
brew install tig
内建图形化工具— gitk
gitk
git gui
关键字— WIP:
此时提交的代码不能merge master
常用命令说明
| 命令 | 简要说明 |
|---|---|
| git add | 添加至暂存区 |
| git add–interactive | 交互式添加 |
| git apply | 应用补丁 |
| git am | 应用邮件格式补丁 |
| git annotate | 同义词,等同于 git blame |
| git archive | 文件归档打包 |
| git bisect | 二分查找 |
| git blame | 文件逐行追溯 |
| git branch | 分支管理 |
| git cat-file | 版本库对象研究工具 |
| git checkout | 检出到工作区、切换或创建分支 |
| git cherry-pick | 提交拣选 |
| git citool | 图形化提交,相当于 git gui 命令 |
| git clean | 清除工作区未跟踪文件 |
| git clone | 克隆版本库 |
| git commit | 提交 |
| git config | 查询和修改配置 |
| git describe | 通过里程碑直观地显示提交ID |
| git diff | 差异比较 |
| git difftool | 调用图形化差异比较工具 |
| git fetch | 获取远程版本库的提交 |
| git format-patch | 创建邮件格式的补丁文件。参见 git am 命令 |
| git grep | 文件内容搜索定位工具 |
| git gui | 基于Tcl/Tk的图形化工具,侧重提交等操作 |
| git help | 帮助 |
| git init | 版本库初始化 |
| git init-db* | 同义词,等同于 git init |
| git log | 显示提交日志 |
| git merge | 分支合并 |
| git mergetool | 图形化冲突解决 |
| git mv | 重命名 |
| git pull | 拉回远程版本库的提交 |
| git push | 推送至远程版本库 |
| git rebase | 分支变基 |
| git rebase–interactive | 交互式分支变基 |
| git reflog | 分支等引用变更记录管理 |
| git remote | 远程版本库管理 |
| git repo-config* | 同义词,等同于 git config |
| git reset | 重置改变分支“游标”指向 |
| git rev-parse | 将各种引用表示法转换为哈希值等 |
| git revert | 反转提交 |
| git rm | 删除文件 |
| git show | 显示各种类型的对象 |
| git stage* | 同义词,等同于 git add |
| git stash | 保存和恢复进度 |
| git status | 显示工作区文件状态 |
| git tag | 里程碑管理 |