首页 > 其他分享 >git使用教程

git使用教程

时间:2022-09-21 22:34:52浏览次数:50  
标签:文件 教程 git -- master 提交 使用 commit

1 git基础

1.1 初始化git仓库

git仓库也就是在git管理下的代码的版本库和一些git配置存放的地方,比如.git文件夹

初始化git仓库有两种方式:1、将尚未进行版本控制的本地目录转换为git仓库;2、从其他服务器克隆一个已存在的git仓库。

1.1.1 在已存在的目录中初始化仓库

进入一个目录执行

$ git init

该命令将在当前路径下创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪

执行 git status 命令,我们可以看到如下信息,表明文件还处于Untracked状态

$ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        szj.txt
nothing added to commit but untracked files present (use "git add" to track)

下面我们要把想要的文件加入git跟踪,并提交。可以通过 git add 命令来指定所需的文件来进行追踪,然后执行 git commit

$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

git add命令是一个多用途命令,这里使用git add将文件加入跟踪。此外我们还可以使用这个命令把已修改文件放入暂存区。

1.1.2 克隆现有仓库

我们使用 git clone 命令克隆一个远端仓库

$ git clone https://github.com/libgit2/libgit2

这会在当前目录下创建一个名为libgit2的目录,并在这个目录下初始化一个.git 文件夹, 从远程仓库拉取下所有数据放入.git文件夹,然后从中读取最新版本的文件的拷贝,也就是checkout仓库中的最新版本作为工作副本。

1.2 git状态变化

在1.1中我们使用git init已经创建了一个本地仓库,并把文件加入了traced状态,并且我们有一个工作副本。通常我们会对工作副本进行修改,每当完成了一个阶段目标,我们就将工作副本中的修改提交到本地仓库。

在工作目录下的文件有两种状态:traced和untraced。而traced状态又会分为:Unmodified、Modified、Staged状态。

当我们使用git init初始化一个git仓库时,里面的文件默认处于Untraced状态,我们需要执行git add把文件加入跟踪;而git clone克隆一个远端仓库时,git在后台默认会将git仓库中的最新版本checkout到工作目录,且工作目录中的文件都是traced状态,且为unmodified状态。

当我们对工作目录中的文件做了修改,git将他们标记为modified状态。

我们可以有选择的将某些修改过的文件放入暂存区,然后提交已暂存的文件到本地仓库。

 

 

可以用git status命令查看状态。

克隆后立即执行git status

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

说明工作目录是干净的。此外该命令还显示了当前所在分支,并告诉你这个分支和对应的远程分支没有偏离。

当我们新创建了文件,

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    README

nothing added to commit but untracked files present (use "git add" to track)

会提示我们有一个untraced文件

我们使用git add跟踪新文件

 $ git add README 

我们再运行git status

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)

    new file:   README

表明文件处于staged(暂存)状态。

当我们修改了一个已被traced的文件,将会看到下面内容

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   CONTRIBUTING.md

我们执行git add命令,将修改的文件放入staged区。

$ git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   README
    modified:   CONTRIBUTING.md

如果我么想查看工作目录和staged做了哪些修改,运行如下命令

$ git diff
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8ebb991..643e24f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -65,7 +65,8 @@ branch directly, things can get messy.
 Please include a nice description of your changes when you submit your PR;
 if we have to read the whole diff to figure out why you're contributing
 in the first place, you're less likely to get feedback and have your change
