首页 > 其他分享 >Git使用基础

Git使用基础

时间:2023-11-16 14:37:25浏览次数:37  
标签:Git 仓库 合并 基础 本地 使用 远程 分支

Git 是什么?

Git 是一个版本控制系统,用于跟踪文件和项目的变化。它可以帮助多个开发者在同一个项目上协同工作,同时还能够追踪项目的历史和变更。

 

本地仓库和远程仓库

本地仓库:

本地仓库是存储在你自己计算机上的 Git 仓库。当你在项目文件夹中运行 git init 命令时,它会初始化一个本地仓库。在本地仓库中,你可以进行提交、创建分支、合并分支等操作。

git clone 命令不是用于初始化一个新的本地仓库,而是用于将一个已经存在的远程仓库克隆(复制)到本地。它会将远程仓库的所有文件、分支、标签等信息复制到本地,并创建一个与远程仓库相同的本地仓库。

  1. git init 命令:

    • 用于在一个已有的目录中初始化一个新的 Git 仓库。

    • 它会在该目录下创建一个 .git 子目录,用于存储 Git 仓库的配置文件、对象数据库等信息。

    • 这个命令主要用于从零开始创建一个新的 Git 仓库。

    bashCopy codecd /path/to/your/project
    git init
  2. git clone 命令:

    • 用于从远程仓库克隆一个已存在的 Git 仓库到本地。

    • 它不仅会将远程仓库的文件复制到本地,还会自动设置远程仓库地址,创建一个默认的主分支(通常是 mastermain),并将本地仓库的 HEAD 指向该分支。

    • 这个命令主要用于获取已有项目的副本。

    bashCopy code
    git clone <remote_repository_url>

总结:git init 主要用于在本地目录中创建一个新的 Git 仓库,而 git clone 用于从远程仓库克隆一个已存在的 Git 仓库到本地。两者的使用场景和目的不同。

远程仓库:

远程仓库是存储在云端(例如GitHub、GitLab、Bitbucket等)的仓库。这允许多个开发者共享和协同工作。你可以把本地仓库的变更推送到远程仓库,也可以从远程仓库拉取变更到本地仓库。

 

 

理解 Git 中的 Pull、Fetch 和 Push 涉及到远程仓库和本地仓库之间的数据同步。以下是这三个操作的简单介绍:

  1. Pull(拉取):

    • 含义: Pull 操作用于从远程仓库获取最新的代码并合并到当前本地分支。

    • 使用场景: 当你想要同步你的本地仓库与远程仓库的最新变更时,可以使用 Pull。

    • 操作: 在本地仓库中运行 git pull 命令,Git 将自动从远程仓库下载最新的代码并尝试合并到你的本地分支。

  2. Fetch(获取):

    • 含义: Fetch 操作用于从远程仓库获取最新的代码,但不自动合并到本地分支。它会将远程仓库的变更下载到你的本地仓库。

    • 使用场景: 当你想查看远程仓库的最新变更,但还不想将这些变更合并到你的本地分支时,可以使用 Fetch。

    • 操作: 在本地仓库中运行 git fetch 命令,Git 将下载远程仓库的最新代码,你可以随后决定是否要进行合并。

  3. Push(推送):

    • 含义: Push 操作用于将本地仓库的提交推送到远程仓库,以便其他开发者可以访问你的变更。

    • 使用场景: 当你在本地完成一些工作并希望分享这些变更给其他开发者时,可以使用 Push。

    • 操作: 在本地仓库中运行 git push 命令,Git 将把本地分支的变更推送到远程仓库。

简而言之,Pull 是 Fetch 和 Merge 的组合操作,它从远程仓库获取最新代码并尝试自动合并到本地分支。Fetch 只是获取远程仓库的最新代码,而不自动合并。Push 是将本地仓库的变更推送到远程仓库。

这三个操作都是用于保持本地仓库和远程仓库同步的重要工具。理解它们的使用场景有助于更好地管理和协作项目的开发。

 

什么是合并分支,合并到哪里?合并前的两个分支去哪里了

合并分支是将两个不同的分支合并为一个的过程,这通常涉及将一个分支的修改合并到另一个分支。在 Git 中,主要的合并操作有两种:mergerebase

  1. Merge(合并):

    • 合并到哪里: 当你执行 git merge 命令时,你通常会合并一个分支到当前分支。例如,如果你在 main 分支上运行 git merge feature-branch,那么 feature-branch 的修改将会合并到 main 分支上。

    • 合并前的两个分支: 合并完成后,feature-branch 仍然存在,但它的修改已经被合并到 main 分支上。在合并完成后,通常你可以删除不再需要的分支。

    合并 feature-branch 到 main
    git checkout main
    git merge feature-branch
  2. Rebase(变基):

    • 合并到哪里: Rebase 会将一个分支的修改放在另一个分支的最顶端。如果你在 feature-branch 上运行 git rebase main,那么 feature-branch 的修改将会被“移动”到 main 分支的最顶端。

    • 合并前的两个分支: Rebase 会改变提交历史,因此它看起来好像是在一个分支上进行的修改。但在实际操作中,feature-branch 仍然存在,只是它的提交历史被重新组织了。

    变基 feature-branch 到 main
    git checkout feature-branch
    git rebase main

