git配置及命令行乱码
日常使用Git,越来越觉得GUI不方便,以下记录下Git命令行配置
1、设置alias
通过以下命令配置git的alias
1 | $ git config --global alias.co checkout |
最后一句命令中,logoutputencoding
设为gbk
还是utf-8
取决于命令行本身的编码。Windows
自带的cmd
默认编码为gbk
,则改为如下命令:
1 | $ git config --global i18n.logoutputencoding gbk |
我这里使用的是cmder
,输出编码为utf-8
因此不需要专门设置。
通过以下命令查看配置
1 | $ git config --global --list |
配置完成后,需要设置环境变量LESSCHARSET
,或在命令行下执行set LESSCHARSET=utf-8
。cmder
可以在user-profile.cmd
里,添加如下一行:
1 | set LESSCHARSET=utf-8 |
1 | $ git checkout -b <分支名> |
2、常用命令
git init .
: 初始化仓库git clone <url>
: 克隆一个仓库git st
(git status
):查看仓库状态git add ...
:添加文件git last
(git log -1 HEAD
):查看上一次的提交git diff
:查看更改git checkout -b <分支名>
:切换的<分支>,没有就新建git checkout <文件名>
: 检出文件git push origin <分支名>:<远端分支名>
:推送分支<远端分支名>如果相同则可以忽略,git push origin <分支名>
3、分支
git branch
查看所有分支git checkout -b branchname
创建并直接切换到分支git branch branchname
创建分支git checkout branchname
切换分支git branch -d branchname
删除分支git stash
保存工作区修改,不是存储区git stash list
查看所有保存在工作区的修改列表git stash pop
恢复工作区修改并删除stash内容git stash appy
恢复工作区修改但不删除stash内容git stash drop
删除stash
内容git merge --no-ff -m "comment" branchname
合并当前及branchname分支(推荐的merge方法,--no-ff提交模式可以在Git log后看到merge的节点,否则看不到)git log --graph --pretty=oneline --abbrev-commit
查看简化的提交日志git remote
查看远程库信息git remote -v
显示更详细的远程库信息git push origin master
推送本地master分支到远程仓库origin的master分支git push origin dev
推送本地dev分支到远程仓库origin的dev分支git tag v1.0
给发布版本创建标签git tag
查看所有标签git tag commitId
给谋而历史提交id打上标签git show v1.0
查看标签详细信息git tag -d v1.0
删除标签git push origin v1.0
推送标签到远程git push origin --tags
推送全部标签到远程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、标签
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
本文转载了这篇文档,向作者表示感谢。