Git

Stone大约 23 分钟

Git

概述

Git 是一个开源的分布式版本控制系统,主要用于追踪文件的变更。它最初由 Linus Torvalds 设计用于管理 Linux 内核的开发,现在已经被广泛应用于各种软件开发项目。Git 允许开发者记录文件每次的更新变动,从而可以管理并协调项目开发过程中的代码变更。

Git 的特点包括:

  • 分布式:Git 是分布式的,意味着每个开发者的本地仓库都包含了整个项目的所有历史记录。这使得开发者无需联网就能进行版本控制操作,同时也降低了单点故障的风险。
  • 强大的分支和合并:Git 提供了非常强大且灵活的分支和合并功能。开发者可以创建多个分支来并行开发不同功能或修复不同的问题,然后再将这些分支合并回主分支。
  • 高效的数据处理:Git 采用了独特的数据存储和压缩机制,使得处理大型项目或大量文件时仍然能保持高效性能。
  • 易于学习和使用:尽管 Git 功能强大,但它的命令行界面设计直观且易于学习。同时,也有许多图形化界面工具可供使用,使得 Git 更加易于上手。

安装

如果是 Windows 环境,在官方网站open in new window下载最新版的安装程序,双击运行安装程序,可以保持默认选项,完成安装。

如果是 Linux 环境,可以直接使用 YUMopen in new window 进行安装。

# yum -y install git

在 Windows 环境,安装完成后,右键选择 Git Bash Here,打开 Git 终端,输入 git -v 查看版本:

$ git -v
git version 2.40.1.windows.1

设置用户名和邮箱:

$ git config --global user.name "stone"
$ git config --global user.email "287779438@qq.com"

查看:

$ git config --list
user.name=stone
user.email=287779438@qq.com

仓库

Git 仓库(repository)是记录文件变更的地方,存储版本控制数据,对应 .git 目录。

创建目录,进入目录,然后使用 git init 命令将本地目录转换为 Git 仓库:

$ mkdir git-study
$ cd git-study/
$ git init
Initialized empty Git repository in D:/code/mycode/git-study/.git/

执行 git init 后,就会在该目录下创建一个名为 .git 的隐藏目录,用于跟踪并记录在该目录中发生的所有更新。

区域

Git 的区域主要包括工作区、暂存区和本地仓库

  • 工作区(Work Directory):这是在本地电脑上编辑代码的地方,一般就是项目的根目录,包含了项目的所有文件。在工作目录中添加、删除、修改文件,这些操作都会影响 Git 的状态。
  • 暂存区(Stage/Index):这是一个临时的存储区域(.git/index 文件),它记录了想要提交到本地仓库的文件的快照。可以使用 git add 命令将工作目录中的文件添加到暂存区,可以使用 git restore 命令将暂存区中的文件恢复到工作目录,可以使用 git rm --cached 从暂存区移除文件。
  • 本地仓库(Repository):这是一个隐藏的文件夹(.git/objects),它保存了项目的所有版本历史。可以使用 git commit 命令将暂存区中的文件提交到本地仓库,也可以使用 git checkout 命令从本地仓库中切换到不同的分支或版本。

image-20240415205448842

使用 VS Code 打开工作区,创建目录及代码文件后,使用 git add 添加文件到暂存区:

$ git add page/login/index.html 

也可以使用 git add . 将目录及子目录下的所有修改的文件添加到暂存区:

$ git add .

添加后,使用 git ls-files 查看暂存区的文件:

$ git ls-files
page/login/index.html

然后就可以使用 git commit 将暂存区中的文件提交到本地仓库,生成一次版本记录:

$ git commit -m "1.登录页面-标签部分准备"
[master (root-commit) 12dd8f2] 1.登录页面-标签部分准备
 1 file changed, 11 insertions(+)
 create mode 100644 page/login/index.html

状态

被 Git 管理的文件有 2 种状态:

  • 未跟踪(Untracked):新创建的文件在 Git 仓库中是未跟踪的。Git 不会自动跟踪仓库之外的文件。使用 git status 命令,可以看到未跟踪的文件列表。
  • 已跟踪 (Tracked):一旦文件被 git add 命令添加到暂存区,或者文件已经被提交到仓库中,那么这个文件就被 Git 跟踪了。已跟踪的文件可能有三种子状态:已修改(modified)、已暂存(staged)和已提交(committed)。
    • 已修改(Modified):已跟踪的文件内容被改变,但还没有被 git add 命令暂存或提交。git status 会显示这些文件为已修改。
    • 已暂存(Staged):已修改的文件被 git add 命令暂存,准备提交。存的文件会出现在下一次提交中。
    • 已提交(Committed):文件已经被 git commit 命令提交到 Git 仓库中,并有一个与之关联的提交记录。如果文件在提交之后被修改,它将回到已修改的状态。

