我们之前已经使用过git config
设置相应的用户名和邮箱,这里可以强调等一下。
进行全局设置,可以执行以下指令:
git config --global user.name "<username>"
git config --global user.email "<email>"
如果对特定项目使用特定的用户名和邮箱,可以切换到项目的目录下,将上述的指令删除--global
参数,重新执行即可。
git config
除了一些寻常设定可以配置,还有一个强大的功能——设置别名。通过设置别名,我们可以简单便捷地输入指令。
例如,设置status
的别名为st
,通过指令:
git config --global alias.st status
我们还可以设置组合,例子如下:
git config --global alias.psm 'push origin master'
git config --global alias.plm 'pull origin master'
当然,以上的别名不是固定的,可以根据自己的习惯设定。
下面介绍 alias 功能强大的一面。
我们执行指令时,可以设置参数,个性化定制我们的指令。
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
呈现效果见下图,可以看出比起原来的git log
简洁了不少。
但是每次都需要输入这么长的参数,显然过于繁琐。这个时候 alias 的作用就显现出来了。
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
这样下次执行git lg
即可,调用我们的自定义的git log
。
以上配置都在~/.gitconfig
文件下,通过这个文件可以查看、编辑自己的配置,也可以输入git config -l
命令查看。
指令git diff
用于比较不同版本之间的代码变动。很清晰地使用红色表示删除,使用绿色表示增加。
这里需要说明的是,简单的git diff
用于比较当前文件和缓存区文件的差异,即比较当前文件和已经 add 的内容的差异。
下面介绍git diff
一些更具体的用法:
git diff --staged # 比较缓存区和版本库之间的差异
git diff <id1> <id2> # 比较两次提交之间的差异
git diff <branch1> <branch2> # 在两个分支之间比较
stash 的含义是存放、隐藏。git stash
就是将当前写的代码暂存、隐藏起来。
其主要用于当前代码没有写完,但是因为修复 bug 等因素需要做一次 commit 的情况。因为没有写完的代码没有实际的意义,不建议 commit。这个时候我们的想法就是将修改的代码暂存起来,等到需要时再将其还原。
详细用法如下:
git stash # 将代码暂存
git stash list # 查看暂存记录
git stash apply # 还原暂存内容
git stash drop # 删除缓存记录
git stash pop # 还原并删除暂存记录
git stash clear # 清空缓存记录
stash
的过程可以理解成一个栈。apply
、drop
和pop
后面都可以接数字,表示操作最近哪一条记录。
之前有学习git checkout
指令可以用于切换分支和标签,除此以外,它还可以作为撤销功能。
可以将其理解为将本地文件切换为缓存区里的内容,所以相当于将本地内容撤销。这里特别强调切换的内容是缓冲区的内容。
要执行撤销操作,可输入指令:
git checkout <filename> # <filename>为要进行撤销操作的文件名
git checkout ./ # 对整个文件夹进行撤销操作
例如,如果不小心错误调用了git stash apply
,可以使用git checkout
进行撤销操作。
与 git checkout
类似,git reset
主要用于版本回溯。
git reset HEAD^ # 回退上一个版本
git reset HEAD^^ # 回退两个版本
git rebase
和git merge
一样,都用于合并分支。
不过,git merge
还原了代码的来源分支进行合并;git rebase
通过时间顺序进行合并,减少分叉的情况出现。
两者各有优劣,依据需要进行选择。
开发的过程不可避免会遇到冲突。遇到冲突,自然就需要我们自行解决冲突。
产生冲突的原因是合作的两个人同时更改了同一个地方,Git 本身他没法判断哪个才是正确的版本,这个时候 Git 会智能提示存在 conflicts。
可以看到执行merge
指令后,存在冲突的地方由====
分出了上下两个部分,上部分一个叫HEAD
的字样代表是我当前所在分支的代码,下半部分是一个叫newBranch
分支的代码。
我们需要做的是移除那些不需要的代码,同时也把那些 <<< HEAD
、====
以及 >>>>>> newBranch
这些标记符号也一起删除,最后进行 add 和 commit 就完成了。
以上是一些工程中常用的更进一步的一些技巧、指令等。掌握以上内容也是自己的开发十分有用的,且有必要的。接下来,还会学习分支管理,这些更加系统化、工程化的内容。