本文章主要通过Git Bash工具来介绍GIT常用的功能,文章最后会附带IDEA操作截图。另外本文章只记录自己常用的操作,如果要系统学习建议安装Git Bash工具,通过git --help add进行系统帮助手册。
IDEA工具操作GIT截图PPT下载:https://download.csdn.net/download/XiaMen_BuYu/15450646
1. 名词解析
名词 | 说明 |
---|---|
HEAD | git仓库中特殊的指针。大部分情况是指向分支;当指向提交信息时是处于游离状态,会因为切换分支导致数据丢失; |
working tree(工作区) | .git文件夹所在目录 |
index(暂存区) | 工作区的文件要通过git add命令才能提交到暂存区 |
Local Repository(本地仓库) | 暂存区的文件通过git commit命令才能提交到本地仓库 |
Remote Repository(远程仓库) | 本地仓库的文件通过git push命令才能推送到远程仓库 |
关系如下
2. 常用功能
以下内容提到的命令格式,其中[]内为可选内容;<>内为变量名,需要用实际值替换
2.1. 创建仓库
2.1.1. git init
在目录中执行即可以创建一个Git仓库。
- 命令格式:git init
- 命令说明:
- 操作截图:git init
2.1.2. git clone
将一个Git仓库拷贝到本地
- 命令格式:git clone https://< username >:< password >@< repository >
- 命令说明:注意协议,username和password记得转码
- 操作截图:
2.2. 提交记录
2.2.1. git add
将文件内容添加到索引(Add file contents to the index )。一般配合git status命令使用,可以添加仓库所有文件,指定文件,指定目录到索引。
- 命令格式:git add [ -A | < file > | < dictory > ]
- 命令说明:file可以是多个文件路径,dictory可以是多个目录;可以通过git rm --cache命令移出索引,git rm删除文件
- 操作截图:
2.2.2. git commit
将索引的当前内容与来自用户的描述更改的日志消息一起存储在新提交中。
- 命令格式:git commit [-a | < file >] -m < message >
- 子命令格式:git commit [–amend] ;通过创建新的提交来替换当前分支的最新提交节点。提交了错误日志说明,可以通过该命令修改。
- 命令说明:-a 表示提交所有加入索引的文件;-m表示填写提交信息
- 操作截图:
2.2.3. git reset
重置当前分支内容到指定节点
- 命令格式:git reset [–mixed | --soft | --hard | --keep] [HEAD]
- 命令说明:
--mixed:默认选项。文件不会被改变,变更内容不会暂存。
--soft:文件不会被改变,变更内容会提交到暂存区。
--hard:文件将被改变,所有内容还原到指定节点
--keep:文件将被修改,但保存本地修改;
HEAD~x,x表示从最新提交向前推x个提交节点
- 操作截图:
2.3. 远程操作
2.3.1. git push
将本地分支推送到远程仓库
- 命令格式:git push [–force] [origin | < branchname > | : < branchname >]
- 命令说明:–force是强制推送,当远程仓库分支的和本地分支存在差异时,是无法正常推送,可以通过强制推送;如果远程和本地的分支名称不同,可以通过:< branchname >来指定远程分支。
- 操作截图:
2.3.1. git pull
git pull 命令用于从远程获取代码并合并本地的版本。是 git fetch 和 git merge 两个命令的合并。
- 命令格式:git pull [origin | < branchname > | : < branchname >]
- 命令说明:如果远程和本地的分支名称不同,可以通过:< branchname >来指定本地分支。
- 操作截图:
2.4. 其它操作
2.4.1. git annotate
注释文件中每一行的提交信息(Annotate file lines with commit information )
- 命令格式:git annotate < file >
- 操作截图:git annotate baffler/src/main/java/com/accloud/edm/baffler/BafflerApplication.java
2.4.1. git branch
查看分支列表,创建分支、修改分支、删除分支(List, create, or delete branches )
2.4.1.1. 查看分支列表
- 命令格式:git branch [-r | -a] [-vv]
- 命令说明:-r只看远程分支,-a显示所有分支,-vv显示本地与远程分支的管理
- 操作截图:
2.4.1.2. 创建分支
- 命令格式:git branch [-f] < branchname > [ < oldbranchname > | < commit >]
- 命令说明:-f 强制创建,等于先删除已存在的分支,再创建分支; oldbranchname分支名称,远程分支加前缀origin/
- 操作截图:
2.4.1.3. 修改分支
-
命令格式:git branch --set-upstream=< remotebranchname > [< oldbranchname >]
-
命令说明:设置远程分支,push到远程仓库时,默认push到该分支
-
操作截图:
-
命令格式:git branch [–unset-upstream] [ < branchname >]
-
命令说明:取消设置远程分支,push到远程仓库时,需要手动选择要push的分支
-
操作截图:
-
命令格式:git branch [-m | -M] [ < oldbranchname > ] < newbranchname >
-
命令说明:重命名分支;-M = --move --force
-
操作截图:
2.4.1.4. 删除分支
- 命令格式:git branch [-d | -D] [-r] < branchname >
- 命令说明:删除分支;-D = --delete --force
- 操作截图:
2.4.2. git checkout
切换分支或还原工作树文件
- 命令格式:git checkout [-f] [-m] [[-b|-B] <new_branch>] [<start_point>]
- 命令说明:-f 强制切出,丢弃已修改待提交的内容;-m 合并已修改的内容到切出分支; -b/-B当要切出的分支不存在则创建分支并切出
- 操作截图:
2.4.3. git cherry-pick
应用一些现有的提交节点
- 命令格式:git cherry-pick [-e] [-n] [-x] < commit >
- 子命令格式:git cherry-pick --abort;表示当应用失败时,直接放弃当前操作。
- 命令说明:-e为–edit缩写,表示应用指定commit的同时修改commit message;-n为–no-commit缩写,表示应用指定commit,但是不会触发commit动作;-x表示会在当前节点追加 (cherry picked from commit xxx);
- 操作截图:
当有-e参数时,会出现重新提交的交互窗口。
2.4.4. git clean
通过从当前目录开始递归删除不受版本控制的文件。通常,仅删除Git未知的文件,不删除.gitignore中忽略的文件。
- 命令格式:git clean [-f] [-d] [-x]
- 命令说明:-f 允许删除带有.git的目录或文件;-d 允许删除文件夹;-x 允许删除.gitignore中忽略的文件
- 操作截图:git clean
2.4.5. git config
获取并设置存储库或全局选项
- 命令格式:git config [–list] [–global] < command >
- 命令说明:user.name,user.email设置需要添加–global
- 命令截图:
2.4.6. git fetch
从远程仓库同步更新多个分支或标签信息
- 命令格式:git fetch [ --all | < branchname >]
- 命令说明:如果出现“fatal: unable to get credential storage lock: File exists”,解决方案删除当用户的.git-credentials.lock文件
- 命令截图:
2.4.7. git gui
打开Git图形界面
- 命令格式:git gui
- 命令说明:
- 命令截图:
2.4.8. git help
显示有关Git的帮助信息
- 命令格式:git help [-a | < command >]
- 命令说明:如果是git help < command >会直接打开网页,可以通过网页查看帮助指令
- 命令截图:
2.4.9. git log
显示提交日志
- 命令格式:git log [–all | --oneline]
- 说命令明:按向下键来查看更多,按q键退出查看日志。默认显示当前分支的日志,如果要查看所有分支加上–all;–online是将提交信息一行展示
- 命令截图:
2.4.10. git merge
将两个或多个提交节点合并在一起
- 命令格式:git merge [–ff | --squash | --no-commit ] < branchname >
- 子命令格式:git merge --abort;表示当合并失败时,直接放弃当前操作。
- 说命令明:–ff 表示不产生合并节点;–squash 表示合并提交内容,同–no-commit功能相似;
- 命令截图:
2.4.11. git rebase
- 命令格式:git rebase -i $commitId
- 命令说明:从$commitId节点开始重新整合提交日志
- 使用场景:当提交代码后,发现存在问题,导致一个功能多次提交,可以通过该命令将多次提交合并成一个
- 操作截图:git rebase -i 934f17cc,注意看命令说明,默认是pick,将1和2两个commit进行合并