Git的基础使用(一)

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.第二行:空行

扫描二维码关注公众号,回复: 11172964 查看本文章

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合并

Jx1swF.png Jx1reU.png

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担任可随时发布软件的稳定分支

JxvybF.png

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的特性分支

JxxfoQ.png
  • 回溯到创建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分支的状态:

Jzpnqf.png
  • 推进至feature-A分支合并后的状态

git log只能查看以当前状态为终点的历史日志,使用git relog命令可查看回溯历史之前的哈希值,再用git reset --hard命令恢复到历史回溯前的状态

JzpaZT.png
$ git checkout master

$ git reset --hard 359bd0b
HEAD is now at 359bd0b Merge branch 'feature-A'

回溯后:

JzpgL6.png
  • 消除冲突
$ 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 分支名
END

猜你喜欢

转载自www.cnblogs.com/bubcs/p/12821074.html