1.基本操作
git init:初始化仓库
$ mkdir git-tutorial // 在当前位置建立仓库,make directions
$ cd git-tutorial // 移至git-tutorial仓库
$ git init
初始化后生成
.git
目录,用于存储着管理当前目录内容所需的仓库数据,称作“附属于该仓库的工作树”
git status:查看仓库的状态
$ git status
On branch master
nothing to commit, working tree clean
结果显示当前所在master分支下,commit是指“记录工作树中所有文件的当前状态”
此外,通过
touch + 文件名.后缀名
可创建文件,如:touch README.md
git add:向暂存区中添加文件
未使用git add命令时,文件显示在Untracked files中,使用后文件加入暂存区(提交之前的一个临时区域),使用方法git add + 文件名.后缀名
git commit:保存仓库的历史记录
git commit命令可以将当前暂存区的文件实际保存到仓库的历史记录中,通过记录可在工作树中复原文件
- 记述一行提交信息
$ git commit -m "First commit"
-m参数后的“First commit”称作提交信息
git commit -m "
>1.xxxxx
>2.xxxxx
>"
也可按上述方法来提交多行信息
- 记述详细提交信息
不加-m,直接执行git commit命令后,编译器会自启动,显示如下信息
Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Changes to be committed:
# new file: 文件名.后缀名
提交方式:
1.第一行:简要概括更改内容
2.第二行:空行
3.第三行:记述更改的原因和详细内容(#表示注释)
-
终止提交:退出编译器提交终止
-
使用git status查看提交后的转台
git log:查看提交日志
可查看提交日志,以及什么人什么时间进行提交和和合并,以及简要的提交信息
$ git log
commit 14fe633b561ca5f5a195cd86bc663b3838fab308 (HEAD -> master)
Author: zcs159 <[email protected]>
Date: Sat May 2 20:57:18 2020 +0800
First commit
- 只显示提交信息的第一行
$ git log --pretty=short
commit 14fe633b561ca5f5a195cd86bc663b3838fab308 (HEAD -> master)
Author: zcs159 <[email protected]>
First commit
加上--pretty=short即可
- 只显示指定目录、文件的日志
git log命令后加上目录名或文件名即可
$ git log README.md
- 显示文件的改动
$ git log -p
加上-p参数后,文件提交前后的改动便会显示,末尾可加上文件名或目录名
git diff:查看更改前后的差别
可以查看工作树、暂存区、最新提交之间的差别
例如在文件README.md中添加一行# Git教程
- 查看工作树和暂存区的差别
$ git diff
diff --git a/README.md b/README.md
index e69de29..cc3d3b2 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程
由于未使用git add命令向暂存区添加任何东西,所以只显示工作树与最新提交状态的之间的差别,其中“+”表示新增行,“-”表示被删除的行
- 查看工作树和最新提交的差别
在使用
git add README.md
后,执行git diff命令发现,工作树与暂存区无区别结果什么都不会显示,要查看最新提交的差别,执行git diff HEAD
命令
$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..cc3d3b2 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程
建议:在执行git commit前执行git diff HEAD,查看本次提交与上次提交之间的区别,再进行git commit提交。并且可执行git log查看是否提交成功
2.分支的操作
从master分支创建分支如图所示,不同分支可以同时进行完全不同的作业,完成后再与默认分支master合并
git branch:显示分支一览表
$ git branch
* master
“*”表示当前所在分支
- git checkout -b:创建、切换分支
也可以直接使用git branch + 新分支名
创建分支,在使用git checkout + 分支名
切换分支,常用命令:
git checkout -b feature-A // 创建feature-A,并切换到feature-A分支
git checkout - // 切换到上一分支
特性(Topic)分支
集中实现某一特性(主题),除此之外不进行任何作业的分支,master担任可随时发布软件的稳定分支
git merge:合并分支
$ git merge --no-gg feature-A
合并时先切换至master分支,再执行命令并使用
--no-ff
参数,可在历史记录中明确记录下本次分支合并,并且编译器会自启动,用于录入合并提交的信息
git log --graph:以图表形式查看分支
$ git log --graph
* commit 359bd0b86a8aa8858105bf874e661ebbf51647df (HEAD -> master)
|\ Merge: 5b0a6ff 576a4f8
| | Author: zcs159 <[email protected]>
| | Date: Sun May 3 09:31:10 2020 +0800
| |
| | Merge branch 'feature-A'
| |
| * commit 576a4f8494808f21afa6ccc5402f9b562de35e64 (feature-A)
|/ Author: zcs159 <[email protected]>
| Date: Sun May 3 09:30:37 2020 +0800
|
| Add feature-A
|
* commit 5b0a6ffb8bd1ba21aff89819d6bbc3b6e767a245
Author: zcs159 <[email protected]>
Date: Sun May 3 09:26:52 2020 +0800
First commit
3.更改提交的操作
git reset:回溯历史版本
回溯历史版本,创建一个名为fix-B的特性分支
- 回溯到创建feature-A分支前
回溯到feature-A分支创建前,创建一个fix-B的特性分支,并让仓库的HEAD、暂存区、当前工作树回溯到指定状态,需用git reset --hard + 哈希值
(哈希值是相应时间点或者说相应提交命令时产生的特定的值,且各不相同,哈希值输入四位以上即可)
$ git reset --hard 5b0a6ffb8bd1ba21aff89819d6bbc3b6e767a245
HEAD in now at 5b0a6ff First commit
- 创建fix-B分支
$ git checkout -b fix-B // 并在README.md文件中添加内容
$ git add README.md
$ git commit -m "Fix-B"
下图就是当前fix-B分支的状态:
- 推进至feature-A分支合并后的状态
git log只能查看以当前状态为终点的历史日志,使用git relog命令可查看回溯历史之前的哈希值,再用git reset --hard命令恢复到历史回溯前的状态
$ git checkout master
$ git reset --hard 359bd0b
HEAD is now at 359bd0b Merge branch 'feature-A'
回溯后:
- 消除冲突
$ git merge --no-ff fix-B
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Recorded preimage for 'README.md'
Automatic merge failed; fix conflicts and then commit the result.
为解决上述冲突可用编译器打开README.md文件,修改文件内容成我们想要的样子即可,再进行提交
- git commit --amend:修改提交信息
执行命令后,编译器会启动,修改提交信息成我们想要的即可
git rebase -i:压缩历史
在合并特性分支之前,如果发现已提交内容存在拼写错误等(错字漏字称为typo)
-
创建一个feature-C分支,并在README.md中留下拼写等错误,再提交
-
修改拼写错误,用编译器打开文件进行修改,再提交,可用
git commit -am “Fix typo”
直接完成添加和提交 -
更改历史
$ git rebase -i HEAD~2 //选定当前分支中包含HEAD(最新提交)在内的两个最新的历史记录为对象,并在编译器中打开
pick 7a34294 Add feature-C
pick 6fba227 Fix typo
# Rebase 2e7db6f..6fba227 onto 2e7db6f
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
将6fba227左侧的pick部分删除改为fixup,并保存退出即可
- 合并至master分支
4.推送至远程仓库
git remote add:添加远程仓库
$ git remote add origin [email protected]:zcs159/git-tutorial.git
在Github上创建仓库路径为“[email protected]:用户名/仓库名.git”,origin为标识符,执行该命令后,git-tutorial就会设置为本地仓库的远程仓库
git push:推送至远程仓库
- 推送至master分支
$ git push -u origin master
推送其他分支:git push -u origin + 分支名
5.从远程仓库获取
git clone:获取远程仓库
$ git clone [email protected]:zcs159/git-tutorial.git
git pull:获取最新的远程仓库分支
$ git pull origin 分支名