Git的使用(一)基础

前几天天遇到个烦心事,想把作业提交push到github,结果弄来弄去没弄懂,作业和其他本地全被clean掉了,回收站都没找着,贼烦。根本原因都是之前学习git的使用一知半解,只求现用,现在几乎忘了。现在看着官方文档捋一遍。

Git是什么?
       它是一个版本控制系统,GIt使用‘快照’概念进行更新版本,比如当一个项目下某个文件改变时,为了效率,新版本项目只会保留变化的文件,未改变的文件就用链接指向之前版本存储的文件。这个概念很重要,非常有助于理解之后的使用!
对于数据的操作状态有三种:

  • 已修改,表示修改了文件,但没有提交到数据库
  • 已暂存,在执行add操作后的状态,表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交,在执行commit操作后的状态,表示数据已经安全地保存在本地数据库中。

三大区域:
工作区、暂存区域以及 Git 仓库.

  • 工作区:即我们平时修改的地方
  • 暂存区:保存了即将提交的修改信息,一般在 Git 仓库目录中,包括索引和数据(可以理解为创建了快照)
  • 仓库:保存提交后的项目(可以理解为永久保存快照)

Git的安装过程我就不写了,网上随便找找都有。
直接看安装完后的配置吧:

配置

安装完美后我们这样第一步都会设置我们自己的用户名和邮件地址:

$ git config --global user.name "Elizabeth"
$ git config --global user.email "[email protected]"

然后我们就可以用

$ git config --global user.name 
$ git config --global user.email 

查看全局的用户名和邮件地址了。
git config命令是用来设置GIt的配置变量的,
不同用户和不同仓库都可以设置不同配置
这些变量存储在三个不同的位置:
/etc/gitconfig~/.config/git/config.git/config
分别对应所有用户全局配置,当前用户配置,和当前仓库配置,级别从左到右越高,也就是会覆盖前者配置。
配置仓库用户:

$ git config user.name "Elizabai"
$ git config user.email "[email protected]"

查看仓库用户

git config user.name

查看全局/仓库配置

$ git config --global --list
$ git config --list

获取Git仓库

两种方式:

  1. 把本地目录转换为Git仓库
  2. 克隆远程仓库

1、第一种:
进到需要进行版本控制的目录下,执行命令:

$ git init

在这里插入图片描述
出现.git目录:
这里只需知道这是仓库的的骨干
然后添加文件到仓库:

$ git add test1.txt
$ git commit -m 'initial project version'

2、第二种

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

创建一个名为目录mylibgit,然后初始化一个.git文件后从远程仓库克隆。

各种状态

我们创建一个文件
在这里插入图片描述
test2.txt 内容为ABC
这时候使用git status查看当前状态:

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test2.txt

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

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)

表示了我们现在在master分支,还列出了未跟踪文件,和建议。
那我们git add 文件/目录添加到暂存区:

$ git add test2.txt

再看下状态

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test2.txt


96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)

列出已添加到暂存区的文件
我们可以用 git rm --cached 文件/目录来移除暂存区
如果你使用 git rm 文件/目录那git会把暂存区连带工作目录的该文件删除。
添加到暂存区
git add后Git就会跟踪这个文件的变化,我们来修改以下test2.txt的内容,加个D
看下状态:

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test2.txt

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


96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)

两个新提示:
第一个告诉我们可以使用 git add < file >来更新暂存区,
第二个告诉我们可以使用 git restore < file >来回到我们修改之前的内容

我们使用第一个将会回到我们修改之前的状态,也就是文件内容只有ABC了。
查看
我们可以用git diff来对比暂存区和仓库内容:

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git diff
diff --git a/test2.txt b/test2.txt
index 48b83b8..a6bddc4 100644
--- a/test2.txt
+++ b/test2.txt
@@ -1 +1 @@
-ABC
\ No newline at end of file
+ABCD
\ No newline at end of file

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)

看到了新文件可旧文件差别只有个D,而且两个文件末尾都没有换行

另外若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --stagedgit diff --cached命令。 这两条条命令将比对已暂存文件与最后一次提交的文件差异

提交更新
我们把修改后的test2.txt用git commit提交到本地仓库:

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git commit -m "第一次提交"
[master (root-commit) f40e8b9] 第一次提交
 1 file changed, 1 insertion(+)
 create mode 100644 test2.txt

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)