为项目添加一个文件 index.css,查看状态:

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        page/login/index.css

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

使用 git add 将文件添加到暂存区后,查看状态:

$ git add .
$ git status -s
A  page/login/index.css

其中 A 表示新添加到暂存区的文件,表示该文件已被 Git 跟踪。

修改该文件后,查看状态:

$ git status -s
AM page/login/index.css

其中 M 表示该文件在工作区中有改动,状态为已修改,使用 git add 将文件再次添加到暂存区后,查看状态:

$ git add .
$ git status -s
A  page/login/index.css

然后使用 git commit 将暂存区中的文件提交到本地仓库,生成一次版本记录:

$ git commit -m '2.登录页面-css样式'
[master 2448a60] 2.登录页面-css样式
 1 file changed, 6 insertions(+)
 create mode 100644 page/login/index.css

再次查看状态:

$ git status -s

可以看到当前已经没有变更的文件了。

暂存区

前面提到可以使用 git restore 命令将暂存区中的文件恢复到工作目录以及可以使用 git rm --cached 从暂存区移除文件,具体如下图:

image-20240415205820213

查看暂存区文件:

$ git ls-files
page/login/index.css
page/login/index.html

修改了 index.css 之后,查看状态:

$ git status -s
 M page/login/index.css

想放弃之前的修改,回到之前暂存的状态:

$ git restore page/login/index.css

再次查看暂存区文件和状态:

$ git ls-files
page/login/index.css
page/login/index.html
$ git status -s

可以看到当前已经没有变更的文件了。

从暂存区移除该文件:

$ git rm --cached page/login/index.css
rm 'page/login/index.css'
$ git ls-files
page/login/index.html
$ git status -s
D  page/login/index.css
?? page/login/index.css

此时该文件变为未跟踪状态,然后再添加到暂存区:

$ git add .
$ git ls-files
page/login/index.css
page/login/index.html

练习一

为项目添加 index.js 文件:

$ git add .
$ git commit -m '3.登录页面-开发完毕'
[master 654a95e] 3.登录页面-开发完毕
 1 file changed, 1 insertion(+)
 create mode 100644 page/login/index.js

查看提交记录:

$ git log --oneline
654a95e (HEAD -> master) 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

回退版本

将本地仓库某个版本对应的内容快照,恢复到工作区/暂存区。即重置当前 HEAD 到指定状态。

语法:

git reset [--soft | --mixed | --hard | --merge | --keep] [<commit>]

其中:

  • --soft:只重置 HEAD 到指定提交,暂存区和工作区不变。这意味着所有更改仍然保持为已暂存状态,可以重新提交它们。

  • --mixed(或不带任何选项):这是 git reset 的默认行为。它重置 HEAD 和暂存区到指定提交,但保留工作区中的文件更改。这些更改会变为未暂存状态。

  • --hard:重置 HEAD、暂存区和工作区到指定提交。所有更改都会被丢弃,工作区将完全匹配指定提交的状态。

先查看提交记录:

$ git log --oneline
654a95e (HEAD -> master) 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

使用 --soft 选项回退到第一次提交:

$ git reset --soft 12dd8f2

工作区中保留了第一提交之后增加的文件:

$ git status -s
A  page/login/index.css
A  page/login/index.js

暂存区中保留了第一次提交之后增加的文件:

$ git ls-files
page/login/index.css
page/login/index.html
page/login/index.js

使用 --mixed 选项回退到第一次提交:

$ git reset --mixed 12dd8f2

工作区中保留了第一提交之后增加的文件:

$ git status -s
?? page/login/index.css
?? page/login/index.js

暂存区中没有保留了第一次提交之后增加的文件:

$ git ls-files
page/login/index.html

将工作区中未跟踪状态的文件添加到暂存区:

$ git add .
$ git ls-files
page/login/index.css
page/login/index.html
page/login/index.js

使用 --hard 选项回退到第一次提交:

$ git reset --hard 12dd8f2
HEAD is now at 12dd8f2 1.登录页面-标签部分准备

工作区中没有保留了第一提交之后增加的文件:

$ git status -s

暂存区中没有保留了第一次提交之后增加的文件:

$ git ls-files
page/login/index.html

查看提交记录:

$ git log --oneline
12dd8f2 (HEAD -> master) 1.登录页面-标签部分准备

