1、Git 网站地址
https://git-scm.com/downloads
2、Git Gui工具
https://git-scm.com/downloads/guis
3、SVN是集中式的版本管理系统,容易出现单点故障。Git是分布式版本管理系统。
4、工作区域和文件状态
4.1)、在 Git 中有是三个区域,工作区(Work Directory)、暂存区(Staging Area/Index)、本地仓库(Local Respository)
工作区:工作目录、本地工作目录,大家在资源管理器能够看到的文件夹就是工作区。简单来说,工作区就是我们实际操作的目录。
暂存区:是一种临时保存区域,用于保存即将提交到Git仓库的修改内容。
本地仓库:就是我们使用 Git init 创建的那个仓库,它包含了完整的项目历史和元数据。
git add 是将工作区修改的内容增加到暂存区,git commit 就是将暂存区的内容提交到本地的 git 仓库。
4.2)、文件的状态有:Untrack(未跟踪)、Unmodified(未修改)、Modified(已修改)、Staged(已暂存)
Untrack(未跟踪):就是我们新创建的,还没有被 git 管理起来的文件。
Unmodified(未修改):文件已经被 git 管理起来,但是文件内容没有发生变化,还没有被修改过。
Modified(已修改):文件已经被我们修改过了,但是还没有提交到暂存区。
Staged(已暂存):文件已经被修改,并且已经添加到了暂存区内的文件。
Untrack(未跟踪)-------git add---->Unmodified(未修改)------修改文件--->Modified(已修改)----git add--->Staged(已暂存)
Untrack(未跟踪)-------git add---->Staged(已暂存)
Staged(已暂存)-------git commit--->Unmodified(未修改)
Staged(已暂存)-----git reset----->Modified(已修改)
Modified(已修改)------git checkout --->Unmodified(未修改)
Unmodified(未修改)------git rm----->Untrack(未跟踪)
5、Git 常用命令
1)、git -v , git --version
$ git -v
git version 2.41.0.windows.1
$ git --version
git version 2.41.0.windows.1
2 )、git config --global user.name patrickLiu 如果名称没有空格,可以直接写,如果有空格,可以用单引号或者双引号括起来。
全局配置用户名,可以在提交的时候知道是谁提交的。
省略(local):本地配置,只对本地仓库有效。
--global:全局配置,对所有的仓库有效。这个使用的最多。
--system:系统配置,对所有的用户生效。
3)、git config --global user.email ll_efort@sina.com
全局配置用户的邮箱。因为邮箱没有空格,可以直接书写邮箱,不用引号括起来。
4)、git config --global credential.helper store
全局配置,用于存储用户的账号和密码。
5)、 git config --global --list/-l
可以查看用户全局配置的信息。
$ git config --global --list
gui.recentrepo=E:/Visual Studio 2022/Source/Projects/dd
user.name=PatrickLiu
user.email=ll_efort@sina.com
credential.helper=store
$ git config --global -l
gui.recentrepo=E:/Visual Studio 2022/Source/Projects/dd
user.name=PatrickLiu
user.email=ll_efort@sina.com
credential.helper=store
6)、 git config --system --list/-l
查看系统级别的配置。
$ git config --system --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
7)、git config --list/-l
获取所有的配置的内容,包括用户的全局设置和系统级别的配置。
$ git config -l
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
gui.recentrepo=E:/Visual Studio 2022/Source/Projects/dd
user.name=PatrickLiu
user.email=ll_efort@sina.com
credential.helper=store
8)、创建仓库有两种方式,第一种:git init,在本地新建一个仓库,第二种:git clone,从远程克隆一个仓库。
8.1)、git init ..(目录)
在本地创建一个仓库
$ git init
Initialized empty Git repository in C:/Users/Administrator/Desktop/learn-git/.git/
命令执行之后,会在当前目录下生成一个隐藏的 .git的文件夹,说明仓库创建成功了。如果将这个隐藏文件夹删除,该文件夹就不再是一个仓库了,而是一个普通的文件夹了。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git (master)
$ ls -a
./ ../ .git/
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git (master)
$ cd .git/
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/.git (GIT_DIR!)
$ ll
total 7
-rw-r--r-- 1 Administrator 197121 23 Jul 7 13:46 HEAD
-rw-r--r-- 1 Administrator 197121 130 Jul 7 13:46 config
-rw-r--r-- 1 Administrator 197121 73 Jul 7 13:46 description
drwxr-xr-x 1 Administrator 197121 0 Jul 7 13:46 hooks/
drwxr-xr-x 1 Administrator 197121 0 Jul 7 13:46 info/
drwxr-xr-x 1 Administrator 197121 0 Jul 7 13:46 objects/
drwxr-xr-x 1 Administrator 197121 0 Jul 7 13:46 refs/
可以在 git init 命令之后跟一个名称,就会在当前目录下创建一个指定名称的仓库,并在该目录下生成一个隐藏的 .git 文件夹。
当前目录:/c/Users/Administrator/Desktop/learn-git
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git
$ pwd
/c/Users/Administrator/Desktop/learn-git
执行命令:git init myrepo
仓库目录:C:/Users/Administrator/Desktop/learn-git/myrepo/.git/
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git
$ git init myrepo
Initialized empty Git repository in C:/Users/Administrator/Desktop/learn-git/myrepo/.git/
8.2)、git clone 远程地址
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git
$ git clone https://gitee.com/Vanishi/BXC_SipServer.git
Cloning into 'BXC_SipServer'...
remote: Enumerating objects: 162, done.
remote: Counting objects: 100% (162/162), done.
remote: Compressing objects: 100% (110/110), done.
remote: Total 162 (delta 65), reused 116 (delta 44), pack-reused 0
Receiving objects: 100% (162/162), 1.89 MiB | 1.47 MiB/s, done.
Resolving deltas: 100% (65/65), done.
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git
$ cd BXC_SipServer/
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/BXC_SipServer (master)
$ ls -a
./ .git/ 3rdparty/ LICENSE SipServer.cpp Utils/ windows/
../ .gitignore CMakeLists.txt README.md SipServer.h main.cpp
在当前目录下也存在 .git 隐藏的文件夹,说明当前目录也是一个仓库。
9、git status
查看仓库的状态,比如可以查看当前仓库处在哪个分支,有哪些文件以及这些文件当前处在一个怎么样的状态。git 版本不同,分支名称的叫法也不同,比如有的叫 master,有的叫 main。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
file1.txt(红色字体,表示未被跟踪)
nothing added to commit but untracked files present (use "git add" to track)
10、git add 文件名/.(点表示当前目录的所有文件)
git add命令的作用就是将文件添加到暂存区,等待后续的提交操作。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git add file1.txt
warning: in the working copy of 'file1.txt', LF will be replaced by CRLF the next time Git touches it
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: file1.txt(绿色,未修改)
通配符提交:
*git add 可以使用通配符添加文件,我新建了4个.txt文件,一个.sh文件,git add *.txt 只提交文本文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ ls
file1.txt file2.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ echo "第三个文件" > file3.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ echo "第四个文件" > file4.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ echo "第五个文件" > file5.sh
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ ls
file1.txt file2.txt file3.txt file4.txt file5.sh
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
file2.txt
file3.txt
file4.txt
file5.sh
提交:
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git add *.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: file2.txt
new file: file3.txt
new file: file4.txt
(绿色,只提交了文本文件)
Untracked files:
(use "git add <file>..." to include in what will be committed)
file5.sh(红色,未提交)
通配符:.,点表示当前目录
git add .
提交当前目录下的所有文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git add .
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: file2.txt
new file: file3.txt
new file: file4.txt
new file: file5.sh
11、git rm --cached <file>...
表示将存放到暂存去的文件取回到工作区。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git rm --cached file1.txt
rm 'file1.txt'
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
file1.txt(又变成红色,未被跟踪)
nothing added to commit but untracked files present (use "git add" to track)
12、git commit -m "备注信息"
表示将暂存区的文件存放到本地的仓库里面,这个命令只会提交暂存区中的文件,而不会提交工作区的文件。如果不加 -m 参数,会进入到一个交互式的界面,编辑完成wq退出。
[master d37c4a5] 这是我的第五次修改
4 files changed, 4 insertions(+)
create mode 100644 file2.txt
create mode 100644 file3.txt
create mode 100644 file4.txt
create mode 100644 file5.sh
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
nothing to commit, working tree clean
13、git log --oneline
可以查看仓库的提交记录。
--oneline 表示查看简单的提交信息。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git log
commit d37c4a59193fe57880deeee25e07848e82312d38 (HEAD -> master)
Author: PatrickLiu <ll_efort@sina.com>
Date: Fri Jul 7 15:02:20 2023 +0800
这是我的第五次修改
commit 4560884f611b0ba7d3dae57ad292766405151d11
Author: PatrickLiu <ll_efort@sina.com>
Date: Fri Jul 7 14:50:40 2023 +0800
第一次提交
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git log --oneline
d37c4a5 (HEAD -> master) 这是我的第五次修改
4560884 第一次提交
14、git reset --<soft|hard|mixed> 版本id,mixed是默认的情况,不加任何参数就是 mixed 模式。
当我们需要撤销之前的一些修改内容,或者回退到之前的某一个版本,我们就可以使用这个命令。
git reset --soft soft参数表示回退到之前某一个版本,并且保留工作区和暂存区的所有修改内容。
git reset --hard hard参数表示回退到之前某一个版本,并且丢弃工作区和暂存区的所有修改内容。
git reset --mixed mixed参数表示回退到某一个版本,并且只保留工作区的修改内容,丢弃暂存区的修改内容。
1)、SOFT:
之前提交了3个版本。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git log --oneline
650dc29 (HEAD -> master) commit3
247596d commint2
e11887c commint1
执行命令后,回退到第二个版本
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ git reset --soft 247596d
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ git log --oneline
247596d (HEAD -> master) commint2
e11887c commint1
验证结果:
1】、使用ls命令查看当前工作区的内容。由于回退到第二版本,file3.txt文件是没提交的,文件是存在的。内容也是存在的。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ ls
file1.txt file2.txt file3.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ cat file3.txt
3333
2】、查看暂存区的内容。
git ls-files
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ git ls-files
file1.txt
file2.txt
file3.txt
在工作区中,file3.txt文件也是存在的。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: file3.txt(提示file3.txt是新文件)
2)、HARD:
回退到上一个版本,一共提交了3个版本,回退到第二版本,每个版本增加一个文件。HEAD^ 表示上一个版本
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-hard (master)
$ git reset --hard HEAD^
HEAD is now at 247596d commint2
回退成功,只剩两个提交的版本了。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-hard (master)
$ git log --oneline
247596d (HEAD -> master) commint2
e11887c commint1
查看工作区的内容,使用命令:ls
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-hard (master)
$ ls
file1.txt file2.txt
在工作区中,file3.txt被丢弃了。
查看暂存区的内容,使用命令:git ls-files
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-hard (master)
$ git ls-files
file1.txt
file2.txt
在暂存区中,file3.txt也被丢弃了。
2)、MIXED:
回退到上一个版本,一共提交了3个版本,回退到第二版本,每个版本增加一个文件。HEAD^ 表示上一个版本
原始状态
$ git log --oneline
650dc29 (HEAD -> master) commit3
247596d commint2
e11887c commint1
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ git reset HEAD^
查看提交的日志,只剩2个版本了。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ git log --oneline
247596d (HEAD -> master) commint2
e11887c commint1
查看工作区的情况:
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ ls
file1.txt file2.txt file3.txt
在工作区中,file3.txt文件还是存在的。
查看暂存区的情况:
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ git ls-files
file1.txt
file2.txt
在暂存区中,file3.txt文件已经存在的。
15、git reflog
尽量不要使用 git reset --hard 参数,如果不小心使用了,可以使用 git reflog 命令来恢复。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ git reflog
247596d (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
650dc29 HEAD@{1}: commit: commit3
247596d (HEAD -> master) HEAD@{2}: commit: commint2
e11887c HEAD@{3}: commit (initial): commint1
16、git diff 显示差异。
它可以用来查看文件在工作区、暂存区以及版本库之间的差异,它还可以查看文件在两个特定版本之间的差异,或者两个文件在分支之间的差异。如果 git diff 命令后面什么都不加,默认是比较的是工作区和暂存区之间的差异内容,它会显示发生更改的文件以及更改的详细信息。
1)、比较工作区和暂存区的差异。
命令:git diff
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff
diff --git a/file3.txt b/file3.txt(发生变更的文件)
index 3bd9bce..99e406d 100644(Git 会将文件的内容使用哈希算法生成一个40位的哈希值,这里只显示了哈希值的前七位,100644 表示文件的权限)
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333(红色,表示删除的内容)
+环境你过来.(绿色,表示增加的内容)
增加到暂存区
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git add .
再次运行,就没有任何显示了,表示我们工作区和暂存区的内容是一样的。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff
2)、比较工作区和版本库之间的差异。
命令:git diff HEAD
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
由于我们还没有增加到版本库,工作区和版本库之间的内容是不相同的,所以这个差异又显示出来了。
3)、比较暂存区和版本库之间的差异。
命令:git diff --cached
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff --cached
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
由于我们还没有增加到版本库,暂存区和版本库之间的内容是不相同的,所以这个差异又显示出来了。
提交一下,再次比较,内容一样了,就没有输出了。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git commit -m "commit4"
[master 9a938d7] commit4
1 file changed, 1 insertion(+), 1 deletion(-)
暂存区和版本库内容一致,没有输出。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff --cached
工作区和版本库内容一致,没有输出。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD
4)、比较两个版本之间的差异,增加要比较差异的两个版本号,就可以了。
命令: git diff 版本号1 版本号2
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff 650dc29 9a938d7
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
我们可以使用某个版本号和HEAD进行比较
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff 650dc29 HEAD
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
比较当前版本和上一个版本之间的差异
命令:git diff HEAD~ HEAD 或者 git diff HEAD^ HEAD
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD~ HEAD
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD^ HEAD
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
比较当前版本和上一个版本之间的差异
命令:git diff HEAD~[数字] 数字表示之间的N个版本,git diff HEAD~2 HEAD 比较当前版本和之前的两个版本之间的差异。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD~2 HEAD
diff --git a/file3.txt b/file3.txt
new file mode 100644
index 0000000..99e406d
--- /dev/null
+++ b/file3.txt
@@ -0,0 +1 @@
+环境你过来.
查看指定文件的差异。git diff HEAD~2 HEAD 文件名
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD~2 HEAD file3.txt
diff --git a/file3.txt b/file3.txt
new file mode 100644
index 0000000..99e406d
--- /dev/null
+++ b/file3.txt
@@ -0,0 +1 @@
+环境你过来.
17、git rm 从版本库中删除文件。
1)、rm file;git add ./file 先从工作区中删除文件,然后再从暂存区中删除文件。
2)、git rm <file> 把文件从工作区中和暂存区中同时删除。
//包含file2.txt文件
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ ls
file2.txt file3.txt file4.txt file5.txt
//从工作区和暂存区删除文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git rm file2.txt
rm 'my-repo/file2.txt'
//工作区已经没了 file2.txt文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ ls
file3.txt file4.txt file5.txt
//暂存区已经没了 file2.txt文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git ls-files
file3.txt
file4.txt
file5.txt
3)、git rm --cached <file> 把文件从暂存区中删除,但是保留工作区中的文件。
//新增加了一个 file6.txt的文件
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git ls-files
file3.txt
file4.txt
file5.txt
file6.txt
//从暂存区删除file6.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git rm --cached file6.txt
rm 'my-repo/file6.txt'
//工作区还有 file6.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ ls
file3.txt file4.txt file5.txt file6.txt
//暂存区没有file6.txt文件了
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git ls-files
file3.txt
file4.txt
file5.txt
4)、git rm -r * 递归删除某个目录下的所有子目录和文件。
18、gitignore 文件
1)、空的文件夹是不会被 Git 管理的。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ mkdir temp
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git status
On branch master
nothing to commit, working tree clean
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ echo "hello" > temp/hello.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
temp/
nothing added to commit but untracked files present (use "git add" to track)
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git status -s(short)
?? temp/(两个问好:第一个问号:表示暂存区的状态;第二个问号:表示工作区的状态)
2)、gitignore文件起作用的前提是,不能提交到版本库的。
3)、gitignore文件夹必须以斜杠结尾,如:temp/。
4)、gitigonre
空格、#:git 会忽略。
*:匹配多个字符
?:匹配单个字符
[abc]:匹配这个范围任何一个字符。
[1-9]、[a-z]:
19、(1)、git remote add <远程仓库别名><远程仓库地址>增加本地仓库到远程仓库;(2)、git push -u <远程仓库名><分支名>
//初始化本地仓库
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library
$ git init
Initialized empty Git repository in E:/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library/.git/
//将本地仓库增加到远程仓库中
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git remote add origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git remote -v:这个命令可以查看当前仓库所对应的远程仓库的别名和地址。
origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git (fetch)
origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git (push)
//指定分支的名称为 master,由于我们默认分支的名称就是 master,这句话可以不用执行。
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git branch -M master
//就是把我们本地的 master 分支和远程的 origin 仓库的 master 分支关联起来。
$ git push -u(upstream:就是将我们本地仓库和远程仓库关联起来) origin master(本地分支名):master(远程分支名),如果名称一样,可以只写一个。
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git push -u origin master
Password authentication
(patrickliu@192.168.0.108) Password:(这个也输入密码)
To ssh://192.168.0.108:29418/OpticalTrap.Framework.Libraries.git
20、git remote -v 查看远程仓库的别名和地址。
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git remote -v
origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git (fetch)
origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git (push)
21、git pull <远程仓库别名><远程分支名>:<本地分支名>
<远程分支名>和<本地分支名>如果相同可省略冒号后面的部分。
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git pull origin master(后面的省略了)
Password authentication
(patrickliu@192.168.0.108) Password:(需要输入密码)
From ssh://192.168.0.108:29418/OpticalTrap.Framework.Libraries
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
22、gitignore 文件
https://git-scm.com/downloads
2、Git Gui工具
https://git-scm.com/downloads/guis
3、SVN是集中式的版本管理系统,容易出现单点故障。Git是分布式版本管理系统。
4、工作区域和文件状态
4.1)、在 Git 中有是三个区域,工作区(Work Directory)、暂存区(Staging Area/Index)、本地仓库(Local Respository)
工作区:工作目录、本地工作目录,大家在资源管理器能够看到的文件夹就是工作区。简单来说,工作区就是我们实际操作的目录。
暂存区:是一种临时保存区域,用于保存即将提交到Git仓库的修改内容。
本地仓库:就是我们使用 Git init 创建的那个仓库,它包含了完整的项目历史和元数据。
git add 是将工作区修改的内容增加到暂存区,git commit 就是将暂存区的内容提交到本地的 git 仓库。
4.2)、文件的状态有:Untrack(未跟踪)、Unmodified(未修改)、Modified(已修改)、Staged(已暂存)
Untrack(未跟踪):就是我们新创建的,还没有被 git 管理起来的文件。
Unmodified(未修改):文件已经被 git 管理起来,但是文件内容没有发生变化,还没有被修改过。
Modified(已修改):文件已经被我们修改过了,但是还没有提交到暂存区。
Staged(已暂存):文件已经被修改,并且已经添加到了暂存区内的文件。
Untrack(未跟踪)-------git add---->Unmodified(未修改)------修改文件--->Modified(已修改)----git add--->Staged(已暂存)
Untrack(未跟踪)-------git add---->Staged(已暂存)
Staged(已暂存)-------git commit--->Unmodified(未修改)
Staged(已暂存)-----git reset----->Modified(已修改)
Modified(已修改)------git checkout --->Unmodified(未修改)
Unmodified(未修改)------git rm----->Untrack(未跟踪)
5、Git 常用命令
1)、git -v , git --version
$ git -v
git version 2.41.0.windows.1
$ git --version
git version 2.41.0.windows.1
2 )、git config --global user.name patrickLiu 如果名称没有空格,可以直接写,如果有空格,可以用单引号或者双引号括起来。
全局配置用户名,可以在提交的时候知道是谁提交的。
省略(local):本地配置,只对本地仓库有效。
--global:全局配置,对所有的仓库有效。这个使用的最多。
--system:系统配置,对所有的用户生效。
3)、git config --global user.email ll_efort@sina.com
全局配置用户的邮箱。因为邮箱没有空格,可以直接书写邮箱,不用引号括起来。
4)、git config --global credential.helper store
全局配置,用于存储用户的账号和密码。
5)、 git config --global --list/-l
可以查看用户全局配置的信息。
$ git config --global --list
gui.recentrepo=E:/Visual Studio 2022/Source/Projects/dd
user.name=PatrickLiu
user.email=ll_efort@sina.com
credential.helper=store
$ git config --global -l
gui.recentrepo=E:/Visual Studio 2022/Source/Projects/dd
user.name=PatrickLiu
user.email=ll_efort@sina.com
credential.helper=store
6)、 git config --system --list/-l
查看系统级别的配置。
$ git config --system --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
7)、git config --list/-l
获取所有的配置的内容,包括用户的全局设置和系统级别的配置。
$ git config -l
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
gui.recentrepo=E:/Visual Studio 2022/Source/Projects/dd
user.name=PatrickLiu
user.email=ll_efort@sina.com
credential.helper=store
8)、创建仓库有两种方式,第一种:git init,在本地新建一个仓库,第二种:git clone,从远程克隆一个仓库。
8.1)、git init ..(目录)
在本地创建一个仓库
$ git init
Initialized empty Git repository in C:/Users/Administrator/Desktop/learn-git/.git/
命令执行之后,会在当前目录下生成一个隐藏的 .git的文件夹,说明仓库创建成功了。如果将这个隐藏文件夹删除,该文件夹就不再是一个仓库了,而是一个普通的文件夹了。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git (master)
$ ls -a
./ ../ .git/
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git (master)
$ cd .git/
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/.git (GIT_DIR!)
$ ll
total 7
-rw-r--r-- 1 Administrator 197121 23 Jul 7 13:46 HEAD
-rw-r--r-- 1 Administrator 197121 130 Jul 7 13:46 config
-rw-r--r-- 1 Administrator 197121 73 Jul 7 13:46 description
drwxr-xr-x 1 Administrator 197121 0 Jul 7 13:46 hooks/
drwxr-xr-x 1 Administrator 197121 0 Jul 7 13:46 info/
drwxr-xr-x 1 Administrator 197121 0 Jul 7 13:46 objects/
drwxr-xr-x 1 Administrator 197121 0 Jul 7 13:46 refs/
可以在 git init 命令之后跟一个名称,就会在当前目录下创建一个指定名称的仓库,并在该目录下生成一个隐藏的 .git 文件夹。
当前目录:/c/Users/Administrator/Desktop/learn-git
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git
$ pwd
/c/Users/Administrator/Desktop/learn-git
执行命令:git init myrepo
仓库目录:C:/Users/Administrator/Desktop/learn-git/myrepo/.git/
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git
$ git init myrepo
Initialized empty Git repository in C:/Users/Administrator/Desktop/learn-git/myrepo/.git/
8.2)、git clone 远程地址
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git
$ git clone https://gitee.com/Vanishi/BXC_SipServer.git
Cloning into 'BXC_SipServer'...
remote: Enumerating objects: 162, done.
remote: Counting objects: 100% (162/162), done.
remote: Compressing objects: 100% (110/110), done.
remote: Total 162 (delta 65), reused 116 (delta 44), pack-reused 0
Receiving objects: 100% (162/162), 1.89 MiB | 1.47 MiB/s, done.
Resolving deltas: 100% (65/65), done.
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git
$ cd BXC_SipServer/
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/BXC_SipServer (master)
$ ls -a
./ .git/ 3rdparty/ LICENSE SipServer.cpp Utils/ windows/
../ .gitignore CMakeLists.txt README.md SipServer.h main.cpp
在当前目录下也存在 .git 隐藏的文件夹,说明当前目录也是一个仓库。
9、git status
查看仓库的状态,比如可以查看当前仓库处在哪个分支,有哪些文件以及这些文件当前处在一个怎么样的状态。git 版本不同,分支名称的叫法也不同,比如有的叫 master,有的叫 main。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
file1.txt(红色字体,表示未被跟踪)
nothing added to commit but untracked files present (use "git add" to track)
10、git add 文件名/.(点表示当前目录的所有文件)
git add命令的作用就是将文件添加到暂存区,等待后续的提交操作。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git add file1.txt
warning: in the working copy of 'file1.txt', LF will be replaced by CRLF the next time Git touches it
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: file1.txt(绿色,未修改)
通配符提交:
*git add 可以使用通配符添加文件,我新建了4个.txt文件,一个.sh文件,git add *.txt 只提交文本文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ ls
file1.txt file2.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ echo "第三个文件" > file3.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ echo "第四个文件" > file4.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ echo "第五个文件" > file5.sh
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ ls
file1.txt file2.txt file3.txt file4.txt file5.sh
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
file2.txt
file3.txt
file4.txt
file5.sh
提交:
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git add *.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: file2.txt
new file: file3.txt
new file: file4.txt
(绿色,只提交了文本文件)
Untracked files:
(use "git add <file>..." to include in what will be committed)
file5.sh(红色,未提交)
通配符:.,点表示当前目录
git add .
提交当前目录下的所有文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git add .
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: file2.txt
new file: file3.txt
new file: file4.txt
new file: file5.sh
11、git rm --cached <file>...
表示将存放到暂存去的文件取回到工作区。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git rm --cached file1.txt
rm 'file1.txt'
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
file1.txt(又变成红色,未被跟踪)
nothing added to commit but untracked files present (use "git add" to track)
12、git commit -m "备注信息"
表示将暂存区的文件存放到本地的仓库里面,这个命令只会提交暂存区中的文件,而不会提交工作区的文件。如果不加 -m 参数,会进入到一个交互式的界面,编辑完成wq退出。
[master d37c4a5] 这是我的第五次修改
4 files changed, 4 insertions(+)
create mode 100644 file2.txt
create mode 100644 file3.txt
create mode 100644 file4.txt
create mode 100644 file5.sh
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git status
On branch master
nothing to commit, working tree clean
13、git log --oneline
可以查看仓库的提交记录。
--oneline 表示查看简单的提交信息。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git log
commit d37c4a59193fe57880deeee25e07848e82312d38 (HEAD -> master)
Author: PatrickLiu <ll_efort@sina.com>
Date: Fri Jul 7 15:02:20 2023 +0800
这是我的第五次修改
commit 4560884f611b0ba7d3dae57ad292766405151d11
Author: PatrickLiu <ll_efort@sina.com>
Date: Fri Jul 7 14:50:40 2023 +0800
第一次提交
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/myrepo (master)
$ git log --oneline
d37c4a5 (HEAD -> master) 这是我的第五次修改
4560884 第一次提交
14、git reset --<soft|hard|mixed> 版本id,mixed是默认的情况,不加任何参数就是 mixed 模式。
当我们需要撤销之前的一些修改内容,或者回退到之前的某一个版本,我们就可以使用这个命令。
git reset --soft soft参数表示回退到之前某一个版本,并且保留工作区和暂存区的所有修改内容。
git reset --hard hard参数表示回退到之前某一个版本,并且丢弃工作区和暂存区的所有修改内容。
git reset --mixed mixed参数表示回退到某一个版本,并且只保留工作区的修改内容,丢弃暂存区的修改内容。
1)、SOFT:
之前提交了3个版本。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git log --oneline
650dc29 (HEAD -> master) commit3
247596d commint2
e11887c commint1
执行命令后,回退到第二个版本
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ git reset --soft 247596d
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ git log --oneline
247596d (HEAD -> master) commint2
e11887c commint1
验证结果:
1】、使用ls命令查看当前工作区的内容。由于回退到第二版本,file3.txt文件是没提交的,文件是存在的。内容也是存在的。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ ls
file1.txt file2.txt file3.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ cat file3.txt
3333
2】、查看暂存区的内容。
git ls-files
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ git ls-files
file1.txt
file2.txt
file3.txt
在工作区中,file3.txt文件也是存在的。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-soft (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: file3.txt(提示file3.txt是新文件)
2)、HARD:
回退到上一个版本,一共提交了3个版本,回退到第二版本,每个版本增加一个文件。HEAD^ 表示上一个版本
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-hard (master)
$ git reset --hard HEAD^
HEAD is now at 247596d commint2
回退成功,只剩两个提交的版本了。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-hard (master)
$ git log --oneline
247596d (HEAD -> master) commint2
e11887c commint1
查看工作区的内容,使用命令:ls
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-hard (master)
$ ls
file1.txt file2.txt
在工作区中,file3.txt被丢弃了。
查看暂存区的内容,使用命令:git ls-files
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-hard (master)
$ git ls-files
file1.txt
file2.txt
在暂存区中,file3.txt也被丢弃了。
2)、MIXED:
回退到上一个版本,一共提交了3个版本,回退到第二版本,每个版本增加一个文件。HEAD^ 表示上一个版本
原始状态
$ git log --oneline
650dc29 (HEAD -> master) commit3
247596d commint2
e11887c commint1
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ git reset HEAD^
查看提交的日志,只剩2个版本了。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ git log --oneline
247596d (HEAD -> master) commint2
e11887c commint1
查看工作区的情况:
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ ls
file1.txt file2.txt file3.txt
在工作区中,file3.txt文件还是存在的。
查看暂存区的情况:
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ git ls-files
file1.txt
file2.txt
在暂存区中,file3.txt文件已经存在的。
15、git reflog
尽量不要使用 git reset --hard 参数,如果不小心使用了,可以使用 git reflog 命令来恢复。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo-mixed (master)
$ git reflog
247596d (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
650dc29 HEAD@{1}: commit: commit3
247596d (HEAD -> master) HEAD@{2}: commit: commint2
e11887c HEAD@{3}: commit (initial): commint1
16、git diff 显示差异。
它可以用来查看文件在工作区、暂存区以及版本库之间的差异,它还可以查看文件在两个特定版本之间的差异,或者两个文件在分支之间的差异。如果 git diff 命令后面什么都不加,默认是比较的是工作区和暂存区之间的差异内容,它会显示发生更改的文件以及更改的详细信息。
1)、比较工作区和暂存区的差异。
命令:git diff
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff
diff --git a/file3.txt b/file3.txt(发生变更的文件)
index 3bd9bce..99e406d 100644(Git 会将文件的内容使用哈希算法生成一个40位的哈希值,这里只显示了哈希值的前七位,100644 表示文件的权限)
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333(红色,表示删除的内容)
+环境你过来.(绿色,表示增加的内容)
增加到暂存区
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git add .
再次运行,就没有任何显示了,表示我们工作区和暂存区的内容是一样的。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff
2)、比较工作区和版本库之间的差异。
命令:git diff HEAD
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
由于我们还没有增加到版本库,工作区和版本库之间的内容是不相同的,所以这个差异又显示出来了。
3)、比较暂存区和版本库之间的差异。
命令:git diff --cached
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff --cached
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
由于我们还没有增加到版本库,暂存区和版本库之间的内容是不相同的,所以这个差异又显示出来了。
提交一下,再次比较,内容一样了,就没有输出了。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git commit -m "commit4"
[master 9a938d7] commit4
1 file changed, 1 insertion(+), 1 deletion(-)
暂存区和版本库内容一致,没有输出。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff --cached
工作区和版本库内容一致,没有输出。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD
4)、比较两个版本之间的差异,增加要比较差异的两个版本号,就可以了。
命令: git diff 版本号1 版本号2
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff 650dc29 9a938d7
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
我们可以使用某个版本号和HEAD进行比较
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff 650dc29 HEAD
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
比较当前版本和上一个版本之间的差异
命令:git diff HEAD~ HEAD 或者 git diff HEAD^ HEAD
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD~ HEAD
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD^ HEAD
diff --git a/file3.txt b/file3.txt
index 3bd9bce..99e406d 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-3333
+环境你过来.
比较当前版本和上一个版本之间的差异
命令:git diff HEAD~[数字] 数字表示之间的N个版本,git diff HEAD~2 HEAD 比较当前版本和之前的两个版本之间的差异。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD~2 HEAD
diff --git a/file3.txt b/file3.txt
new file mode 100644
index 0000000..99e406d
--- /dev/null
+++ b/file3.txt
@@ -0,0 +1 @@
+环境你过来.
查看指定文件的差异。git diff HEAD~2 HEAD 文件名
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/repo (master)
$ git diff HEAD~2 HEAD file3.txt
diff --git a/file3.txt b/file3.txt
new file mode 100644
index 0000000..99e406d
--- /dev/null
+++ b/file3.txt
@@ -0,0 +1 @@
+环境你过来.
17、git rm 从版本库中删除文件。
1)、rm file;git add ./file 先从工作区中删除文件,然后再从暂存区中删除文件。
2)、git rm <file> 把文件从工作区中和暂存区中同时删除。
//包含file2.txt文件
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ ls
file2.txt file3.txt file4.txt file5.txt
//从工作区和暂存区删除文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git rm file2.txt
rm 'my-repo/file2.txt'
//工作区已经没了 file2.txt文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ ls
file3.txt file4.txt file5.txt
//暂存区已经没了 file2.txt文件。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git ls-files
file3.txt
file4.txt
file5.txt
3)、git rm --cached <file> 把文件从暂存区中删除,但是保留工作区中的文件。
//新增加了一个 file6.txt的文件
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git ls-files
file3.txt
file4.txt
file5.txt
file6.txt
//从暂存区删除file6.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git rm --cached file6.txt
rm 'my-repo/file6.txt'
//工作区还有 file6.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ ls
file3.txt file4.txt file5.txt file6.txt
//暂存区没有file6.txt文件了
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git ls-files
file3.txt
file4.txt
file5.txt
4)、git rm -r * 递归删除某个目录下的所有子目录和文件。
18、gitignore 文件
1)、空的文件夹是不会被 Git 管理的。
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ mkdir temp
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git status
On branch master
nothing to commit, working tree clean
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ echo "hello" > temp/hello.txt
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
temp/
nothing added to commit but untracked files present (use "git add" to track)
Administrator@MS-VMSQSWIJZFNM MINGW64 ~/Desktop/learn-git/my-repo (master)
$ git status -s(short)
?? temp/(两个问好:第一个问号:表示暂存区的状态;第二个问号:表示工作区的状态)
2)、gitignore文件起作用的前提是,不能提交到版本库的。
3)、gitignore文件夹必须以斜杠结尾,如:temp/。
4)、gitigonre
空格、#:git 会忽略。
*:匹配多个字符
?:匹配单个字符
[abc]:匹配这个范围任何一个字符。
[1-9]、[a-z]:
19、(1)、git remote add <远程仓库别名><远程仓库地址>增加本地仓库到远程仓库;(2)、git push -u <远程仓库名><分支名>
//初始化本地仓库
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library
$ git init
Initialized empty Git repository in E:/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library/.git/
//将本地仓库增加到远程仓库中
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git remote add origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git remote -v:这个命令可以查看当前仓库所对应的远程仓库的别名和地址。
origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git (fetch)
origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git (push)
//指定分支的名称为 master,由于我们默认分支的名称就是 master,这句话可以不用执行。
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git branch -M master
//就是把我们本地的 master 分支和远程的 origin 仓库的 master 分支关联起来。
$ git push -u(upstream:就是将我们本地仓库和远程仓库关联起来) origin master(本地分支名):master(远程分支名),如果名称一样,可以只写一个。
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git push -u origin master
Password authentication
(patrickliu@192.168.0.108) Password:(这个也输入密码)
To ssh://192.168.0.108:29418/OpticalTrap.Framework.Libraries.git
20、git remote -v 查看远程仓库的别名和地址。
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git remote -v
origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git (fetch)
origin ssh://patrickliu@192.168.0.108:29418/OpticalTrap.Framework.Libraries.git (push)
21、git pull <远程仓库别名><远程分支名>:<本地分支名>
<远程分支名>和<本地分支名>如果相同可省略冒号后面的部分。
Administrator@MS-VMSQSWIJZFNM MINGW64 /e/Visual Studio 2022/Source/Projects/OpticalTrap.Common.Library (master)
$ git pull origin master(后面的省略了)
Password authentication
(patrickliu@192.168.0.108) Password:(需要输入密码)
From ssh://192.168.0.108:29418/OpticalTrap.Framework.Libraries
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
22、gitignore 文件
天下国家,可均也;爵禄,可辞也;白刃,可蹈也;中庸不可能也
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
2018-12-20 Newtonsoft.Json 你必须知道的一些用法