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、标签
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
本文转载了这篇文档,向作者表示感谢。