Git - lichuncen/lichuncen.github.io GitHub Wiki
git diff
不仅能提供工作区和暂存区的文件对比,可以说能提供任意文件差异,如下:
git diff filepath | 工作区与暂存区某文件对比 |
---|---|
git diff HEAD filepath | 工作区与 HEAD(当前工作分支) 比较,HEAD 也可替换为任意一次 commitID |
git diff --staged 或 --cached filepath | 暂存区与 HEAD 比较 |
git diff branchName filepath | 当前分支的文件与 branchName 分支的文件进行比较 |
git diff commitId filepath | 与某一次提交进行比较 |
git diff commitID1 commitID2 | 两次 commit 提交间文件对比 |
由于历史原因,diff有三种格式:
* 正常格式(normal diff),用于AT&T版本的Unix,显示结果太简单
* 上下文格式(context diff),用于BSD版本的Unix,相似度高重复度高
* 合并格式(unified diff),由GNU推出
patch 补丁即为根据 git diff
生成的文本内容文件,最简单的生成方法为 git diff > test.patch
git apply patch
根据 patch 文件内的信息,在现有文件中添加或删除内容。这里添加或删除的操作,和手动修改并无多大区别,即修改内容还是在工作区,不会提交到暂存区。git apply --reject patch
自动合入patch中不冲突的代码改动,同时保留冲突部分。
两个类似命令:git format-patch commitA commitB
和 git am
。前者会将一次 commit 的所有信息也带上,如作者,时间,节点描述等,再配合后者将 patch 内容应用到当前分支。 与 git apply
的不同点是,这里补丁不再只在工作区,你会发现当前分支多 commitA 和 commitB 之间的提交记录。
将指定commit应用于其他分支
$ git cherry-pick <commitHash> $ git cherry-pick <BranchName> $ git cherry-pick <HashA> <HashB>
In a Year & EmailAddress & Individual Repo & Branch(Master/gh-pages)
创建 checkout -b 合并merge 删除branch -d
自动合并,如有冲突需修改后重新提交
master稳定而dev合并,在自己分支开发
保存现场stash恢复现场stash list且apply或pop
将其他分支的代码修改合并到当前分支cherry-pick
克隆项目时默认只有master分支,重建与新建不同
# 本地重建远程dev分支
$ git checkout -b dev origin/dev
提交push分支前最好先pull一遍,本地合并解决冲突
# 如果本地pull失败,设置dev和origin/dev的链接
$ git branch --set-upstream-to=origin/dev dev
rebase用来将本地提交“挪动”位置,将提交历史拉直
Reset 撤销
- 撤销未保存至暂存区的代码
git checkout -- filepath
或git reset -- hard HEAD
- 撤销已保存至暂存区但是还未提交到代码库的代码
git reset HEAD
- 撤销已提交到本地代码库但还未 push 到远端进行同步的代码
git reset commit_id
不需要保留修改则git reset --hard commit_id
- 撤销已提交到远端的代码只能Revert