查看完整提交记录:

$ git reflog --oneline
12dd8f2 (HEAD -> master) HEAD@{0}: reset: moving to 12dd8f2
12dd8f2 (HEAD -> master) HEAD@{1}: reset: moving to 12dd8f2
12dd8f2 (HEAD -> master) HEAD@{2}: reset: moving to 12dd8f2
654a95e HEAD@{3}: commit: 3.登录页面-开发完毕
2448a60 HEAD@{4}: commit: 2.登录页面-css样式
12dd8f2 (HEAD -> master) HEAD@{5}: commit (initial): 1.登录页面-标签部分准备

使用 --hard 选项回退到最近提交,恢复到本节测试之前:

$ git reset --hard 654a95e
HEAD is now at 654a95e 3.登录页面-开发完毕

查看提交记录:

$ git log --oneline
654a95e (HEAD -> master) 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

忽略文件

通过创建和编辑 .gitignore 文件,可以让 Git 忽略某些文件或目录,以避免它们被提交到版本控制仓库中。

常见的应该被 .gitignore 忽略的文件类型:

  • 依赖目录:例如 node_modules 或其他包含第三方库和依赖的目录。这些目录通常可以通过 npm installyarn install 或其他包管理器重新生成。
  • 构建目录:例如 dist,这包含编译后结果。
  • 日志文件、缓存文件或临时文件:这些文件通常是在开发或运行过程中自动生成的,不需要被共享或版本控制。
  • 敏感文件:如包含密码、API 密钥或其他敏感数据的文件。

请注意,.gitignore 文件只能忽略那些尚未被 Git 跟踪的文件。如果某个文件已经被 Git 跟踪(即已经提交到仓库),那么即使在 .gitignore 文件中添加了该文件的模式,Git 也不会停止跟踪它。要停止跟踪一个文件,需要从 Git 的暂存区中删除它,这通常通过 git rm --cached <file> 命令来完成。

使用 .gitignore 文件的步骤:

  • 创建 .gitignore 文件。在项目的根目录下(通常是与 .git 目录相同的目录)创建一个名为 .gitignore 的文件。

  • 添加要忽略的文件或目录。

node_modules
dist
.vscode
*.pem
*.cer
*.log
  • 保存并提交 .gitignore 文件。
$ git add .
$ git commit -m '4.忽略文件增加'
[master 2ffd147] 4.忽略文件增加
 1 file changed, 6 insertions(+)
 create mode 100644 .gitignore
$ git log --oneline
2ffd147 (HEAD -> master) 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

分支

在 Git 中,分支是一个非常重要的概念,它允许开发者从主线上分离出来进行另外的操作,而又不影响主线,主线可以继续进行其他的工作。分支的创建是为了解决临时需求或进行特定的开发任务,保证主线代码随时可用,多人协同开发提高效率。一旦分支上的工作完成,可以将其合并回主线,并删除该分支。

分支本质上是指向节点的可变指针,默认名称为 master。改变分支实际上就是改变 HEAD 指针的指向,影响工作区/暂存区的代码。

创建

创建内容列表 content 分支,并产生 3 次提交记录:

  1. 使用 git branch 创建 content 分支:
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git branch content

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)

image-20240417221920357

  1. 使用 git checkout 切换到 content 分支:
$ git checkout content
Switched to branch 'content'

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git branch
* content
  master

image-20240417222056178

  1. 工作区准备代码并暂存提交,重复 3 次:
stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git add .

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git commit -m '5.内容页面-标签搭建'
[content a49428e] 5.内容页面-标签搭建
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 content/index.html

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git add .

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git commit -m '6.内容页面-样式编写'
[content 360119a] 6.内容页面-样式编写
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 content/index.css

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git add .

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git commit -m '7.内容页面-功能编写'
[content 655ac20] 7.内容页面-功能编写
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 content/index.js

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git log --oneline
655ac20 (HEAD -> content) 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 (master) 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)
$ git checkout master
Switched to branch 'master'

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git checkout content
Switched to branch 'content'

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (content)

image-20240417222309295

创建登录 Bug 修复 login-bug 分支,并产生 2 次提交记录:

  1. 使用 git checkout 切回到 master 主分支
$ git checkout master
Switched to branch 'master'

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)

image-20240418201906690

  1. 使用 git branch 创建 login-bug 分支:
$ git branch login-bug

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)

image-20240418202437516

  1. 使用 git checkout 切换到 login-bug 分支:
$ git checkout login-bug
Switched to branch 'login-bug'

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git branch
  content
* login-bug
  master

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)

