From 7f9401cd600b45ab38a01cb4e4887d42318649f0 Mon Sep 17 00:00:00 2001 From: yx-ren Date: Sun, 17 Nov 2019 22:46:43 +0800 Subject: [PATCH] add rebase, patch, command --- tools/git.txt | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tools/git.txt b/tools/git.txt index a653306..0b617d3 100644 --- a/tools/git.txt +++ b/tools/git.txt @@ -22,6 +22,7 @@ git init # 提交修改 ############################################################################## git add +git add -u 提交work directory中所有已track的文件至staging area git commit -m "descriptions" git commit --amend 对最近一次的提交做内容修改 git commit --amend --author "user_name " 修改最近提交用户名和邮箱 @@ -197,6 +198,45 @@ git push origin 推送指定标签到远程 git push origin --tags 推送所有本地标签到远程 git push origin :refs/tags/ 删除远程标签(先删除本地标签) +############################################################################## +# rebase(换基) +############################################################################## +# rebase 在日常中常用功能主要是两个, 多人协同开发定期rebase master以及压缩某分支多个commit +git rebase master 常见于多人开发, 每个开发人员从master checkout出自己的分支, 开发一段时间后提交至master之前最好rebase一下, 防止冲突, + 就算真有冲突在本地解决好过强制提交, 开发流程中尽量保证master的干净整洁 +git rebase -i HEAD~n 压缩当前分支的n个commit并合并为1个commit, 常见第一行为pick, 剩下的n-1行为squash + +git rebase --abort # rebase过程中发生错误, 可以利用该命令终止整个rebase过程 +git rebase --continue # rebase过程中发生冲突, 在解决冲突后可以利用该命令进行后续过程 + +############################################################################## +# 打patch(补丁) +############################################################################## +# 生成diff patch文件(git可以识别diff文件) +git log -n -p > diff.patch # 生成某分支过去n个commit的文件diff信息至单个diff文件 +git diff <--cached> diff.patch # 针对当前缓存区的内容生成diff文件 + +# 利用apply打patch +git apply --check diff.patch #检查是否可以正常应用, 无回显证明无冲突 +git apply --stat diff.patch #查看应用diff文件后的文件变化 +git apply diff.patch #打patch, 仅仅改变文件信息, 无commit信息, 仍然需要add, commit + +# 利用--format-patch生成patch, 带commit信息 +git format-patch -n   #生成分支最近的n次commit的patch +git format-patch .. #生成两个commit间的修改的patch(包含两个commit. 都是具体的commit号) +git format-patch -1 #生成单个commit的patch +git format-patch #生成某commit以来的修改patch(不包含该commit) +git format-patch --root   #生成从根到r1提交的所有patch + +# 利用am打patch +git apply --check 0001-update-bash.sh.patch #检查patch是否冲突可用 +git apply --stat 0001-update-bash.sh.patch #检查patch文件变更情况, 无回显证明无冲突 +git am 0001-update-bash.sh.patch #将该patch打上到当前分支, 带commit信息 +git am ./*.patch #将当前路径下的所有patch按照先后顺序打上 +git am --abort #终止整个打patch的过程, 类似rebase --abort +git am --resolved #解决冲突后, 可以执行该命令进行后续的patch, 类似rebase --continue + +############################################################################## ############################################################################## # 使用GitHub