git配置及命令行乱码

日常使用Git,越来越觉得GUI不方便,以下记录下Git命令行配置

1、设置alias

通过以下命令配置git的alias

1
2
3
4
5
6
7
8
9
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.last "log -1 HEAD"

$ rem 以下两行解决乱码
$ git config --global i18n.commitencoding utf-8
$ git config --global i18n.logoutputencoding utf-8

最后一句命令中,logoutputencoding设为gbk还是utf-8取决于命令行本身的编码。Windows自带的cmd默认编码为gbk,则改为如下命令:

1
$ git config --global i18n.logoutputencoding gbk

我这里使用的是cmder,输出编码为utf-8因此不需要专门设置。

通过以下命令查看配置

1
2
3
4
5
6
7
8
9
10
11
12
13
$ git config --global --list

user.name= yourname
user.email=your@email.com
http.postbuffer=64M
https.postbuffer=64M
alias.co=checkout
alias.br=branch
alias.ci=commit
alias.st=status
alias.last=log -1 HEAD
i18n.commitencoding=utf-8
i18n.logoutputencoding=utf-8

配置完成后,需要设置环境变量LESSCHARSET,或在命令行下执行set LESSCHARSET=utf-8cmder可以在user-profile.cmd里,添加如下一行:

1
set LESSCHARSET=utf-8
1
2
$ git checkout -b <分支名>
$ git push origin <本地分支名>:<远端分支名>

2、常用命令

  1. git init .: 初始化仓库
  2. git clone <url>: 克隆一个仓库
  3. git st(git status):查看仓库状态
  4. git add ...:添加文件
  5. git last(git log -1 HEAD):查看上一次的提交
  6. git diff:查看更改
  7. git checkout -b <分支名>:切换的<分支>,没有就新建
  8. git checkout <文件名>: 检出文件
  9. git push origin <分支名>:<远端分支名>:推送分支<远端分支名>如果相同则可以忽略,git push origin <分支名>

3、分支

  1. git branch 查看所有分支
  2. git checkout -b branchname 创建并直接切换到分支
  3. git branch branchname 创建分支
  4. git checkout branchname 切换分支
  5. git branch -d branchname 删除分支
  6. git stash 保存工作区修改,不是存储区
  7. git stash list 查看所有保存在工作区的修改列表
  8. git stash pop 恢复工作区修改并删除stash内容
  9. git stash appy 恢复工作区修改但不删除stash内容
  10. git stash drop 删除stash 内容
  11. git merge --no-ff -m "comment" branchname 合并当前及branchname分支(推荐的merge方法,--no-ff提交模式可以在Git log后看到merge的节点,否则看不到)
  12. git log --graph --pretty=oneline --abbrev-commit 查看简化的提交日志
  13. git remote 查看远程库信息
  14. git remote -v 显示更详细的远程库信息
  15. git push origin master 推送本地master分支到远程仓库origin的master分支
  16. git push origin dev 推送本地dev分支到远程仓库origin的dev分支
  17. git tag v1.0 给发布版本创建标签
  18. git tag 查看所有标签
  19. git tag commitId 给谋而历史提交id打上标签
  20. git show v1.0 查看标签详细信息
  21. git tag -d v1.0 删除标签
  22. git push origin v1.0 推送标签到远程
  23. git push origin --tags 推送全部标签到远程
  24. git push origin :refs/tags/tagname 删除远程标签

1) 创建与合并分支

git merge如果有冲突,打开冲突的文件,手动改动冲突部分, 再重新git add, git commit

在实际开发中,我们应该按照几个基本原则进行分支管理。

  • master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能再上面干活。
  • 那在哪里干活呢?干活在dev分支上。
  • 每个人都有自己的分支,时不时地往分支dev上合并就可以了。

2) bug分支

修复bug时,通过创建新的Bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug, 修复后,再git stash pop 回到工作现场

3) feature分支

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D强行删除。

4) 多人协作

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

  • master分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

4、标签

发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

本文转载了这篇文档,向作者表示感谢。