摘要
本文主要介绍git常用命令的使用方法,同时介绍一些常见问题的处理方法,持续更新中…
git命令通用选项
大多数git命令都适用的选项列表如下:
1 | -v, --verbose show hash and subject, give twice for upstream branch |
常用命令
git help
使用方式如下,其中command_name 具体使用的时候替换成要查询的命令名。
1 | git help <command_name> |
git help 命令的输出结构(以输入git help help为例):
1 | NAME(命令名称) |
首次使用,可以输入git help,该命令会展示一些使用git的总体帮助信息,展示如下:
1 | git命令使用的不同场景: |
git add
git add支持以通配符形式的添加文件
1 | git add . 添加当前目录所有改变(修改、删除、新增)的文件信息到索引库(常用) |
git add -i . 输入之后,会进入一个子命令系统,会列出当前工作目录所有tracked和untracked的文件信息,同时会在下方列出以下八个子命令:
1 | 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked |
这八个子命令都是见名知意的,使用方式都是输入相应子命令后,列出带序号的文件列表,选择要操作的文件序号(可多选),执行命令,显示命令结果,之后按回车键,返回子命令系统目录。
git push
首次使用git push命令(即直接输入git push),git 会提示设置set upstream,其实就是让你设置本地分支同远程分支见的对应关系,建立跟踪关系的方法:
建立分支时采用 —track,如:
1
2git branch --track local_branch origin/remote_branch_name
执行之后,本地分支local_branch 和 远程分支remote_branch_name间就建立了跟踪关系使用—set-upstream(相当于修改项目根目录.get文件夹下的config文件),如:
1
git branch --set-upstream test_branch origin/test_branch
push操作时使用—set-upstream,如:
1
git push origin --set-upstream test_bransh:origin/test_branch
push命令具体分析:
1 | git push -u origin local_branch:remote_branch |
push命令的一些便捷操作:
1 | git push |
git merge
git merge 操作需要操作着熟悉vim编辑器,由于自己使用的较少,顾不做描述,建议采用GUI环境来进行Merge操作(通常就是解决冲突)
待我熟悉了vim,我会不全的。
git checkout
git checkout origin/remote_branch_name,运行该命令会处于HEAD Detached状态,原因是HEAD不能指向远程分支,它只能指向本地的某个commit或者本地分支。当”git checkout 远程分支”,而本地又没有这个分支,HEAD就会直接指向远程分支指向的commit了,HEAD指向commit就会进入detached HEAD state。这个以后只要运行以下命令即可:
1
2git checkout -b 分支名// 运行完之后,在利用git push将新建的本地分支和上面的分支
// 关联起来即可
git pull
首次使用git pull命里该,效果同首次使用git push命令相同。在默认的git pull选项中,该命令相当于执行以下命令组:
1 | git fetch remote |
使用git pull —rebase时,相当于执行以下命令组:
1 | git fetch remote |
git pull具体分析
pull命令本身只有三个option选项(-q, -v, —[no-]recurese-submodules),但由于pull命令是fetch和merge两个命令的组合,使用pull命令时要注意fetch命令和merge命令的一些注意事项。
git rebase
俗称变基操作,举个栗子来说明(来源于git文档)
1 | Assume the following history exists and the current branch is "topic": |
我的理解就是,将并行两个commit记录(采用新的commit来)串行处理。
rebase过程中如果存在冲突,先解决冲突,然后采用git add .将更改的文件添加到索引库,在继续rebase操作(无需提交),具体命令如下:
1 | git rebase master |
rebase过程中如果想放弃变基操作,可采用如下命令:
1 | git rebase --abort |
还有其他选项,会在使用过程中陆续添加
git log
显示提交记录,其选项较多,大多是美化log输出、设置log输出格式、设置log输出范围等
1 | git log --follow <filePath> |
git branch
展示、创建或删除分支
1 | git branch |
git config
用来配置仓库或全局的配置选项
1 | // git 全局配置命令 |
git rebase
不再按提交时间排序,而是按分支排序,对于按功能开发的分支来说,很有用,保证同一分支的代码提交记录在一块,十分方便;
git remote
该命令用来管理已经跟踪的库,常见用法:
1 | git remote [-v | --verbose] |
- 如下将本地库添加到远程仓库
1 | git remote add origin https://github.com/Rainmonth/JavaLearn.git |
git 大文件提交
1 | // GitHub 对提交的文件大小有限制,要小于 100m,即使使用了上面的 git global |
常见问题
中文文件名在git中显示乱码
原因是因为git中文默认以\xxx八进制形式展现,会对对0x80以上的字符进行quote,只要将core.quotepath设置为false即可解决问题
1 | git config --global core.quotepath false |
恢复已删除的的分支、会见或丢失的commit
前提是存在恢复的可能性,以下情况不能恢复:
丢失的分支或commit信息没有被git gc清除,一般情况下,gc对那些无用的object会保留很长时间后才清除的。
恢复方法,具体步骤如下:
- 执行git reflog(或git log -g)命令,查看所有历史操作信息,得到要恢复的commit的commit id;
- 执行git branch recover_branch_name commit id命令,创建一个恢复分支;
- 将恢复分支合并到当前工作分支,打完收工。
忽略已经跟踪的文件
假设已经跟踪的文件为git.txt,执行以下代码即可
1 | git rm --cached |
IDEA类编辑器 Version Control 中看不到 Local Change
解决方案:Setting->Version Control->Commit
中,取消 Use non-modal commit interface
,即 使用非模态提交接口
常用工作流程
重要概念
常用git IDE推荐
SourceTree