git生成标准补丁
git diff > git apply --reject --whitespace=fix 0001.diff
git打补丁:错误:new blank line at EOF.
git apply --reject --whitespace=fix 0001.patch
将git的子目录做成子模块
git clone coloshine-server coloshine # 克隆仓库
cd coloshine
git branch -r br1 origin/br1 # 保留需要的分支
git branch -r br2 origin/br2
git remote rm origin # 删除远端地址
git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter coloshine -- --all # 转化为子模块
--tag-name-filter cat 该参数控制我们要如何保存旧的tag,参数值为bash命令,cat表示原样输出。所以,如果你不关心tag,就不需要这个参数了;
--prune-empty 删除空的(对子目录没有影响的)的提交
--subdirectory-filter coloshine 指定子模块路径
-- --all 该参数必须跟在--后面,表示对所有分支做操作,即对上一步创建的所有本地分支做操作。所以,如果你只想保存当前分支,就不需要这个参数了
# 以下的命令是进行仓库清理,减少子模块体积
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
#之后将子模块提交至远端仓库,删除原仓库中的对应目录,按照正常步骤添加子模块
git rm coloshine
git git submodule add origin/coloshine coloshine
git工作区的常用命令
git worktree add [-f] [--detach] [--checkout] [--lock] [-b <new-branch>] <path> [<commit-ish>]
git worktree list [--porcelain]
git worktree lock [--reason <string>] <worktree>
git worktree move <worktree> <new-path>
git worktree prune [-n] [-v] [--expire <expire>]
git worktree remove [--force] <worktree>
git worktree unlock <worktree>
修改已提交common内容
适用于本地已经提交没有push到远端仓库
执行git commit --amend
git会打开$EDITOR编辑器,它会加载这次提交的日志,这样我们就可以在上面编辑,编辑后保存即完成此次的修改。
git stash的常用命令
git stash
能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。
git stash pop
将当前stash中的内容弹出,并应用到当前分支对应的工作目录上。
注:该命令将堆栈中最近保存的内容删除(栈是先进后出)
git stash list
查看当前stash中的内容
git stash apply
将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况。
删除历史提交中的文件记录
git filter-branch --force --index-filter "git rm -rf --cached --ignore-unmatch filename" --prune-empty --tag-name-filter cat -- --all
文件不记录到git仓库中
在.gitignore
文件中不上传的文件。注意。该文件只能忽略以前没有提交过的文件,提交的文件需要删除以前的历史记录后方可生效