一般状况下,在进行git操做的时候,你们最熟悉的流程:css
可能还有的同窗也常常git commit --amend -C head
,向上一个commit提交内容。
然而在平常生活中总会有一些其余对代码版本管理的需求,好比须要去修改好久以前的一个commit的内容等。html
本文主要记录一些git相对使用较少,可是很是有用的命令。linux
git rebase 有两个经常使用功能:git
从上游分支获取最新commit信息,并有机的将当前分支和上游分支进行合并。shell
对当前分支的历史commit进行修改,合并,删除等操做windows
你的分支和master冲突app
若是你git merge master
就会留下一个merge的commit。在这种状况下,咱们推荐使用git rebase master
,就能不留commit将当前分支和master有机的合并。ssh
以前某次提交,改错了一个变量spa
若是你修改那个变量而后再提交一个commit,这显然不是最优的。若是能将某次的提交挑出来修改就行了。固然git提供了这个功能,你可使用git rebase -i [git-hash| head~n]
,其中git-hash
是你要开始进行rebase的commit的hash,而head~n则是从HEAD向前推n个commit.code
当你执行git rebase -i
你会看到以下界面,须要你去选择对应的commit指定一种操做。下面提示了不少操做项。
git stash 主要功能是:
暂存当前没有提交的更改
git stash save 保存当前更改 git stash 保存当前更改 git stash pop 推出以前stash的内容更改 git stash apply 推出以前stash的内容更改 git stash save --keep-index 只stash没有被add的内容 git stash save --include-untracked stash还未加入git记录的文件 git stash list --stat 显示stash堆栈 git stash show stash@{0} 显示第x次的更改 git stash show 显示最近一次stash的更改 git stash show --patch 显示最近一次stash的详细更改 git stash save "stash msg" git stash branch new_brach stash@{0}
当作了更改以后可是没有编写完,这个时候发现线上有个bug,你须要停下当前分支去修bug,这个时候你能够提一个commit到当前分支,或则使用git stash
stash屡次是以堆栈的形式进行存储的。
git filter-branch的主要功能是
过滤全部提交记录,进行相应的操做
git filter-branch --tree-filter 'rm -rf .vscode' 删除全部分支的.vscode文件夹 git filter-branch --tree-filter 'rm -f xxx' xxx不存在,不报错 git filter-branch --tree-filter 'rm -rf .vscoe' -- --all(全部分支全部提交) git filter-branch --index-filter 'git rm --cached --ignore-unmatch password.txt' (只检查password.txt 一个文件) git filter-branch -f --prune-empty -- --all
你发现你错误的将一个不该该提交的文件提交,而后已通过了好久,已经累计了无数次提交。
这个时候就可使用git filter-branch将全部提交所有过滤一遍删除掉那个不该该提交的文件
git cherry-pick的主要功能是
从任何分支,抽取提交到当前分支
git cherry-pick git-hash git cherry-pick --edit git-hash pick 多个 git cherry-pick --no-commit git-hash git-hash git cherry-pick -x git-hash (添加cherry pick from 那个branch) git cherry-pick --signoff git-hash不修改author
当须要将多个分支上的提交合在一个分支合并到master的时候,显然若是这3个分支有关联,一次合并更为合理。
这个时候就可使用git cherry-pick
进行精细化的commit的操做。
git config --global core.autocrlf
linux osx是lf
windows 是crlf
若是你的源文件中是换行符是LF,而autocrlf=true, 此时Git add就会遇到 fatal: LF would be replaced by CRLF 的错误。有两个解决办法:
将你的源文件中的LF转为CRLF便可【推荐】
将autocrlf 设置为 false
若是你的源文件中是换行符是CRLF,而autocrlf=input, 此时git add也会遇到 fatal: CRLF would be replaced by LF 的错误。有两个解决办法:
将你源文件中的CRLF转为LF【推荐】
将autocrlf 设置为true 或者 false
.gitattributes
* text = auto *.html text *.css text *.jpg binary *.png binary *.ssh text eol=lf *.bat text eol=crlf
git submodule add git@example.com:css.gi
git log --walk-reflogs