image-20240418202706498

  1. 工作区修改代码并暂存提交,重复 2 次:
$ git add .

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git commit -m '8.登录Bug-手机号长度判断'
[login-bug 5723069] 8.登录Bug-手机号长度判断
 1 file changed, 2 insertions(+), 1 deletion(-)

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git add .

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git commit -m '9.登录Bug-验证码长度判断'
[login-bug 5adfa21] 9.登录Bug-验证码长度判断
 1 file changed, 2 insertions(+), 1 deletion(-)

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)
$ git log --oneline
5adfa21 (HEAD -> login-bug) 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
2ffd147 (master) 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (login-bug)

image-20240418203412043

合并

login-bug 分支合并回到 master 分支并删除 login-bug 分支。

  1. 使用 git checkout 切回到要合入的 master 主分支:
$ git checkout master
Switched to branch 'master'

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)

image-20240418204714358

  1. 使用 git merge 合并 login-bug 分支
$ git merge login-bug
Updating 2ffd147..5adfa21
Fast-forward
 page/login/index.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
5adfa21 (HEAD -> master, login-bug) 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)

image-20240418205606420

  1. 使用 git branch -d 删除 login-bug 分支:
$ git branch -d login-bug
Deleted branch login-bug (was 5adfa21).

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git branch
  content
* master

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)

image-20240418210114041

content 分支合并回到 master 分支并删除 content 分支。

  1. 使用 git merge 合并 content 分支,由于此时 content 分支的父级节点 C4 小于 master 主分支节点 C9,会自动使用多个快照记录合并后产生一次新的提交:
$ git branch
  content
* master

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git merge content
Merge made by the 'ort' strategy.
 content/index.css  | 0
 content/index.html | 0
 content/index.js   | 0
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 content/index.css
 create mode 100644 content/index.html
 create mode 100644 content/index.js

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
8b1ce21 (HEAD -> master) Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 (content) 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)

image-20240418212457752

  1. 使用 git branch -d 删除 content 分支:
$ git branch -d content
Deleted branch content (was 655ac20).

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
8b1ce21 (HEAD -> master) Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git branch
* master

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)

image-20240418213143145

注意:

提交记录的顺序按照产生的先后顺序排列,而非合并的先后顺序。

冲突

Git 合并冲突通常发生在尝试合并两个或更多并行开发的分支时。当两个分支对同一个文件的同一部分进行了不同的更改,Git 无法自动决定应该保留哪些更改,因此会产生冲突。

解决方法:

  • 找到冲突文件并手动解决。
  • 解决后需要提交一次记录。
  1. 创建 publish 分支并切换到 publish 分支
$ git branch publish

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git checkout publish
Switched to branch 'publish'

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (publish)
  1. publish 分支下修改 index.html 文件的 title 标签内容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Publish-分支下改动</title>
</head>
<body>
    <div></div>
</body>
</html>
  1. publish 分支下提交修改
$ git add .

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (publish)
$ git commit -m '11.开发了发布文章页面'
[publish 9009669] 11.开发了发布文章页面
 1 file changed, 1 insertion(+), 1 deletion(-)

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (publish)
  1. 切换到 master 分支
$ git checkout master
Switched to branch 'master'

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
  1. master 分支下修改 index.html 文件的 title 标签内容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Master-分支下修改</title>
</head>
<body>
    <div></div>
</body>
</html>
  1. master 分支下提交修改
$ git add .

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git commit -m '12.修改了内容标题页面'
[master ea07ed3] 12.修改了内容标题页面
 1 file changed, 1 insertion(+), 1 deletion(-)

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
  1. master 分支下合并 publish 分支
$ git merge publish
Auto-merging page/login/index.html
CONFLICT (content): Merge conflict in page/login/index.html
Automatic merge failed; fix conflicts and then commit the result.

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master|MERGING)

提示出现合并冲突,等待解决,并在冲突页面出现如下提示:

image-20240422211536932

其中:

  • 采用当前更改:表示保留当前分支的代码,而放弃合并分支中的修改。
  • 采用传入更改:表示保留合并分支的代码,而放弃当前分支中的修改。
  • 保留双方更改:表示保留当前分支和合并分支中的所有修改。这会导致代码中存在重复或冲突的部分,需要进一步的手动编辑来解决实际的冲突。
  • 比较变更:表示打开一个比较视图,展示当前分支和合并分支在冲突区域的具体差异。
  1. 点击 采用当前更改,再次提交
