目录
一 commit操作
对于 git 操作,每次修改都是有所记录,比如删除并不是真的删除了,所有的操作都记录在磁盘上,git 的本质就是以空间换方便。
有如下提交历史:
1 修改提交记录
在提交过程中,有时候发现某次的提交记录不恰当,需要修改,可以使用如下操作:
# git rebase -i 434b071f
将需要修改的提交的 pick
修改成 edit
,ctrl+x 退出,y 键保存,显示如下:
Stopped at f0f7a14... modfy a.c
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
然后依次执行命令:
# git commit --amend 在此修改记录
# git rebase --continue
2 删除提交
对于一个大型项目,开发周期的增加,导致提交的次数也增加,有可能一个功能会需要提交好几次,对于参与开发的人来说增加了负担,故此需要定时删除一些 commit 记录。但是,drop很多时候会出现错误,此错误无法解决,不建议使用。如下提交记录:
rebase 操作的命令如上图,包括删除某一次的提交记录。删除的记录是可以找到的,即可以回退。使用 git reflog 和 git reset 回到原来的位置。
如果是需要删除最新提交的记录,可是使用git reset --soft commit-id
进行回退。
3 合并提交记录
合并提交记录的操作有两个,都是合并到前一个commit中,具体的区别如下:
squash
操作需要重新编辑两次的提交,如下,红框内的为前两次的提交日志,需要注释掉,然后重新编辑此次的提交日志:
fixup
将提交日志丢弃,默认使用上次的提交日志。
二 stash功能
Git 提供了一个 stash 功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作(前提是文件已经被跟踪):
$ git stash #保存工作区
Saved working directory and index state WIP on dev: 6224937 add
merge
HEAD is now at 6224937 add merge
$ git stash list #查看已经保存的工作区
stash@{0}: WIP on dev: 6224937 add merge
工作现场还在,但是需要恢复一下,有两个办法:
$ git stash apply #恢复后,stash内容并不删除
$ git stash drop #删除stash内容
$ git stash pop #恢复的同时把stash内容也删了
多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
三 自定义功能
1 忽略特殊文件
有时必须把某些文件放到Git工作目录中,但又不能提交它们,每次 git status
都会显示“Untracked files …”,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的 .gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
GitHub已经写好的各种配置文件,只需要组合一下就可以使用了:https://github.com/github/gitignore。
最后一步就是把 .gitignore
也提交到Git,就完成了!
2 忽略文件夹
对于文件夹的忽略比较特殊:
# 注释行
# 忽略dbg文件和dbg目录
dbg
# 只忽略dbg目录,不忽略dbg文件
dbg/
# 只忽略dbg文件,不忽略dbg目录
dbg
!dbg/
# 只忽略当前目录下的dbg文件和目录,子目录的dbg不在忽略范围内
/dbg
?
:代表任意的一个字符;*
:代表任意数目的字符;{!ab}
:必须不是此类型;{ab,bb,cx}
:代表ab,bb,cx中任一类型即可;[abc]
:代表a,b,c中任一字符即可;[^abc]
:代表必须不是a,b,c中任一字符。
3 .gitignore失效
某些文件如果已经被纳入了版本管理中,后期在 .gitignore
中已经声明了忽略路径也不起作用,这时候我们就应该先把本地缓存删除,然后再进行 git push
操作,这样就不会出现忽略的文件了。
git清除本地缓存命令如下(例如删除 .idea
文件夹的版本控制):
# 先将 .idea 的文件路径加入 .gitignore
git add .gitignore
git rm -r --cached .idea
git add .
git commit -m 'update .gitignore'
这样就将 .idea
从版本控制中删除了。
4 .gitattributes
指定非文本文件的对比合并方式。
四 配置
config 配置有system级别 global(用户级别) 和local(当前仓库)三个 设置先从system-》global-》local 底层配置会覆盖顶层配置 分别使用–system/global/local 可以定位到配置文件:
1 查看配置
查看系统config:git config --system --list
;
查看当前用户(global)配置:git config --global- --list
;
查看当前仓库配置信息:git config --local --list
。
2 git命令中文显示乱码
使用git add添加要提交的文件的时候,如果文件名是中文,会显示形如897\232\350\256…的乱码,解决办法:git config --global core.quotepath false
。
原因:core.quotepath设为false的话,就不会对0x80以上的字符进行quote。中文显示正常。
五 查看 git项目的地址及子模块
使用命令:git config -l
。
关于子模块的介绍在第四篇中。