目录
5.1 git clone | git fetch | git merge | git log | git diff:
5.3 git init | git add | git commit | git checkout:
1 什么是Git?
Git 是一个分布式版本控制系统,用于管理和跟踪代码或文件的变更。它可以记录文件的每一次修改,帮助开发者协作、管理代码版本、追踪项目历史,并在需要时恢复到之前的版本。
Git 是开源的,由林纳斯·托瓦兹(Linus Torvalds)在 2005 年开发,最初用于 Linux 内核开发。如今,它广泛应用于各种软件开发项目中,尤其是在团队协作开发中。
知道上述内容就行了。
2 为什么要学习Git?
相信大家一开始接触Git都是因为要从Github上下载某个开源项目到本地仓库。当然也可以直接手动下载,不过通过git clone命令克隆到本地显得更酷(bushi)。
那么Git只有这一个用途么?
当然不是。接下来我将详细介绍一下在日常科研中我们会经常用到的git操作。
注:关于Git的下载可自行百度,本文仅记录Git的基本原理和简单用法。
3 工作流程图
上图是Git的一个工作流程图,主要涉及4个模块和6个命令,一般情况下我们只要掌握这些就足够日常使用了。本文也将围绕这个展开。
4 四个区|仓库介绍
4.1 工作区(Workspace)
工作区是你当前正在进行开发和编辑文件的地方。它就是你的项目文件所在的目录,包含你正在修改、编辑、编写的所有文件。
4.2 暂存区(Staging Area)
暂存区是一个临时的存储区域,保存你想要提交的改动。它类似于“准备提交”的区域。你可以将修改部分地加入暂存区,只将当前开发的一部分内容提交,而不是整个工作区的内容。
4.3 本地仓库(Local Repository)
本地仓库是你计算机上的 Git 仓库(要通过git init提前创建),保存项目的所有历史提交记录。当你对文件进行提交(git commit
)时,文件会被从暂存区提交到本地仓库,成为项目的永久记录。
4.4 远程仓库(Remote Repository)
远程仓库是托管在服务器上的仓库,如 GitHub、GitLab 或 Bitbucket。它与本地仓库不同,通常用于团队协作或代码备份。你可以将本地的提交推送到远程仓库,其他开发者也可以从远程仓库拉取代码。
5 六个常用命令
5.1 git clone | git fetch | git merge | git log | git diff:
先来介绍一下最常用到的git clone命令:
Step 1)在一个地方右键打开Git Bash
Step 2)这里我们在Github上随便找一个项目做实验: CCFrank4dblp,Copy一下URL
Step 3)在git bash里输入命令
git clone <URL>
git clone时发生报错怎么办?可以参见下面这篇文章自行解决:
注:上文方法二中端口号的设置要和clash中的端口号保持一致
当然也可以克隆到指定目录:
git clone <URL> <目标路径>
然后项目就被我们成功从远程仓库clone到本地仓库了
Step 4)打开此文件,可以看到该目录下已经有了一个.git文件(隐藏的文件),包含了所有远程仓库的版本历史、分支信息等。
Step 5)使用git clone之后如果远程仓库有更新,本地仓库不会自动更新。你需要手动使用 git fetch
或 git pull
来获取远程仓库的最新变化。
使用 git fetch
来获取远程仓库的最新更新信息,包括新的提交、分支、标签等,但这不会自动更新你的本地工作目录,仅会影响 .git
目录
git fetch origin
Step 6)那么我如何查看.git的信息才能得知有最新的更新呢?
方式一:通过git log来获取详细的包含时间的更新信息。
git log origin/master --pretty=format:"%h %s %ad" --date=relative
这样我们便可以看到最近是否有过更新啦。
方式二:通过git diff
命令查看本地分支和对应的远程分支之间的差异,以了解具体的更改。
git diff master origin/master
可以看到在我们用git fetch获取最新的更新信息后比较两者的差异,结果没有任何输出,证明本地仓库的已经是最新版本了。
Step 7)那么如果不是最新版本的话我们如何执行实际的合并更新操作呢?
通过git merge即可啦。
git merge origin/master
5.2 git pull:
git pull是拉取远程分支更新到本地仓库的操作。比如远程仓库里的学习资料有了新内容,需要把新内容下载下来的时候,就可以使用git pull命令。事实上,git pull是相当于从远程仓库获取最新版本,然后再与本地分支merge(合并)。
即:git pull = git fetch + git merge
注:git fetch不会进行合并,执行后需要手动执行git merge合并,而git
pull拉取远程分之后直接与本地分支进行合并。更准确地说,git pull是使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中。
三者之间的区别和联系可以参见:git clone、git pull和git fetch的用法及区别
git pull <remote> <branch>
<remote>
:通常为origin
,表示你想要拉取更新的远程仓库。<branch>
:表示你想要拉取的远程分支(例如main
)。
5.3 git init | git add | git commit | git checkout:
为了方便理解,这里我们用一个例子来说明这些命令的使用流程:
假设你在开发一个简单的项目,其中包含一个文件 main.py
。你在项目的不同阶段进行修改,并希望使用 Git 来记录这些变化。
1. 初始化 Git 仓库
首先,你需要在项目文件夹中初始化一个 Git 仓库:
接着文件夹中自然会出现一个.git的隐藏文件,包含各种日志、更新信息等,用于存储版本控制相关的信息。
2. 第一次提交:创建文件
接着,你创建一个文件 main.py
,写了以下代码:
print("Hello, World!")
将这个文件添加到 Git 暂存区并进行提交:
git add main.py
git commit -m "Initial commit: add main.py with hello world"
3. 第二次提交:修改代码
你决定修改 main.py
,添加了新的功能:
print("Hello, World!")
print("This is version 2 of the script.")
你再一次将修改添加到暂存区并提交:
4. 查看提交历史
现在,你可以查看这个文件的所有修改历史:
git log
这会显示每次提交的提交哈希值、提交信息和时间:
5. 回滚到之前的版本
假设你发现第二次的修改有问题,想要回到第一次提交的状态。你可以使用 git checkout
回滚到第一次提交:
git checkout <对应的哈希值>
现在,main.py
就恢复到最初的状态(只有一行 print("Hello, World!")
)。
6. 回到最新的提交
1)如果你的开发模式是 "一直在 master
分支上开发",你想回到最新的版本,你可以这样做:
git checkout master
2)如果你的开发模式不在任何分支上,而是直接在某个提交上:
可以先使用如下命令显示 HEAD 的所有历史更新:
git reflog
然后使用如下命令回到最新的版本:
git checkout 7c20a4b
这样,你的代码会回到最新的状态。
5.4 git push:
git push
是一个重要的 Git 命令,用于将本地仓库的更改上传到远程仓库。这个命令的主要功能是把本地分支的更新推送到对应的远程分支,以便与其他开发者共享代码。
这块过于冗长,网上也有很多详细的教程,就不再展开叙述了,可以参考下面的文章:
手把手教你用git上传项目到GitHub(图文并茂,这一篇就够了)
6 超级汇总——常用的Git命令
Git 命令大全「全面且实用,值得收藏」_git 命令这一篇就够了-优快云博客