git使用
参考:
工作流一目了然,看小姐姐用动图展示10大Git命令 - 知乎 (zhihu.com)
MyBatis中文官网关于git的介绍 该网站还有关于vim的介绍vim入门教程
1.分区
1. git的由来
Git更像是把数据看作是对小型文件系统的一系列快照。在Git中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。另外,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。Git对待数据更像是一个快照流。
实际上,Git仓库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。
2. git的5种状态
- 未修改(Origin)
- 已修改(Modified),已表示修改了文件,但还没保存到仓库中。
- 已暂存(Staged),表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- 已提交(Committed),表示文件已经安全地保存在本地仓库中。
- 已推送(Pushed),表示文件已经从本地仓库已经推送到远端仓库中。
3. git的分支
HEAD指向的是当前正在操作的分支,HEAD -> master 告诉我们当前处于 master 分支,HEAD也能代表当前分支最新提交的commit id。有时候,我们commit提交代码后,发现这一次commit的内容是有错误的,面对这种情况有两种解决方法:
解决方法1:修改错误内容,再次commit一次
解决方法2:使用git reset命令撤销这一次错误的commit
此时,该head出场了,它常常与reset连用,如下所示:
$ git reset HEAD <file>
因为head表示当前分支的最新提交的commit id,上述命令的目的是将文件file恢复到指定的commit id。
分支切换命令为:
git checkout branchname
合并冲突现象:
冲突的格式是这样的:
<<<<<<< HEAD
test master.
=======
test dev.
>>>>>>> dev
冲突是通过=======来分割的,其上部分表示HEAD分支的内容,其下部分表示dev分支的内容,这两部分内容发生了冲突。为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一个或者也可以自行合并这些内容。
备注:通过上文Git的HEAD介绍,我们知道,HEAD指向的是当前正在操作的分支。因为运行合并命令(merge 命令)在 master 分支,所以 HEAD 指的是 master分支。
参考链接:==Git:合并分支—-git merge命令应用的三种情景==
2. 常用操作
常用命令 | 含义 |
---|---|
git config –global user.name 用户名 | 设置用户名 |
git config –global user.email 邮箱 | 设置用户邮箱 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit-m “日志信息” 文件名 | 提交到本地库 |
git reflog/git log | 查看历史记录 |
git reset –hard 版本号 | 版本穿梭 |
git stash | 将暂存器和工作区内容保存 |
git stash pop | 恢复之前的工作编辑状态 |
参考图:git常用命令速查
具体:
(1)git config
(2)git stash
(3)git diff
(4)git checkout
(5)git log
git log 命令有众多的参数,选择合理的参数,可以方便查看过往的仓库提交历史记录。主要的参数有:--oneline
、--stat
、--author
、--after
、--before
,还有-p
、-n
。
####–oneline 参数:简化默认的输出
--oneline
参数用于简化 git log 的默认的输出,仅仅输出 commit hash 前7个字符串和 commit message。如下所示:
$ git log --oneline
658ac24 modify some code in xxx section
9d05208 modify some code in xxx section
cb53d27 modify some code in xxx section
–stat 参数:增加增删的统计数据
--stat
参数是在 git log 的基础上输出文件增删改的统计数据,方便我们查看仓库的改动情况。如下所示:
$ git log --stat
commit a8d08c1b60c0cbaa0be56378aa891726c45f0a49
Author: Tim <xxx@mail.com>
Date: Fri Oct 28 18:58:39 2022 +0800
modify some code in xxx section
lib/common/Localized.dart | 2 +-
lib/pages/calendar_plan_page.dart | 470 ++++++++++++++++++++---------------
2 files changed, 248 insertions(+), 224 deletions(-)
–author 参数:过滤作者
在团队合作开发过程中,如果只想查看某个小伙伴提交的代码,怎么办呢?此时可以加上 --author
参数用来过滤 commit,限定输出给定的用户,如下所示:
$ git log --author="Tim"
commit 84b86471ea12bd1f5994d878a318dcdead1137e9
Author: Tim <xxx@mail.com>
Date: Wed Dec 19 17:29:25 2022 -0800
modify some code in xxx section
–after和–before 参数:限定指定日期范围的日志
如果我们想看某段时间内的提交历史,可以使用 --after
和 --before
参数,十分好用,如下所示。不过,需要注意日期的格式,是10-1-2022
这样的形式,国外风格的日期表示形式。
$ git log --after '10-1-2022'
commit a8d08c1b60c0cbaa0be56378aa891726c45f0a49 (HEAD -> dev, origin/dev, origin/HEAD)
Author: Tim <xxx@mail.com>
Date: Fri Oct 28 18:58:39 2022 +0800
modify some code in xxx section
...
-p 参数:输出每次提交的内容差异
-p
参数很常用,它能控制输出每个 commit 具体修改的内容,输出的形式以 diff 的形式给出。如下所示:
$ git log -p
commit a8d08c1b60c0cbaa0be56378aa891726c45f0a49
Author: Tim <xxx@mail.com>
Date: Fri Oct 28 18:58:39 2022 +0800
modify some code in xxx section
diff --git a/lib/common/Localized.dart b/lib/common/Localized.dart
index c870ab8..1992ccf 100644
--- a/lib/common/Localized.dart
+++ b/lib/common/Localized.dart
-n 参数:限定log输出的条数
如果想看最近的 n 条提交日志,怎么办?很简单。直接在 log 命令之后,加 -n
参数即可,n
表示用户要输出的数量.
$ git log -n 3
commit a8d08c1b60c0cbaa0be56378aa891726c45f0a49
Author: Tim <xxx@mail.com>
Date: Fri Oct 28 18:58:39 2022 +0800
modify some code in xxx section
...
3. Git文件种类
- 已追踪的Tracked:已经在版本库中的文件,或者是已经暂存到索引中的文件。如果想将新文件newfile添加到为已追踪(Tracked)的文件,执行git add newfile命令即可。
- 被忽略的Ignored:
- 未追踪的Untracked:。Git把工作目录下的所有文件当成一个集合,减去已追踪的文件和被忽略的文件,剩余部分最为未被追踪的文件(Untracked)。
4. 解释
1. git init
会生产一个.git文件夹
2. git status
会有git给我们的建议
On branch master: 我们位于一个叫做“master”的分支里,这是默认的分支,nothing to commit, working directory clean : 说明你的工作目录目前是“干净的”,没有需要提交的文件(意思就是自上次提交后,工作目录中的内容压根儿就没改动过)。
Untracked files 说明存在未跟踪的文件,所谓的“未跟踪”文件,是指那些新添加的并且未被加入到暂存区域或提交的文件。它们处于一个逍遥法外的状态,但你一旦将它们加入暂存区域或提交到 Git 仓库,它们就开始受到 Git 的“跟踪”。
3. 暂存区->工作区 | 版本库->暂存区/工作区
1、使用git checkout
命令可以使暂存区的文件替换工作区的文件(暂存区域的旧版本覆盖工作目录的新版本,危险操作:相当于丢弃工作目录的修改)。
如果暂存区有旧版本文件,工作区是新版本的修改后的文件,那么需要先执行 add 命令覆盖暂存区域,然后再提交……
2、使用git reset
命令可以回退版本。
5. Git 本地仓库与远程仓库建立连接
6.Git解决冲突
7.Git撤销修改
8.git pull
9.git rebase
==上面的例子可抽象为如下实际工作场景:张三从B拉了代码进行开发,目前提交了两次,开发到D了;李四也从B拉出来开发了并且开发完毕,他提交到了M,然后合到主干上了。此时张三想拉下最新代码,于是他在feature分支上执行了git rebase master,即把master分支给rebase过来,由于李四更早开发完并合了主干,如此就相当于张三是基于李四的最新提交M进行的开发了。==
10.git reset
较少用!
11.git mv
git mv text.txt mydir
运行上面的 git mv
其实就相当于运行了3
条命令:
$ mv test.txt mydir
$ git rm test.txt
$ git add mydir
12.git rm
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。