总体而言,合并是为了将不同分支上的修改整合在一起。在合并完成后,你可以选择删除不再需要的分支。选择使用 merge 还是 rebase 取决于你的项目和团队的工作流,以及你对提交历史的偏好。

merge 操作的比喻:

想象你和你的朋友一起写了一篇故事。你们各自写了自己的部分,然后决定把它们合并在一起形成一篇完整的故事。

  • merge 类比:

    1. 你和你的朋友都在不同的地方写故事(各自的分支)。

    2. 当你们决定将故事合并时,你们会把各自的部分放在一起,形成一篇整体的故事(合并提交)。

    3. 这个故事的历史看起来像是一条主线,上面标有你们各自的贡献点。

rebase 操作的比喻:

现在,想象你决定重新组织你的故事,使得整个故事流畅地连接在一起,而不是保留两个分开的部分。

  • rebase 类比:

    1. 你决定重写你的部分,使得你的故事直接接在你朋友的故事后面。

    2. 你的故事现在看起来像是直接连在一起的,没有了分叉和额外的合并提交。

    3. 整体故事的历史变得更加线性,就好像是由一个人顺畅地写成的。

对比总结:

  • merge

    • 保留了各自分支的历史,创建了一个新的合并提交,形成分叉。

    • 类似于把两个独立的故事合并在一起,每个人的贡献都被保留。

  • rebase

    • 重新组织提交历史,使得提交看起来像是按照时间轴一样直线连接。

    • 类似于在故事中重新组织段落,使得整体流畅而一致。

 

tag(标签):

  • tag 是一个不可变的引用,指向特定的 commit。它是为了方便地标记和引用项目的特定版本而引入的。

  • tag 通常用于标记软件版本、重要的里程碑或者项目中的其他重要时刻。

  • commit 不同,tag 不会随着新的提交而移动,因为它是一个静态的指针。

标签:Git,仓库,合并,基础,本地,使用,远程,分支
From: https://www.cnblogs.com/cooooooooookie/p/17836140.html

相关文章

  • 【Java基础】方法重载
    命名方法命名:小驼峰类命名:大驼峰方法重载调用方法时,JVM会通过参数的不同区分同名的方法好处:不需要记忆过多繁琐的方法名字......
  • git 报错。
    在下载的 linux的源码上进行gitinit的时候报错。  fatal:Invalidpath'/home/topeet/source_code/xikejiqiren/3588-linux/.repo':Nosuchfileordirectory 这是可能的原因。  ......
  • 【Java基础】Java基础知识 && 数据类型转换 && 运算符
    1.JVMJREJDK三者的作用和关系JDK:javadevelopmentkit,java开发工具包,用来开发Java程序的,针对java开发者;JDK即为Java开发工具包,包含编写Java程序所必须的编译、运行等开发工具以及JRE。开发工具如:用于编译Java程序的javac命令;用于启动JVM运行Java程序的Ja......
  • 1-1 计算机基础和py环境搭建
    ​1.计算机基础1.1基本概念计算机组成:计算机是由多个硬件组合而成的东西,常见的硬件有:CPU、硬盘、内存、网卡、显示器、机箱、电源等等但单纯地组合并不能协作操作系统:用于协调计算机各个硬件,让硬件之间进行协同工作,以完成某个目标常见的操作系统:windows-xp\win7\win1......
  • 1-3 Python基础语法
    ​ 目录1.循环语句1.1循环语句基本使用1.2综合案例1.3break1.4continue1.5whileelse2.字符串格式化2.1%2.1.1基本格式化操作2.1.2百分比2.2format(推荐)2.3f3.运算符3.1运算符优先级3.2判断题 1.循环语句while循环for循环```while条件: ......
  • 1-2 Python基础语法
    ​ 1.编码计算机所有的数据本质上是以0和1的组合来存储在计算机中会将中文转换为0101010100最终存储到硬盘上计算机中有一个编码的概念(也就是密码本)  武  ->   0111111100011010010110110在计算机中有很多种编码每种编码都有自己的一套密码本,都维护这......
  • docker使用--gpus all报错: docker: Error response from daemon: could not select d
    报错信息:docker:Errorresponsefromdaemon:couldnotselectdevicedriver""withcapabilities:[[gpu]].解决方法:1,任意路径下创建nvidia-container-runtime-script.sh文件vimnvidia-container-runtime-script.sh拷贝下方内容到nvidia-container-runtime-script.......
  • 使用golang对服务器简单监控
    packagemainimport( "fmt" "github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/disk" "github.com/shirou/gopsutil/host" "github.com/shirou/gopsutil/load" "github.com/shirou/gopsutil/me......
  • arthas使用指北
    备忘录一.arthas的使用常用命令jad反编译class类、方法语法jad-c类加载器类的全路径方法名thread操作线程语法`列举全部的线程`thread`按照CPU使用率列举前5个线程`thread-n5`根据id查看此线程处于的运行状态,在执行的具体某个方法,方法......
  • 避免defer陷阱:拆解延迟语句,掌握正确使用方法
    基本概念Go语言的延迟语句defer有哪些特点?通常在什么情况下使用?Go语言的延迟语句(deferstatement)具有以下特点:延迟执行:延迟语句会在包含它的函数执行结束前执行,无论函数是正常返回还是发生异常。后进先出:如果有多个延迟语句,它们会按照后进先出(LIFO)的顺序执行。也就是说,......