针对Git的专项练习网站分享以及Git相关分析

读完本篇文章你会收获到:

  1. Git专项练习网站和简单使用说明
  2. Git的基本分析
  3. 多人协作需要考虑的问题
  4. Git是如何处理这些问题的
  5. Git相关命令

网站分享:

网站地址:learngitbranching.js.org/?locale=zh_... 给大家看下部分内容:

内容是以关卡的形式去专项练习git的各种相关命令 注意右下角有一个 第一个按钮,点击之后会出现

levels表示关卡选择 solution 答案 Reset 重置当前关卡 Undo 回到上一步 Objective 提示 help 命令提示

比如说第四关:

内容及关卡分析
视图演示和操作,以视图的更改的形式来展示对发布版本的各种操作



这些大概就是这个专项练习网站的形式和简单介绍,我个人觉得非常方便理解Git,建议大家赶快尝试!! 下面我们简单说下Git

Git简要分析:

什么是Git:

Git是一个分布式版本控制系统,用于跟踪和管理文件的变化。它可以记录每个文件的修改历史、轻松地切换和合并不同的版本、以及在开发团队中协同工作。

Git工作区、本地仓库、远程仓库、暂存区

  1. 本地工作区:Git的本地工作区是指你在本地计算机上进行代码开发和修改的目录。

  2. 本地仓库:本地仓库是Git在本地文件系统中存储代码版本历史的地方。它包含了完整的提交历史、分支信息和标签等。当你在本地进行提交、合并或回退等操作时,这些操作会被记录在本地仓库中。本地仓库通常位于你的项目目录中的.git文件夹中。

  3. 远程仓库: Git的远程仓库是指存储在远程服务器上的代码仓库。它可以是位于云端的代码托管服务(如GitHub、GitLab、Bitbucket等),也可以是自己搭建的远程服务器。 远程仓库是用来存储代码的中央仓库,它可以被多个开发者访问和共享。通过将本地仓库的修改推送(push)到远程仓库,其他开发者可以获取你的代码修改,并在其本地进行开发、合并等操作。 使用远程仓库可以实现团队协作和代码共享,多个开发者可以同时在不同的本地工作区中进行代码开发,并通过远程仓库进行代码同步和合并。 在使用远程仓库时,你可以使用git clone命令将远程仓库的代码克隆到本地,使用git push命令将本地仓库的修改推送到远程仓库,使用git pull命令将远程仓库的修改拉取到本地,以保持代码的同步。

  4. 暂存区:暂存区是Git用来暂时存放即将提交的修改的地方。当你对工作区中的文件进行修改后,可以使用git add命令将修改的文件添加到暂存区。暂存区允许你对提交进行精细的控制,你可以选择性地将修改的文件添加到暂存区,而不是一次性提交所有的修改。通过使用暂存区,你可以构建出更有组织性的提交,将相关的修改分成多个逻辑上的提交。

    一个完整的提交流程就是:

    1. 初始化git(git init)
    2. 与远程仓库建立联系
    3. 本地工作区修改代码(默认分支为main)
    4. 存入暂存区(git add)
    5. 提交到本地仓库,形成记录(git commit)
    6. 推送到远程仓库(git push)

Git多人协作都需要考虑到的问题

  1. 冲突(Conflicts):当多个开发者同时修改同一个文件或同一个代码块时,可能会发生冲突。冲突指的是两个或多个修改无法自动合并的情况。在这种情况下,需要手动解决冲突,合并不同的修改,并确保代码的一致性和正确性。
  2. 分支管理(Branch Management):在多人操作中,通常会使用分支来进行代码开发和修改。每个开发者可以在自己的分支上进行工作,避免直接修改主分支或其他开发者的分支。分支管理可以帮助团队成员独立开发和测试功能,减少冲突的可能性。
  3. 合并与同步:当一个开发者完成了自己的工作并准备将修改合并到主分支或其他分支时,需要进行合并操作。合并操作将不同分支的修改合并为一个整体。同时,开发者需要及时同步远程仓库的修改,以便获取其他开发者的最新代码。
  4. 版本回退:Git 版本回退是通过改变提交记录来实现的。

这里解释一下什么是提交记录指向:

提交记录指向是指 Git 中的分支指针或标签指向的提交。每次在 Git 中进行提交时,都会创建一个新的提交对象,该对象包含了提交的元数据和指向前一个提交的指针。

在 Git 中,每个分支都有一个指针,指向该分支的最新提交。当你在分支上进行新的提交时,该分支的指针会自动移动到新的提交上,指向最新的提交。

类似地,标签也可以指向特定的提交。标签是一个静态的指针,通常用于标记重要的提交或版本号。与分支不同,标签不会随着新的提交而移动,而是始终指向特定的提交。

通过分支指针和标签指针,Git 可以跟踪提交的历史记录,并允许你在不同的提交之间进行切换和操作。提交记录指向是 Git 中非常重要的概念,它使得版本控制和代码管理变得更加灵活和强大。 (类似于git merge xx1 其实合并到的就是当前提交记录所指向HEAD上,当你处在分支xx2和HEAD是同一个提交记录时,就合并到分支xx2下了,默认指向该分支的最新提交)

