December
4th,
2018
GIT 在新手使用过程中会有一些常见的问题,在这里收集整理。
Windows 系统中的中文文件名乱码
$ git config --global core.quotepath false # 显示 status 编码
$ git config --global gui.encoding utf-8 # 图形界面编码
$ git config --global i18n.commit.encoding utf-8 # 提交信息编码
$ git config --global i18n.logoutputencoding utf-8 # 输出 log 编码
$ export LESSCHARSET=utf-8
# 最后一条命令是因为 git log 默认使用 less 分页,所以需要 bash 对 less 命令进行 utf-8 编码
优雅地显示 log 信息
修改 ~/.gitconfig 文件,添加如下内容:
- lg1 以单行形式显示所有分支 log
- lgm 以单选形式显示当前分支 log
- lg2 以双行形式显示所有分支 log
[alias]
lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
lgm = log -m --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)'
lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all
lg = !"git lg1"
只显示当前分支的提交
git log --no-merges
对 log 进行排序
git log --topo-order # 父提交总是显示在子提交之后,显示提交时尽量避免在多个历史线上交错。
git log --date-order # 父提交总是显示在子提交之后,显示提交时按照提交的时间戳顺序。
排序小结
–topo-order 选项导致同一个分支上的提交在历史记录中显示尽量保持连续,在查看提交历史的时候,比较方便。 –date-order 选项导致有多个分支同显示的时候,提交按照时间戳顺序显示,最新的提交显示在最上面,在多个分支上同时进行开发的时候,比较方便。
ChangeLog
在项目中经常需要查看一段时间内的所有修改记录
cid=`git rev-parse --short HEAD`
git fetch origin
git lgm ${cid}..origin/${branch}
Filename too long
git有可以创建4096长度的文件名,然而在windows最多是260,因为git用了旧版本的windows api, 用如下配置解决此问题。
git config --global core.longpaths true
删除已经 add 的文件
# 不删除物理文件仅从 git cache 中删除 下次提交时从本地库中删除
git rm --cached "file-path"
# 删除 git cache 中的文件 且 删除工作区中的文件
git rm --f "file-path"
撤消放入缓存区(Index区)的修改
修改或新增的文件通过 git add 加入缓存区之后
GIT 在本地有三个重要的区域概念
- 工作区
- 暂存区
- 本地库
工作区 -> 暂存区
git add filename
暂存区 -> 工作区
撤出一个文件
git reset HEAD filename
暂存区 -> 本地库
git commit -m "xxx"
git commit --amend (对刚才的提交注释进行修改,不产生新的commit-id)
本地库 -> 暂存区
- 回退一个版本:
git reset --soft HEAD~1
本地库 -> 工作区
- 回退一个版本:
git reset HEAD^
- 回退多个版本:
git reset HEAD~n
- 回退清暂存区:
git reset --mixed HEAD~1
(默认参数) - 回退双清 :
git reset --hard HEAD~1
(重置本地HEAD指针,存置暂存区,工作区代码回退)
取某个文件的指定版本
git checkout commit-id file-path
查看指定文件的提交记录
# 如果该文件存在当前分支
git lg file-path
# 如果该文件不存在于当前分支
git lg -- file-path
查看 Commit 所在的分支
git branch --contains commitId
您的打赏是对我最大的鼓励!