-merged in.
+merged in. Also, split your changes into comprehensive chunks if your patch is
+longer than a dozen lines.

 If you are starting to work on a particular area, feel free to submit a PR
 that highlights your work in progress (and note in the PR title that it's

如果我们想查看staged和已提交的区别,运行如下命令

$ git diff --staged
diff --git a/README b/README
new file mode 100644
index 0000000..03902a1
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+My Project

下一步,我们把staged区的代码提交到本地仓库。执行命令git commit或者git commit -m '注释信息'

$ git commit -m "Story 182: Fix benchmarks for speed"
[master 463dc4f] Story 182: Fix benchmarks for speed
 2 files changed, 2 insertions(+)
 create mode 100644 README

执行commit后,会显示一些信息,这些信息包括当前分支是哪个分支,以及修改了几个文件、插入和删除了多少行。

如果我们提交时使用了-a参数(git commit -a -m '注释信息'),将可以省略git add命令。表示把所有已修改的文件放入staged区然后再提交。

我们使用git rm命令移除一个文件,这将移除staged区和工作目录中的文件

$ git rm PROJECTS.md
rm 'PROJECTS.md'
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    PROJECTS.md

下次提交,该文件将不再纳入版本管理了。

但有时候我们想把staged区或者git仓库中删除,但是仍然希望保留在当前工作目录中(比如我们把大量编译文件放入了staged区),我们可以使用如下命令

 $ git rm --cached README 

1.3 git log

该命令用于查看提交记录

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <[email protected]>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <[email protected]>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <[email protected]>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

查看patch,执行git log -p或git log --patch将会显示文件修改详情

$ git log -p

commit 17280786ca1714eb2a397f5a7f63d5b5ff15f37b (tag: v1.0)
Author: xxx
Date:   Wed Sep 21 13:56:11 2022 +0800

    修改szj.txt

diff --git a/szj.txt b/szj.txt
index aba5a14..0286f8d 100644
--- a/szj.txt
+++ b/szj.txt
@@ -1 +1,2 @@
-aaabbccdd
\ No newline at end of file
+aaabbccdd
+s
\ No newline at end of file

$ git log -2,表示只显示最近的2次提交

$ git log -2
commit 4dd4da02828991a353d44664443664ee76ebb519 (HEAD -> master)
Author: zhenjingcool
Date:   Wed Sep 21 21:47:51 2022 +0800

    rm

commit b3f62fcc4d7b7078d7a10cf5f1bb225df52ce1ca (origin/master)
Author: zhenjingcool
Date:   Wed Sep 21 16:31:56 2022 +0800

    推送到远端仓库

一行显示

$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

格式化显示

$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit

git log --pretty=format常用选项

选项说明

%H

提交的完整哈希值

%h

提交的简写哈希值

%T

树的完整哈希值

%t

树的简写哈希值

%P

父提交的完整哈希值

%p

父提交的简写哈希值

%an

作者名字

%ae

作者的电子邮件地址

%ad

作者修订日期(可以用 --date=选项 来定制格式)

%ar

作者修订日期,按多久以前的方式显示

%cn

提交者的名字

%ce

提交者的电子邮件地址

%cd

提交日期

%cr

提交日期(距今多长时间)

%s

提交说明

--since和--util

 $ git log --since=2.weeks 

-S

这个参数是一个过滤器,可以过滤提交内容(比如文件名、文件内容、提交注释中的关键字过滤等)

 

 

 常用的git log参数

选项说明

-p

按补丁格式显示每个提交引入的差异。

--stat

显示每次提交的文件修改统计信息。

--shortstat

只显示 --stat 中最后的行数修改添加移除统计。

--name-only

仅在提交信息后显示已修改的文件清单。

--name-status

显示新增、修改、删除的文件清单。

--abbrev-commit

仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。

--relative-date

使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。

--graph

在日志旁以 ASCII 图形显示分支与合并历史。

--pretty

使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。

--oneline

--pretty=oneline --abbrev-commit 合用的简写。

 

 

 

git log常用的限制输出参数

选项说明

-<n>

仅显示最近的 n 条提交。

--since--after

仅显示指定时间之后的提交。

--until--before

仅显示指定时间之前的提交。

--author

仅显示作者匹配指定字符串的提交。

--committer

仅显示提交者匹配指定字符串的提交。

--grep

仅显示提交说明中包含指定字符串的提交。

-S

仅显示添加或删除内容匹配指定字符串的提交。

 

 

标签:文件,教程,git,--,master,提交,使用,commit
From: https://www.cnblogs.com/zhenjingcool/p/16717395.html

相关文章

  • mybatis如何使用truncate清空表
    Mapper接口void truncateTable();XML文件<update id="truncateTable" >    TRUNCATETABLE表名  </update>注意:是<update>标签,不是<delete>标签......
  • windows下使用openssl将pfx格式证书转换成key和crt
    windows下安装opensshttp://slproweb.com/products/Win32OpenSSL.html 配置环境变量安装目录/bin目录放到path环境变量中  pfx格式证书转换成key和crt步骤1:先将......
  • vue 中如何使用基于 echarts 的 echarts-wordcloud 插件开发词云图
     echarts-wordcloud词云图官网:https://github.com/ecomfe/echarts-wordcloud 效果如下,每次刷新会随即变换文字颜色 安装npminstallecharts-wordcloudnpm......
  • 关于VScode中GDB调试和cmake配合使用的方法
    关于VScode调试GDB的说明      Hello,各位看官好,小弟最近在做嵌入式的项目,那么嵌入式的项目有三个很重要的工具,一个就是VScode,一个就是GDB,还有一个就是CMake工具......
  • redis的简单使用
    1.Redis安装Redis下载官网下载将压缩包上传到Linux服务器上/opt目录下解压压缩文件tar-zxvfredis-6.2.3.tar.gz安装GCC编译器yuminstall-ygcc......
  • Git将本地仓库上传到github
    这里采用简单的描述,提供两种方式:一、连接本地文件夹和远程仓库1.使用pull——拉取github项目文件(1)进入到自己要上传的文件夹内部,然后gitbashhere(2)输入命令gitini......
  • 记录几次git相关操作
    1.无法忽略部分文件gitrm-r--cached.解释:-r递归删除所有文件的索引,删除到add.之前的状态这时候再add和commit就忽略到那部分文件了2.无法pull因为本地pyc二进制......
  • skywalking安装以及使用go
    Skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决......
  • Phoenix使用及搭建 bulkLoad实现批量导入
    PhoenixPhoenix和hbase共用一个zookeeper,但是在刚建好Phoenix的时候是读不到hbase中的表的,在Phoenix中建过表之后在hbase中可以看到,在hbase中建过表Phoenix中看不到Hbas......
  • 如何使用 Git 管理配置文件
    现在很多软件的配置都可以在线同步或者支持导入导出,可以很方便的在不同设备上使用。但电脑上还有很多本地配置文件没有办法同步,夸多个设备使用时很难保持一致,换电脑也很麻......