git本地的基本使用

目录

git init    初始化仓库

git status    查看仓库的状态​

git add    向暂存区中添加文件

git各个区域和文件状态

git commit    保存仓库的历史记录

1、记述一行提交信息:   git commit -m "提交描述"

2、记述详细提交信息  git commit

git log    查看提交日志

git log --pretty=short  只显示提交信息的第一行

git log 目录/文件   只显示指定目录、文件的日志

git log -p  显示文件的改动

git log -p 目录/文件  显示特定的目录/文件的改动

git diff    查看更改前后的差别

git diff    查看工作树和暂存区的差别

git diff HEAD    查看工作树和最新提交的差别

分支的操作

git branch——显示分支一览表

git checkout -b——创建、切换分支

 git merge——合并分支

git log --graph——以图表形式查看分支

 git reset——回溯历史版本

解决冲突

git commit --amend——修改提交信息

git rebase -i——压缩历史


git init    初始化仓库

初始化之后,会在当前目录生成一个.git的隐藏文件夹,这个 .git 目录里存储着管理当前目录内容所需的仓库数据
这个目录的内容称为“附属于该仓库的工作树”

git status    查看仓库的状态

当前正处于 master 分支下,nothing to commit说明仓库没有任何更改,没有可提交的内容

创建 README.md文件,然后再输入命令git status

可以看到在 Untracked files(还没有加入缓冲区) 中显示了 README.md 文件

git add    向暂存区中添加文件

git add -A 和 git add . 的区别

运行 git add README.md后,输入命令git status查看状态


README.md 文件显示在 Changes to be committed(加入缓冲区) 中了

git各个区域和文件状态


  • 工作区间: 即我们创建的工程文件, 在编辑器可直观显示;
  • 缓存区: 只能通过git GUI或git shell 窗口显示,提交代码、解决冲突的中转站;
  • 本地仓库: 只能在git shell 窗口显示,连接本地代码跟远程代码的枢纽,不能联网时本地代码可先提交至该处;
  • 远程仓库: 即保存我们代码的服务器,本文以公共版本控制系统:github为例,登录github账号后可直观显示;

对于任何一个文件,在 Git 内都只有三种状态:

1、已修改(modified)      Git 的工作目录

2、已暂存(staged)         暂存区域

3、已提交(committed)    本地仓库

git commit    保存仓库的历史记录

1、记述一行提交信息:   git commit -m "提交描述"

2、记述详细提交信息  git commit

在README.md中添加 ### hello

通过git status查看状态

git commit回车结果如下:

Changes to be committed可以看到本次提交中包含的文件

在编辑器中记述提交信息的格式如下。
● 第一行:用一行文字简述提交的更改内容
● 第二行:空行
● 第三行以后:记述更改的原因和详细内容

编辑完成,wq保存退出即可

如果想终止提交,请将提交信息留空并直接关闭编辑器,随后提交就会被中止。

git log    查看提交日志

git log --pretty=short  只显示提交信息的第一行

git log 目录/文件   只显示指定目录、文件的日志

git log -p  显示文件的改动

git log -p 目录/文件  显示特定的目录/文件的改动

git diff    查看更改前后的差别

git diff    查看工作树和暂存区的差别

把### hello改为### hello world

“+”号标出的是新添加的行,被删除的行则用“-”号标出

git diff HEAD    查看工作树和最新提交的差别

在执行 git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交。这里的 HEAD 是指向当前分支中最新一次提交的指针。保险起见,我们用git log查看一下提交日志,确认提交是否成功。

分支的操作

为了便于说明,重新建一个文件夹git-tutorial,git init初始化后,建一个README.md文件,并依次用命令git add README.md、git commit -m "first commit"提交

git branch——显示分支一览表

master 分支左侧标有“*”(星号),表示这是我们当前所在的分支

git checkout -b——创建、切换分支

执行git checkout -b feature-A命令,创建名为 feature-A 的分支

git checkout -b feature-A等于下面2条命令

git branch feature-A    # 创建feature-A分支
git checkout feature-A    # 切换到feature-A分支

这时候查看,已经切换到feature-A分支下

切换回上一个分支  git checkout -

在feature-A分支下,添加 - feature-A,如图,

用下面命令行提交(如果不提交,更改的文件内容不会记录在feature-A分支,切回master分支后,相当于feature-A什么东西也没有修改)

git add README.md
git commit -m "Add feature-A"

 插入2个概念:

  • 特性分支:集中实现单一特性(主题),除此之外不进行任何作业的分支。
  • 主干分支:主干分支是刚才我们讲解的特性分支的原点,同时也是合并的终点。通常人们会用 master 分支作为主干分支。

主干分支和特性分支都可以有多个。一般来说,一个特性分支对应一个功能,一个主干分支对应一个软件版本

 git merge——合并分支

首先 git checkout master 切换到 master 分支

为了在历史记录中明确记录下本次分支合并,我们需要创建合并提交。因此,在合并时加上 --no-ff参数

git merge --no-ff feature-A

默认信息中已经包含了是从 feature-A 分支合并过来的相关内容,所以可不必做任何更改。将编辑器中显示的内容保存,关闭编辑器,然后就会看到下面的结果。

git log --graph——以图表形式查看分支

 git reset——回溯历史版本

 git rest --hard 哈希值  恢复到某个时间点的状态

git checkout -b fix-B  创建 fix-B 分支,并在README.md添加一行- fix-B

运行下面命令提交

git add README.md
git commit -m "Fix B"
现在状态如图:


 目标如图:

 git log命令只能查看以当前状态为终点的历史日志。所以这里要使用 git reflog命令,查看当前仓库的操作日志

圈出来部分表示feature-A 特性分支合并后的状态,对应哈希值为 39d1ac0

切换回master分支:git checkout master,回溯历史版本:git reset --hard 39d1ac0 此时状态如图

 合并fix-B分支:git merge --no-ff fix-B

解决冲突

打开README.md文件

 =======上面是当前 HEAD 的内容,下面要合并的 fix-B 分支中的内容

本次修正让 feature-A 与 fix-B 的内容并存于文件之中。但是在实际的软件开发中,往往需要删除其中之一,所以各位在处理冲突时,务必要仔细分析冲突部分的内容后再行修改。修改如下

执行git add README.md和git commit -m "Fix conflict"完成代码提交

git commit --amend——修改提交信息

如果想把上面的提交信息 Fix conflict 更改为 Merge branch 'fix-B' ,输入git commit --amend

 进入如下界面

把图中的Fix conflict改为Merge branch 'fix-B',再用git log --graph查看,发现提交信息已经修改。

git rebase -i——压缩历史

创建分支feature-C,并且切换到feature-C下,再README.md添加feature-C,但是由于写快了,写成了feature-D

但是已经提交了,提交信息为 Add feature-C
修改错误后如下

然后用命令 git commit -am "Fix typo"提交 ,但是下图圈出来2个地方希望合并

 git rebase -i HEAD~2选定当前分支中包含HEAD(最新提交)在内的两个最新历史记录为对象

将 288745f 左侧的 pick 部分删除,改写为 fixup 。保存文件

 结果

 然后git checkout master,git merge --no-ff feature-C合并分支到master

里面很多内容摘自《GitHub入门与实践》

git官方中文文档:https://git-scm.com/book/zh/v2

码云git大全:https://gitee.com/all-about-git

发布了52 篇原创文章 · 获赞 54 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/weixin_37909391/article/details/84582301