一、初始化配置
使用方式
命令行、图形化界面、IDE插件
首先配置用户名
git config --global user.name "LxlTx"
再来配置邮箱
git config --global user.email 11……@qq.com
注意:以上命令只需要执行一次,如果之前已经执行过了,那么这一步可以省略。
保存用户名和密码到本地
git config --global credential.helper store
git config --global credential.helper store
是一个 Git 命令,用于配置 Git 在处理远程仓库时如何存储凭据(credentials)。
git config
:这是用于配置 Git 版本控制系统的命令。--global
:这个选项告诉 Git 将配置应用到全局范围,而不仅仅是当前仓库。全局配置会影响当前用户的所有 Git 仓库。credential.helper
:这是 Git 的一个配置项,用于指定 Git 如何处理用户凭据(用户名和密码)。store
:这是credential.helper
的一个选项,指示 Git 将凭据存储在明文文件中。当你使用这个选项时,Git 会将凭据保存在明文文件中,以后访问远程仓库时会从这个文件中读取凭据,而不需要每次都输入用户名和密码。
需要注意的是,虽然
credential.helper store
是一个方便的选项,但它会将凭据明文存储在本地磁盘上,存在安全风险。建议在安全性要求较高的环境中避免使用这种方式,而是考虑使用其他更安全的凭据管理方式,比如 SSH 密钥、OAuth 令牌等。
列出当前用户的全局 Git 配置信息
git config --global --list
通过运行这个命令,你可以查看当前用户的 Git 全局配置信息,以确保配置正确设置,比如确认你的用户名、邮箱等信息是否正确。
查看完以后,关闭终端,重启即可。
二、新建仓库
创建仓库的两种方式
- 本地建立仓库
- GitHub克隆仓库
2-1:方式一
现在我们先来讲解第一种方式.
首先新建一个目录
mkdir learn-git
是一个命令行指令,用于在当前工作目录下创建一个名为 “learn-git” 的新目录(或文件夹)。
mkdir
:这是 ** “make directory” 的缩写,**用于在文件系统中创建新目录。learn-git
:这是你想要创建的新目录的名称。在这种情况下,你正在创建一个名为 “learn-git” 的新目录。
因此,当你运行
mkdir learn-git
命令时,会在当前工作目录下创建一个名为 “learn-git” 的新目录。这个新目录可以用来存储关于学习 Git 版本控制系统的文件和项目,我们后续的教程也会在这个目录下展开,所以大家最好先不要重命名。
进入新建的目录
当你执行
cd learn-git
这个命令时,系统会尝试将当前工作目录更改为名为 “learn-git” 的子目录。这个命令会尝试进入名为 “learn-git” 的目录,如果该目录存在并且你有相应的权限,你的当前工作目录将会更改为 “learn-git” 目录。
需要注意的是,如果 “learn-git” 目录不存在,或者你没有足够的权限访问该目录,那么执行这个命令时会收到一个错误消息。
在这种情况下,确保在执行
cd learn-git
命令之前,已经通过
mkdir learn-git
命令创建了名为 “learn-git” 的目录。这样你才能成功地进入这个目录。
创建仓库
git init
是一个 Git 命令,用于在当前目录中初始化一个新的 Git 仓库。当你在一个项目目录下执行
git init
命令时,Git 会在该目录中创建一个新的 Git 仓库,这样你就可以开始对项目进行版本控制。
在执行
git init
命令后,Git 会在当前目录下生成一个名为 “.git” 的子目录,这个目录包含了 Git 仓库的所有必要文件和子目录,用于跟踪项目中的文件变化、记录历史版本等操作。
**一旦执行了
git init
,你就可以开始使用其他 Git 命令来管理你的项目**,比如
git add
将文件添加到暂存区、
git commit
提交文件的变化等。这样你就可以充分利用 Git 的功能来跟踪文件的变化、协作开发以及管理项目的版本历史。
现在来查看一下仓库里的内容
注意,.git目录是一个隐藏目录,直接输入ls是无法显示的,需要再操作一下。
如果看到.git目录,则表明我们的仓库已经创建成功了。现在进入仓库,查看详细的配置。
列出目录下的文件和子目录,并按照一定的顺序进行排序显示
ls -altr
是一个在 Unix/Linux 系统中常用的命令,下面是对这个命令中每个部分的解释:
ls
: 表示列出目录内容的命令。-a
: 表示显示所有文件,包括以.
开头的隐藏文件。普通的ls
命令默认不显示以.
开头的隐藏文件。-l
: 表示以长格式(详细列表)显示文件信息,包括文件权限、所有者、文件大小、修改日期等。-t
: 表示按照文件修改时间进行排序,最新修改的文件会显示在列表的前面。-r
: 表示以相反的顺序显示,即反向排序。
ls -altr
命令会列出指定目录下的所有文件和子目录,包括隐藏文件,并按照最后修改时间的先后顺序进行反向排序,最新修改的文件会显示在列表的最后。同时,会显示详细的文件信息,如权限、所有者、文件大小等。
创建指定用户名的仓库
首先回到主目录
进入仓库
显示详细信息
2-2:方式二
首先进入你要克隆的仓库页面,复制仓库地址。
首先回到learn-git目录
cd ..
是一个常用的命令行指令,用于切换到当前工作目录的父目录。在命令行中,**
cd
是用来改变当前工作目录的命令,而
…
表示当前目录的父目录**。
当你在命令行中输入
cd ..
并按下回车键时,系统会将当前工作目录切换到上一级目录。这样你可以在文件系统中向上一级目录导航,方便你在不同目录之间进行切换和操作。
举个例子,假设你当前的工作目录是
/home/user/documents
,如果你执行
cd ..
命令,那么你的工作目录会变成
/home/user
,即当前目录的父目录。这样你可以在不同目录之间灵活地切换,方便进行文件操作和管理。
输入代码
git clone https://github.com/mahmoodlab/HIPT.git
如上图所示,会发现报错了,原因是代理端口不同,即使你挂了梯子,也同样会出现这个问题。
解决方法如下
git config --global --unset http.proxy
git config --global --unset http.proxy
是一个 Git 命令,用于在全局 Git 配置中取消设置 HTTP 代理。这个命令会将全局 Git 配置中的 HTTP 代理设置移除,这样 Git 在进行网络操作时将不再使用代理。
git config
:Git 命令行工具中用于配置 Git 的命令。--global
:表示这是一个全局配置,即对所有 Git 仓库都生效,而不仅仅是当前仓库。--unset
:表示取消或移除配置项的设置。http.proxy
:指定了要移除的配置项,即 HTTP 代理设置。
通过运行
git config --global --unset http.proxy
,你可以清除全局 Git 配置中关于 HTTP 代理的设置,这对于取消之前设置的代理或者解决一些网络连接问题可能会有帮助。当你取消了 HTTP 代理设置后,Git 在进行网络操作时将直接连接到目标服务器,而不经过代理服务器。
git config --global --unset https.proxy
然后再次克隆仓库。
git clone https://github.com/mahmoodlab/HIPT.git
友情提醒,这是我自己要研究的一个项目,也是后期会介绍的项目,与数字病理相关。当然了,这不是重点,重点是你可以选一个比较小的项目去克隆,不然你就会等很久。要是刚好你的研究方向也和数字病理相关,那么,恭喜你来对地方了,点个关注再走吧!!
看到这个界面就是已经克隆完成了。
查看一下仓库中的文件目录
会发现,刚刚克隆的仓库已经导入了。
现在进入仓库
我们会发现确实存在.git目录,表明这是一个仓库。
快速打开仓库
三、工作区域和文件状态
3-1:工作区域
在Git中,工作区(Working Directory)、暂存区(Staging Area)和本地仓库(Local Repository)是三个核心概念,它们共同构成了Git的版本控制系统。下面是这三个区域的详细解释及其相互之间的关系:
工作区(Working Directory)
工作区是开发者直接编辑文件的地方,即我们通过IDE或者文件管理器看到的文件和目录。当你在工作区修改文件或创建新文件时,这些变更仅仅是本地的,Git还不知道这些变更。
暂存区(Staging Area)
暂存区是一个介于工作区和本地仓库之间的缓冲区。它的作用是临时存放你的改动,使用git add命令可以将工作区的改动添加到暂存区,它保存了下次将提交的文件列表信息,也就是你告诉Git你想要提交哪些变更。
本地仓库(Local Repository)
本地仓库是Git中存储提交历史的地方,即使用git commit命令将暂存区的改动永久保存到仓库的历史记录中。每次提交都会在仓库中创建一个新的提交记录,包含作者信息、提交日期和提交说明等。
三者之间的关系如下:
工作区到暂存区
当你在工作区修改文件或新增文件后,需要通过git add命令将这些改动添加到暂存区。这个过程相当于告诉Git:“注意,我想要对这些文件进行版本控制”。
暂存区到本地仓库
一旦改动被添加到暂存区,你可以通过git commit命令将暂存区中的改动提交到本地仓库,从而在仓库中创建一个新的提交(commit)。每次提交都会在仓库中保存一个快照,记录下当时的文件状态。
本地仓库到工作区
如果需要撤销工作区的改动,可以使用git checkout或git reset命令,从本地仓库恢复文件到工作区。
- git checkout:丢弃工作区的改动
- git reset:将文件从暂存区回退到工作区,并根据需要决定是否丢弃工作区的改动。
通过这三个区域,Git能够有效地管理文件的版本历史,允许开发者轻松地提交和回退改动,实现多人协作开发。
3-2:文件状态
在Git中,文件的状态分为四种:未跟踪(Untracked)、未修改(Unmodified)、已修改(Modified)和已暂存(Staged)。这些状态帮助你理解文件当前在Git版本控制中的位置。
下面是这四种状态的详细解释:
未跟踪(Untracked)
- 当你在工作目录中创建了一个新文件,而这个文件还没有被Git追踪时,它处于未跟踪状态。
- Git不知道如何处理这个文件,除非你显式地告诉Git开始追踪它。
未修改(Unmodified)
- 当一个文件已经被Git追踪,并且在你的工作目录中的内容和最新提交的内容完全一致时,它处于未修改状态。这意味着自上次提交以来,你没有对这个文件进行任何改动。
已修改(Modified)
- 当你修改了一个已经被Git追踪的文件,并且还没有将改动添加到暂存区时,这个文件处于已修改状态。
- Git检测到工作目录中的文件和本地仓库中的最新提交快照不一致。
已暂存(Staged)
- 当你使用
git add
命令将已修改的文件添加到暂存区时,文件的状态变为已暂存。这意味着你告诉Git你想要在下一次提交中包含这些改动。 - 暂存区是提交前的一个临时区域,允许你选择性地提交部分改动。
四者之间的关系如下:
未跟踪到未修改
- 通过执行
git add
命令,可以将未跟踪的文件添加到Git的追踪列表中,并将其状态变为未修改。 - 一旦文件被首次提交,它就进入了版本控制的范畴。
未修改到已修改
- 当你在工作目录中修改了一个已经被Git追踪的文件时,它的状态会从未修改变为已修改。
- Git会记录下这些改动,直到你决定如何处理它们。
已修改到已暂存
- 通过执行
git add
命令,可以将已修改的文件暂存起来,即将改动添加到暂存区。 - 这样,文件的状态就从已修改变为已暂存,准备被提交。
已暂存到未修改
- 当你执行
git commit
命令提交暂存区的改动后,这些改动就会永久保存在本地仓库中,文件的状态再次变为未修改,因为它现在和本地仓库的最新提交快照一致了。
理解这四种文件状态有助于你更好地使用Git进行版本控制,确保你能够有选择性地提交代码,并且能够追踪到工作目录中文件的当前状态。
四、添加和提交文件
首先将这一节会涉及到的指令放在下面,稍后会详细解释。
4-1:查看仓库状态
首先进入我们之前创建的仓库my-repo,为了防止有些同学半路插入,所以请根据我的箭头顺序依次输入指令。
cd ~ cd learn-git cd my-repo
现在可以查看仓库的状态了。
git status
是 Git 中用于查看当前工作目录状态的命令。通过运行
git status
,你可以了解当前工作目录中文件的状态,包括已修改、已暂存和未跟踪的文件。以下是
git status
命令的主要作用和输出解释:
已修改(modified)
- 如果在工作区修改了已经被 Git 管理的文件,但还没有将这些修改添加到暂存区,这些文件将被标记为已修改。
git status
会列出所有已修改的文件,让你知道哪些文件的内容发生了变化。
已暂存(staged)
- 当你使用
git add
命令将修改过的文件添加到暂存区时,这些文件就被标记为已暂存(staged)。 git status
会显示已暂存的文件列表,让你知道哪些修改已经准备好提交到本地仓库。
未跟踪(untracked)
- 如果有新建的文件或者 Git 未跟踪的文件存在于工作区中,这些文件将被标记为未跟踪。
git status
会列出所有未跟踪的文件,提醒你这些文件尚未被 Git 管理。
输出解释
On branch <branch>
:显示当前所在的分支,上图表明所在分支为main。由于我们目前还没有提交任何文件,所以显示No commits yet。Changes not staged for commit
:列出已修改但未暂存的文件。Changes to be committed
:列出已暂存但尚未提交的文件。Untracked files
:列出未被 Git 管理的文件。- 提示信息:通常会给出一些提示,例如如何将文件添加到暂存区或提交已暂存的文件等。
通过定期运行
git status
,你可以及时了解项目中文件的状态,帮助你决定下一步的操作,如将修改提交到本地仓库或者将新文件加入版本控制。
现在我们来尝试在终端输出文本
**
echo
是一个在命令行中用来输出文本的命令,通常在 Linux 和类 Unix 系统中使用**。在这个命令中,
echo
后面跟着的内容会被输出到标准输出(通常是终端窗口)上。在这种情况下,
echo "你好,我是罗小罗同学"
将会在终端上输出文本 “你好,我是罗小罗同学”。
这个命令对于在脚本中输出文本、调试以及在命令行中进行简单的文本输出非常有用。
现在,我们来尝试在终端新建一个文件
echo "你好,我是罗小罗同学" >file1.txt
这条命令
echo "你好,我是罗小罗同学" > file1.txt
结合了
echo
命令和重定向操作符
>
,它的作用是**将文本 “你好,我是罗小罗同学” 写入到名为
file1.txt
的文件中**。
在这种情况下,
>
表示将
echo
命令的输出写入到文件中,如果文件已存在,则会覆盖文件内容;如果文件不存在,则会创建该文件。
现在,我们来看看文件里面的内容
**
cat
是一个用于在终端上查看文件内容的命令**。当你运行
cat file1.txt
时,它会将文件
file1.txt
的内容输出到终端上。
所以,当你运行
cat file1.txt
后,如果
file1.txt
存在并包含文本 “你好,我是罗小罗同学”,那么终端会显示出这段文本内容。
现在来查看仓库的状态,就会发现命令的回显中比刚刚多了一个红色的文件。
4-2:添加到暂存区
看前面的标题我们可以知道,这个文件目前处于一个未跟踪的状态,所以我们可以使用git add将其添加至暂存区中。
git add file1.txt git status
我们可以很清楚的看到文件状态已经变绿,并且处于一个待提交的状态。命令行的➕表示,目前我们的仓库中存在已经修改,但是未提交的文件。
注意,命令行的回显中还有一行指令。
git rm --cached <file>...
git rm --cached <file>...
是一个 Git 命令,用于从 Git 跟踪中移除文件,但保留工作目录中的文件。这个命令通常用于停止对某些文件的版本控制跟踪,但同时保留这些文件在工作目录中的副本。
具体说明如下:
git rm
:这是 Git 中用于删除文件的命令。--cached
:这个选项告诉 Git 只从暂存区(Index)中删除文件,而不会删除工作目录中的实际文件。这样做意味着文件将不再被 Git 跟踪,但仍然保留在你的工作目录中。<file>...
:这是要移除跟踪的文件名或文件路径。你可以指定一个或多个文件来执行这个操作。
4-3:提交文件到仓库
执行下列指令
具体说明如下:
git commit
:这是 Git 中用于将更改提交到版本库的命令。-m "第一次提交"
:这是一个选项,用于在提交时添加提交信息。**-m
后面的内容是提交信息的描述**,用双引号括起来。在这种情况下,提交信息是 “第一次提交”。
总结来说,运行
git commit -m "第一次提交"
将会把你在暂存区中的更改提交到本地 Git 仓库,并使用 “第一次提交” 作为提交信息描述。提交信息通常用于描述本次提交的内容或目的,以便其他开发人员或你自己日后更容易地理解这次提交的目的。
现在再来查看仓库的状态,就会提示我们目前没有可以提交的文件了,这是因为我们已经把文件提交到仓库中保管起来了。
现在我们可以来查看提交记录。
然后我们就会看到之前我们设置的用户名和邮箱,以及刚才编写的提交信息。
五、回退版本
git reset命令用于将当前分支的头部移动到指定的状态,有三种模式,它们决定了重置操作对工作区、暂存区和提交历史的影响。
下面是这三种模式的详细解释:
git reset --soft
--soft
模式只影响提交历史,即移动HEAD指针到指定的提交。这意味着所有的改动都会留在暂存区,工作区的内容保持不变。- 这种模式适用于当你想要取消最后的提交,但又不希望丢失工作区和暂存区中的改动。
git reset --hard
--hard
模式会改变提交历史、暂存区和工作区。移动HEAD指针到指定的提交,并且将暂存区和工作区都更新为该提交的状态。- 这是一个不可逆的操作,因为它会丢弃自指定提交以来所有的改动。使用这个模式时要非常小心,因为它可能会导致数据丢失。
git reset --mixed
--mixed
模式是git reset
命令的默认行为,如果你只执行git reset
而不加任何参数,那么就是使用--mixed
模式。- 这个模式会改变提交历史和暂存区,移动HEAD指针到指定的提交,并将暂存区更新为该提交的状态。
- 工作区的内容保持不变,即自上次提交以来在工作区做的改动仍然存在,只是这些改动不再处于暂存状态。
- 所以,如果使用了混合模式,那么需要重新执行git add操作来将变动的内容重新添加到暂存区。
三者之间的关系如下
–soft和–mixed
--soft
模式不会影响暂存区和工作区,而--mixed
模式会影响暂存区但不影响工作区。--mixed
模式是--soft
模式的一个中间状态,它在移动HEAD指针的同时,也将改动从提交历史移动到了暂存区。
–mixed和–hard
--mixed
模式不会影响工作区,而--hard
模式会同时影响暂存区和工作区。--hard
模式是--mixed
模式的一个更极端的状态,它在移动HEAD指针和清空暂存区的同时,也会清空工作区中的改动。
–soft和–hard
--soft
模式只影响提交历史,而--hard
模式会影响提交历史、暂存区和工作区。- 这两种模式代表了重置操作的两个极端,一个尽可能保留改动,另一个尽可能恢复到指定提交的状态。
在使用
git reset
时,选择合适的模式非常重要,因为它会直接影响到你的工作流程和数据的完整性。**通常,如果你不确定,可以从最安全的
–soft
模式开始,然后根据需要逐步应用更强烈的重置**。
未完待续
版权归原作者 罗小罗同学 所有, 如有侵权,请联系我们删除。