看一下状态:

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git status
On branch master
nothing to commit, working tree clean

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)

如果我们嫌上面暂存区的使用麻烦,Git还提供了快捷方式git commot -a来提交我们更改过的文件和暂存区的文件,这样即使我们懒得git add也可以直接提交了。

查看提交历史
接着上节test2.txt我分别添加E和F后分两次提交
再仓库下我们可以使用git log来查看提交历史:

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git log
commit 3868bcdb2f716c560177d1242875e84245f94ad7 (HEAD -> master)
Author: Elizabeth <Elizabeth@example.com>
Date:   Wed Apr 8 17:09:58 2020 +0800

    第三次提交

commit 0f06de25f32c9f390e5b83fb2eee055bcc05891c
Author: Elizabeth <Elizabeth@example.com>
Date:   Wed Apr 8 17:09:32 2020 +0800

    第二次提交

commit f40e8b946f2f5c39b26629cab15508f275ab0033
Author: Elizabeth <Elizabeth@example.com>
Date:   Wed Apr 8 16:51:21 2020 +0800

    第一次提交

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git log -p
commit 3868bcdb2f716c560177d1242875e84245f94ad7 (HEAD -> master)
Author: Elizabeth <Elizabeth@example.com>
Date:   Wed Apr 8 17:09:58 2020 +0800

    第三次提交

diff --git a/test2.txt b/test2.txt
index 402476b..1c5f8ba 100644
--- a/test2.txt
+++ b/test2.txt
@@ -1 +1 @@
-ABCDE
\ No newline at end of file
+ABCDEF
\ No newline at end of file

commit 0f06de25f32c9f390e5b83fb2eee055bcc05891c
Author: Elizabeth <Elizabeth@example.com>
Date:   Wed Apr 8 17:09:32 2020 +0800

    第二次提交

diff --git a/test2.txt b/test2.txt
index a6bddc4..402476b 100644
--- a/test2.txt
+++ b/test2.txt
@@ -1 +1 @@
-ABCD
\ No newline at end of file
+ABCDE
\ No newline at end of file

commit f40e8b946f2f5c39b26629cab15508f275ab0033
Author: Elizabeth <Elizabeth@example.com>
Date:   Wed Apr 8 16:51:21 2020 +0800

    第一次提交

diff --git a/test2.txt b/test2.txt
new file mode 100644
index 0000000..a6bddc4
--- /dev/null
+++ b/test2.txt
@@ -0,0 +1 @@
+ABCD
\ No newline at end of file
END

(按q退出)列举了每次提交的信息以及对比前一次的差异,常常的十六进制为版本号。
撤销操作
重新提交:git commit --amend

取消多个文件暂存操作后取消某个文件的暂存 git reset HEAD <file>...

撤销文件提交:git checkout -- <file>...,但这个有点危险的,你可以理解这个命令是:它将会拿出仓库那个最新版本来覆盖掉该文件!拿出后仓库最新版本的该文件也没了
这两个撤销操作都有风险,原因就在于我们期间对工作区文件的修改。

远程仓库配置使用

1、添加url:git remote add url名字 url
2、查看已有url git remote -v

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$  git remote add Url1 https://github.com/xxxx/xxxx.git

96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)
$ git remote -v
Url1    https://github.com/xxxx/xxxx.git (fetch)
Url1    https://github.com/xxxx/xxxx.git (push)
96916@DESKTOP-D7SKL2J MINGW64 ~/Desktop/GitReview (master)

拉取
$ git fetch <remote>
拉取我们还没有的数据,需要自己手动合并
推送
$ git push <remote> <branch>

打标签

创建标签:
为当前版本打标签v1, -m指定标签信息:
git tag -a v1 -m "my version 1.4"
连同标签将当前版本推到服务器:
$ git push Url1 v1
删除本地仓库标签
git tag -d <tagname>
删除远程仓库标签
$ git push Url1 :refs/tags/v1.4-lw

切换版本

查看版本号

回退到上一版本:
git reset --hard HEAD^
上上版本:
git reset --hard HEAD^
回退到之前前几个版本:
git reset --hard HEAD~3
回退到指定版本
git reset --hard 91010df
回退之后查看所以迭代版本
git reflog

发布了16 篇原创文章 · 获赞 0 · 访问量 249

猜你喜欢

转载自blog.csdn.net/weixin_43860530/article/details/105388779
今日推荐