$ git add .

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master|MERGING)
$ git commit -m '13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改'
[master 7728759] 13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
7728759 (HEAD -> master) 13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改
ea07ed3 12.修改了内容标题页面
9009669 (publish) 11.开发了发布文章页面
8b1ce21 Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git branch -d publish
Deleted branch publish (was 9009669).

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)
$ git log --oneline
7728759 (HEAD -> master) 13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改
ea07ed3 12.修改了内容标题页面
9009669 11.开发了发布文章页面
8b1ce21 Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

stone@DESKTOP-8V57TLE MINGW64 /d/code/mycode/git-study (master)

远程仓库

Git 远程仓库是指在 Git 托管平台上的项目仓库,既可以是内网的 Git 托管平台(例如 GitLab),也可以是公网的 Git 托管平台(例如 Gitee,GitHub)。

开发者 A 将项目从本地仓库推送到远程仓库的步骤:

  1. 在 Gitee 上注册用户并登录。
  2. 创建远程仓库,这里在 Gitee 上创建一个名称为 git-study 的远程仓库。

image-20240422220912639

  1. 将本地仓库与远程仓库关联,使用 git remote add 命令将本地仓库与远程仓库关联起来。例如,可以运行 git remote add origin <远程仓库的URL> 来将远程仓库命名为 “origin”。这里的 <远程仓库的URL> 是在托管平台上创建的远程仓库的URL。
$ git remote add origin https://gitee.com/stonebox/git-study.git
$ git remote -v
origin  https://gitee.com/stonebox/git-study.git (fetch)
origin  https://gitee.com/stonebox/git-study.git (push)
  1. 推送本地仓库到远程仓库,使用 git push 命令将本地仓库推送到远程仓库。由于这是第一次推送,需要使用 -u--set-upstream 选项来设置上游分支。例如,可以运行 git push -u origin master 来推送 master 分支到远程仓库的 master 分支。这里的 origin 是在上一步中设置的远程仓库的名称,master 是分支的名称。如果默认分支不是 master,需要将其替换为实际使用的分支名称。
$ git push -u origin "master"
Enumerating objects: 51, done.
Counting objects: 100% (51/51), done.
Delta compression using up to 8 threads
Compressing objects: 100% (34/34), done.
Writing objects: 100% (51/51), 4.50 KiB | 2.25 MiB/s, done.
Total 51 (delta 9), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/stonebox/git-study.git
 * [new branch]      master -> master
branch 'master' set up to track 'origin/master'.

开发者 B 将项目从远程仓库克隆到本地的步骤:

  1. 切换到指定目录。
  2. 执行 git clone 命令克隆远程仓库到当前目录:
$ git clone https://gitee.com/stonebox/git-study.git
Cloning into 'git-study'...
remote: Enumerating objects: 51, done.
remote: Counting objects: 100% (51/51), done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 51 (delta 9), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (51/51), 4.50 KiB | 4.50 MiB/s, done.
Resolving deltas: 100% (9/9), done.
  1. 克隆完成后可以查看提交记录:
$ cd git-study

$ git log --oneline
7728759 (HEAD -> master, origin/master, origin/HEAD) 13.解决了 index.html 页面的 title 冲突,保留了 master 分支更改
ea07ed3 12.修改了内容标题页面
9009669 11.开发了发布文章页面
8b1ce21 Merge branch 'content'
5adfa21 9.登录Bug-验证码长度判断
5723069 8.登录Bug-手机号长度判断
655ac20 7.内容页面-功能编写
360119a 6.内容页面-样式编写
a49428e 5.内容页面-标签搭建
2ffd147 4.忽略文件增加
654a95e 3.登录页面-开发完毕
2448a60 2.登录页面-css样式
12dd8f2 1.登录页面-标签部分准备

协同开发

开发者 A 将代码推送到远程仓库,开发者 B 从远程仓库克隆代码到本地后,就可以进行协调开发了。

开发者 A 修改了代码后,提交并推送到远程仓库:

$ git add .

$ git commit -m '开发者A-修改首页标题'
[master dacce34] 开发者A-修改首页标题
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git push origin master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 464 bytes | 464.00 KiB/s, done.
Total 5 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/stonebox/git-study.git
   7728759..dacce34  master -> master 

开发者 B 拉取最新代码:

$ git pull origin master
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), 444 bytes | 2.00 KiB/s, done.
From https://gitee.com/stonebox/git-study
 * branch            master     -> FETCH_HEAD
   7728759..dacce34  master     -> origin/master
Updating 7728759..dacce34
Fast-forward
 page/login/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

然后开发者 B 就可以基于最新的代码进行开发了。

上次编辑于:
贡献者: stone