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 commitBgit 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用来将本地提交“挪动”位置,将提交历史拉直

LearningGitBranching

Reset 撤销

  • 撤销未保存至暂存区的代码 git checkout -- filepathgit reset -- hard HEAD
  • 撤销已保存至暂存区但是还未提交到代码库的代码 git reset HEAD
  • 撤销已提交到本地代码库但还未 push 到远端进行同步的代码 git reset commit_id 不需要保留修改则git reset --hard commit_id
  • 撤销已提交到远端的代码只能Revert
⚠️ **GitHub.com Fallback** ⚠️