GIT常用命令大全(二)
1.忽略文件权限或文件所有者
git config core.filemode false // 当前版本库 git config --global core.fileMode false // 所有版本库 cat .git/config //在git顶层管理的目录,查看当前git本地仓库的配置文件
2.忽略某文件或某目录所有文件的变化
//1、对于还没有track的文件或目录(没有add和commit的文件) (1)~/.gitconfig 忽略规则由本机所有仓库共用 如: [user] name = yourname email = yourname@email.com [gui] encoding = utf-8 [core] excludesfile = ~/.gitignore 也可以用命令设置 git config --global core.excludefile ~/.gitignore (2).git/info/exclude 仓库内根文件夹全局忽略文件的配置文件,配置该文件可以忽略。支持正则表达式 (3).gitignore 可以在仓库某一级目录下的创建该配置文件,增加忽略文件的规则。若在仓库的根文件夹创建,效果等同于.git/info/exclude配置文件 //配置语法: 以斜杠“/”开头表示目录; 以星号“*”通配多个字符; 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表; 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录; //2.对于已经缓存,但未commit的文件 git rm --cached filename 使用命令将要忽略的文件从缓存的索引中删除,再使用1中的方法增加忽略 git reset HEAD filename 也可以使用这个 //3.对于已经track的文件 忽略跟踪(提交代码时,忽略某一个文件不提交,即某个文件不被版本控制) git update-index --assume-unchanged FLIE #FILE是目标文件路径 恢复跟踪 git update-index --no-assume-unchanged FLIE #FILE是目标文件路径 不过如果执行 git checkout和git reset的时候仍然会影响到这些文件,并把内容恢复到被跟踪的内容(再次修改仍然不会被跟踪)。 如果忽略的文件多了,可以使用以下命令查看忽略列表 git uls-files -v | grep '^h\ ' 提取文件路径,方法如下 git ls-files -v | grep '^h\ ' | awk '{print $2}' 所有被忽略的文件,取消忽略的方法,如下 git ls-files -v | grep '^h' | awk '{print $2}' |xargs git update-index --no-assume-unchanged
3.合并多次commit为一次commit
git rebase -i HEAD~4 对最近的 4 个 commit 进行 rebase 操作; 操作Commands : pick:保留该commit (缩写p) reword:保留该commit,但要修改该次commit的注释(r) edit:保留该commit,但要停下来修改该提交(不仅仅修改注释)(e) squash:将该commit和前一个commit合并(注释也合并)(s) fixup:将该commit和前一个commit合并,放弃当前 commit 的注释(f) exec:执行shell命令(x) drop:丢弃该commit(d) 编辑后保存退出,git 会自动压缩提交历史,如果有冲突,记得解决冲突后,使用 git add . git rebase --continue 重新回到当前的 git 压缩过程 如果你想放弃这次压缩的话,执行以下命令 git rebase --abort 推送到远程仓库 git push -f
4.删除某次commit
可以使用 git 压缩 rebase 指令来删除某个 commit 可以通过 git rebase -i HEAD~1 (对最近1次 commit 进行 rebase) 或 git rebase -i 9fbf10(对 commit id 前几位为 9fbf10 的 commit 之后的 commit 进行 rebase); 将需要删除的 commit 设置操作指令 drop ,保存退出即可; 在执行 git log 时,可以发现该条 commit 已经从提交历史中删除了;
5.修改当前commit的注释
git commit --amend
出现有注释的界面(你的注释应该显示在第一行), 输入i
进入修改模式,修改好注释后,按Esc
键 退出编辑模式,输入:wq
保存并退出。ok,修改完成。
如果修改之前的注释,可以使用git rebase -i [commit_id]指令,使用edit的选项