比如git checkout xx 切换分支到xx下,此时HEAD就默认指向XX,若此时使用git merge xx2, 就是把xx2合并到xx上了

那么git是怎么处理这些问题的呢?

冲突: 出现原因:拉取代码时 由于自己和另外一个人同时修改了当前分支的代码,导致拉取最新的代码出现错误 解决:这时需要手动去解决冲突,解决完毕后在提交代码/合并分支后提交代码

1.基本操作

  • 初始化仓库:git init

  • 克隆仓库: git clone 要克隆一个仓库,你可以使用git clone + 远程仓库地址命令。该命令会将远程仓库的代码完整地复制到你的本地计算机上。

  • 提交到存储区: git add xx(提交xx到存储区)/git add -A (提交非忽略的所有文件到存储区)

  • 提交到本地仓库: git commit -m <提交信息>

  • 联系远程仓库:git remote add命令将远程仓库与本地仓库建立联系。将远程仓库的地址作为<远程仓库名称>参数传递给git remote add命令。例如,使用以下命令将远程仓库命名为origin

    csharp 复制代码
      git remote add origin <远程仓库地址>

    这样,你就与远程仓库建立了联系,并将其命名为origin

2.分支管理:

  • 创建分支:git branch xx

  • 移动分支: git branch -f xx1 xx2(把当xx1分支指向移动到xx2)

  • 合并分支:git rebase/git merge xx 把xx合并到当前分支

    区别: git rebase xx 合并分支 是把当前分支新以线性的关系提交到要合并的分支下,形成新的提交记 录

    git merge xx 则是合并两个分支,然后在两个分支下合成一个新的分支,这样方便查看历史提交 和合并记录,但是比较混乱。实际应用中应根据需求选择。

  • 切换分支:git checkout xxx

  • 指定当前所在的提交指向:git checkout <提交号> 即HEAD的指向,默认情况下HEAD指向当前操作分支

3.远程仓库与本地仓库:

  • git fetch 从远程仓库拉取资源到本地仓库(注意,没有合并到当前分支 此时当工作区还是原来的状态)
  • git pull (相当于git fetch + git merge)从远程仓库拉取资源并合并到当前分支(此时工作区的内容已经被更新) git pull --rebase(相当于git fetch + git rebase)
  • git push 提交本地仓库的资源到远程仓库

建议在提交当前代码尚未推送到远程仓库前先拉取最新的代码在提交,因为可能会有远程仓库产生了新的提交的情况,所以先拉取代码与自己代码合并,使自己得到最新的代码在推送到远程仓库

4.提交记录处理:

  • 移动提交记录:
    1. git rebase -i xx 执行该命令后会出现一个视图,通过视图对当前xx所在之后提交记录做处理,更改操作记录形成新的操作记录。
    2. git cherry-pick <提交号>...(可以传多个提交号) 如果你想将一些提交复制到当前所在的位置(HEAD)下面的话, Cherry-pick 是最直接的方式了。我个人非常喜欢 cherry-pick,因为它特别简单。
  • 提交记录查看 :git log 显示当前分支的提交历史记录
  • 比较提交记录:查看两个提交之间的差异或者比较文件的改动。例如:git diff <提交1> <提交2>

5.撤销操作(git 版本回退就是通过改变提交记录实现的)

  • git reset 该命令用于将分支的指针移动到指定的提交,并丢弃该提交之后的所有提交。
  • git revert 命令用于创建一个新的提交,该提交撤销了指定提交的更改。

当我们有以下提交历史时:

go 复制代码
```
提交 C
提交 B
提交 A
```


如果我们使用 `git reset` 命令将分支指针移动到提交 B,那么提交 C 将被丢弃,历史记录变为:
```
提交 B
提交 A
```
如果我们使用 `git revert` 命令来撤销提交 B,Git 将创建一个新的提交 D,该提交撤销了提交 B 的更改,历史记录变为:

```
提交 D (撤销提交 B)
提交 C
提交 B
提交 A
```

通过 `git reset`,我们直接移动了分支指针并丢弃了提交 C。而通过 `git revert`,我们创建了一个新的提交 D 来撤销提交 B 的更改,保留了提交历史。

结尾: 如果这篇文章有帮助到您,请点个赞支持一下 👍

相关推荐
学不会•2 小时前
css数据不固定情况下,循环加不同背景颜色
前端·javascript·html
yyycqupt3 小时前
git使用(一)
git
活宝小娜4 小时前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点4 小时前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow4 小时前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js
我开心就好o4 小时前
uniapp点左上角返回键, 重复来回跳转的问题 解决方案
前端·javascript·uni-app
开心工作室_kaic5 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
刚刚好ā5 小时前
js作用域超全介绍--全局作用域、局部作用、块级作用域
前端·javascript·vue.js·vue
沉默璇年6 小时前
react中useMemo的使用场景
前端·react.js·前端框架
yqcoder6 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript