Git的使用_堆栈管理_CI/CD先容

打印 上一主题 下一主题

主题 1527|帖子 1527|积分 4581

一、Git的底子知识

一-1、什么是Git

Git 是一个用于管理源代码的分布式版本控制体系。版本控制体系会在您修改文件时记录并生存更改,使您可以随时规复以前的工作版本。
像 Git 如许的版本控制体系可以很轻易地:


  • 跟踪代码汗青记录
  • 以团队情势协作编写代码
  • 检察谁做了哪些更改
Linux下令行的git的浅易安装

  1. yum install git
复制代码
Git项目的构成

Git 项目包含三个主要组件:


  • 存储库
  • 工作树
  • 索引
存储库是跟踪项目文件全部更改的“容器”。它生存着您团队所做的全部提交。您可以使用 git 日志下令访问提交汗青记录。
工作树或工作目录由您正在处理的文件构成。您可以将工作树视为一个文件体系,您可以在其中检察和修改文件。
索引或暂存区是准备提交的地方。暂存后,工作树中的文件将与存储库中的文件举行比力。对工作树中文件的更改在提交之前被标记为已修改。

Git的根本工作流程



  • 修改工作树中的文件。
  • 暂存要包含在下一次提交中的更改。
  • 提交您的更改。(提交将从索引中获取文件并将它们作为快照存储在存储库中。)

解释“将它们作为快照存储在存储库中”:
一旦文件被添加到索引中,用户就可以实行提交操作。提交操作会将这些文件的状态(即当前版本)生存为一个“快照”。这个快照包含了全部文件的当前版本,并且会被存储在存储库中。如许,每次提交都会在存储库中创建一个新的快照,记录下项目在该时刻的状态。
Git文件的三种状态

正如您大概从 Git 工作流程中猜到的那样,文件可以处于以下三种状态之一:


  • 已修改
  • 已暂存
  • 已提交
修改文件时,您只会在工作树中看到这些更改。然后您必须暂存更改以将它们包含在您的下一次提交中。完成暂存全部文件后,您可以提交它们并添加一条消息来形貌您所做的更改。然后您的更改将安全地记录在存储库中的新快照中。

一-2、存储库

存储库 (即 repository) 是用于存储代码的位于中心的文件夹。一旦拥有包含文件和目录的 Git 存储库,就可以开始跟踪更改和版本。
远程存储库与本地存储库

Git 存储库有两种类型:远程和本地。


  • 远程存储库托管在远程服务器上 (这可以在互联网上或异地服务器上;它乃至可以是不同路径中的同一台呆板) 并在多个团队成员之间共享。
  • 本地存储库为单个用户托管在本地呆板上。
固然您可以在本地存储库中使用 Git 版本控制功能,但协作功能 (比方与队友拉取和推送代码更改) 仅可在远程存储库上完成。

创建存储库

有两种方法可以在您的呆板上创建本地存储库:您可以使用盘算机上的文件夹从头开始创建一个新的存储库,大概克隆一个现有的存储库
新的存储库
您可以使用 git init
下令。它可以将 Git 引入到现有的、未版本控制的项目中,以便您可以开始跟踪更改

复制的存储库
您可以使用 git clone 下令将远程存储库复制到本地盘算机上。默认情况下,git clone会自动建立一个本地主分支,来跟踪它所克隆的远程主分支。
   克隆的存储库与原始存储库具有相同的汗青日志。您可以引用和回溯到本地存储库中的任何提交。
  
解释“复制的存储库”:
上面这段话形貌了怎样使用 Git 来克隆远程存储库到本地盘算机上,并解释了克隆后存储库的一些特性。下面是对这段话的解释:

  • 使用 git clone 下令克隆远程存储库

    • 您可以通过实行 git clone 下令来将一个远程的 Git 存储库(repository)复制到您的本地盘算机上。这个下令会将远程存储库的全部文件和目录布局复制到您的盘算机上。

  • 自动建立本地主分支跟踪远程主分支

    • 当您克隆一个远程存储库时,git clone 下令默认会为您创建一个本地的主分支(通常叫做 main 或 master),这个本地主分支会自动设置为跟踪远程存储库中的主分支。这意味着,当您在本地主分支上实行 git pull
      下令时,Git 会自动从远程主分支拉取最新的更改。

  • 克隆的存储库包含完备的汗青日志

    • 克隆的存储库会包含原始远程存储库的全部提交汗青。这意味着您在本地存储库中可以看到从项目开始到现在的全部提交记录。

  • 引用和回溯任何提交

    • 由于克隆的存储库包含了完备的汗青日志,您可以在本地存储库中引用和回溯到任何汗青提交。这允许您检察已往的代码状态,大概在需要时回退到之前的版本。

简而言之,这段话阐明了通过 git clone 下令,您可以在本地盘算机上创建一个与远程存储库完全同步的副本,包罗全部的汗青提交,并且可以方便地跟踪和管理这些汗青记录。
git init
下令的使用方法


git init
是 Git 版本控制体系中用来初始化一个新的 Git 堆栈的下令。这个下令会创建一个新的 .git 目录,该目录包含了全部效于跟踪项目汗青和版本信息的必要文件和对象数据库。
以下是 git init
下令的一些根本使用方法:
1. 初始化一个新的 Git 堆栈

  1. git init
复制代码
这个下令会在当前目录下创建一个新的 .git 目录,这个目录是 Git 用来存储你的项目汗青的地方。此时,你的项目文件还没有被跟踪,你需要使用 git add 下令来开始跟踪文件。

   这句话的意思是,在实行了创建Git堆栈的下令之后,你的项目文件还没有被Git体系记录和管理。为了开始记录和管理这些文件的变更汗青,你需要使用git add这个下令。git add下令的作用是将文件添加到Git的暂存区(staging area),如许Git就会开始跟踪这些文件的变更。一旦文件被添加到暂存区,你就可以使用git commit
下令来提交这些变更,从而将它们生存到项目的汗青记录中。
  
2. 在指定目录初始化一个新的 Git 堆栈

  1. git init
  2. [project-name]
复制代码
假如你想在特定的目录下初始化一个新的 Git 堆栈,可以指定一个目录名。这将会在指定的目录下创建一个新的 .git 目录。
3. 初始化一个空的 Git 堆栈

  1. git init
  2. --bare
复制代码
这个下令会创建一个空的 Git 堆栈,也就是说,它不包含工作目录。这种类型的堆栈通常用作远程堆栈,由于它不包含任何项目文件,只包含版本控制信息。
4. 初始化时设置 Git 堆栈

git init
下令也支持一些设置选项,比方:


  • -q 或 --quiet:静默模式,不显示初始化信息。
  • --bare:创建一个空的 Git 堆栈,如上所述。
  • --template=<template_directory>:指定一个模板目录,用于初始化 .git 目录的布局。
*5. 使用 git init
克隆现有堆栈


固然 git init
本身不是用来克隆堆栈的,但你可以在初始化一个新的 Git 堆栈后,使用 git remote add 和 git fetch 下令来添加远程堆栈并获取其内容。
  1. git init
  2. my-new-repocd my-new-repogit remote add origin <repository-url>git fetch origin
复制代码
这里,<repository-url> 是你想要克隆的远程堆栈的 URL。

   解释一下这句话中的 “使用 git remote add 和 git fetch 下令” 的寄义。
   

  • git remote add

    • 这个下令用于添加一个新的远程堆栈到本地 Git 堆栈中。
    • 语法:git remote add <remote_name> <remote_url>
    • <remote_name> 是你给远程堆栈起的别名,常用的是 origin。
    • <remote_url> 是远程堆栈的 URL 地址。
    • 比方:git remote add origin https://github.com/user/repo.git 将 GitHub 上的堆栈地址添加为本地堆栈的远程堆栈,并命名为 origin。

   

  • git fetch

    • 这个下令用于从远程堆栈获取最新的代码和分支信息,但不会自动归并到本地分支。
    • 语法:git fetch <remote_name>
    • <remote_name> 是你之前添加的远程堆栈别名,比方 origin。
    • 比方:git fetch origin
      会从 origin 远程堆栈获取最新的代码和分支信息。

  综上所述,“使用 git remote add 和 git fetch 下令” 的意思是:
  

  • 起首使用 git remote add 将远程堆栈地址添加到本地 Git 堆栈中,并给远程堆栈起一个别名。
  • 然后使用 git fetch 从远程堆栈获取最新的代码和分支信息,以便了解远程堆栈的最新状态。
  
留意事项



  • 实行 git init
    后,你需要使用 git add 和 git commit
    下令来开始跟踪文件和提交更改。
  • 假如你想要克隆一个远程堆栈,通常使用 git clone 下令更为方便,由于它会自动初始化本地堆栈并拉取远程堆栈的全部内容。
  • git init
    --bare 创建的堆栈不包含工作目录,只包含 Git 元数据,得当用作远程堆栈或中央服务器上的堆栈。
通过这些根本的使用方法,你可以开始使用 Git 来管理你的项目版本。
git clone下令的使用方法

git clone 是 Git 版本控制体系中用来复制一个远程堆栈到本地的下令。这个下令不仅会复制堆栈中的全部文件和目录,还会复制完备的提交汗青、分支和标签。以下是 git clone 下令的一些根本使用方法和选项:
根本用法

  1. git clone [url]
复制代码
这里的 [url] 是远程堆栈的 URL。实行这个下令后,Git 会在当前目录下创建一个与远程堆栈同名的新目录,并在其中初始化一个新的 Git 堆栈,然后将远程堆栈的内容复制到这个新堆栈中。

指定目录

  1. git clone [url]
  2. [directory]
复制代码
你可以指定一个目录名来生存克隆的堆栈。假如不指定目录名,Git 默认会使用远程堆栈的名称作为目录名。
使用 SSH 克隆

假如你的远程堆栈是通过 SSH 访问的,你需要确保你的 SSH 密钥已经添加到了远程堆栈服务的账户中。
  1. git clone git@github.com:username/repository.git
复制代码
使用 HTTPS 克隆

对于使用 HTTPS 访问的远程堆栈,你大概需要输入用户名和密码。
  1. git clone https://github.com/username/repository.git
复制代码
克隆特定分支

  1. git clone --single-branch --branch [branch-name] [url]
复制代码
使用 --branch 选项可以指定克隆特定的分支,而 --single-branch 选项会阻止克隆其他分支。
浅克隆(Shallow Clone)

  1. git clone --depth [depth] [url]
复制代码
--depth 选项用于创建一个浅克隆,这意味着只会克隆一定命量的提交汗青。这对于大型堆栈来说可以淘汰克隆所需的时间和带宽。[depth] 可以是一个详细的数字,表现你想要克隆的提交数量。
克隆到特定父目录

  1. git clone --recurse-submodules [url] [parent-directory]/[directory]
复制代码
假如你的项目使用了子模块,--recurse-submodules 选项会确保同时克隆全部子模块。
设置传输设置

  1. git config --global http.sslVerify false
复制代码
假如你在克隆时碰到 SSL 验证问题,可以通过设置 Git 来禁用 SSL 验证(不保举在生产环境中使用,由于这会降低安全性)。
克隆后的操作

克隆完成后,你通常会进入克隆的目录,并开始工作:
  1. cd [directory]
  2. git branch -a  # 查看所有分支
  3. git checkout [branch-name]  # 切换到特定分支
复制代码
  We’ll need to check out his story. 我们需要去核实他的话.
He’s going to check out the new club. 他准备去这家俱乐部看看.
  留意事项



  • 克隆完成后,你大概需要设置远程堆栈的 URL,使用 git remote add 下令。
  • 假如你克隆的堆栈使用了 LFS(Large File Storage)或其他特殊的存储机制,你大概需要额外的设置。
  • 确保你有足够的权限访问远程堆栈,特殊是在私有堆栈的情况下。
通过这些根本的使用方法和选项,你可以机动地克隆远程 Git 堆栈到本地,并开始你的开发工作。

解释“克隆完成后,你大概需要设置远程堆栈的 URL,使用 git remote add 下令”:
   这句话是在形貌使用Git版本控制体系时的一个常见步骤。详细来说,这句话的意思是:
  

  • 克隆完成后:这是指你已经使用git clone下令从远程堆栈克隆了一个Git堆栈到本地。
  • 你大概需要设置远程堆栈的 URL:在某些情况下,当你克隆一个堆栈后,大概需要手动设置或确认远程堆栈的地址。这是由于git clone下令大概没有自动设置远程堆栈的URL,大概你大概想要添加一个新的远程堆栈。
  • 使用 git remote add 下令:这是Git的一个下令,用于添加一个新的远程堆栈引用。假如你的本地堆栈没有远程堆栈的引用,大概你需要添加一个新的远程堆栈,你可以使用这个下令来添加。下令的根本格式是git remote add <remote-name> <url>,其中<remote-name>是你给远程堆栈起的别名(通常是origin),而<url>是远程堆栈的地址。
  总结来说,这句话是在告诉你,在克隆了一个Git堆栈之后,假如需要,你可以使用git remote add下令来设置或添加远程堆栈的URL。
  
git clone下令和git init
下令的区别


git init
和 git clone 是 Git 版本控制体系中的两个不同的下令,它们在初始化和复制堆栈时有不同的用途和行为:
git init




  • 用途:git init
    下令用于在现有目录中创建一个新的 Git 堆栈。它初始化一个新的 .git 目录,这个目录包含了全部效于跟踪项目汗青和版本信息的必要文件和对象数据库。
  • 操作:git init
    仅在本地创建一个新的 Git 堆栈,不会涉及远程堆栈的数据。它不会复制任何文件或代码,只是设置了一个空的版本控制体系。
  • 效果:实行 git init
    后,你将得到一个空的 Git 堆栈,你需要手动添加文件并提交更改。
  • 选项:git init
    可以创建一个空的(bare)堆栈,这种类型的堆栈通常用作远程堆栈,由于它不包含工作目录,只包含版本控制信息。
git clone



  • 用途:git clone 下令用于从现有的 Git 堆栈复制一个堆栈到一个新的位置,同时设置好远程堆栈的引用。
  • 操作:git clone 会将远程堆栈中的全部文件、提交汗青、分支和标签复制到新的本地堆栈中。它还会自动设置一个名为 origin 的远程引用,指向原始的远程堆栈。
  • 效果:实行 git clone 后,你将得到一个包含全部项目文件和版本汗青的完备本地副本。
  • 选项:git clone 支持多种选项,比方 --depth 用于创建浅克隆(shallow clone),--branch 用于克隆特定分支,--single-branch 用于克隆单个分支等。
区别总结



  • 初始化 vs. 复制:git init
    用于在本地初始化一个新的 Git 堆栈,而 git clone 用于从远程堆栈复制一个完备的堆栈到本地。
  • 内容:git init
    不包含任何项目文件,而 git clone 包含远程堆栈的全部文件和汗青。
  • 远程引用:git clone 自动设置远程引用,而 git init
    不会自动设置远程引用,需要手动使用 git remote add 下令添加。
  • 操作范围:git init
    仅在本地操作,git clone 涉及从远程堆栈拉取数据。
根据你的需要,你可以选择使用 git init
来创建一个新的本地堆栈,大概使用 git clone 来复制一个现有的远程堆栈到本地。
一-3、记录变更

Git 不会自动记录您所做的每个更改。您必须通过在索引中暂存这些更改来告诉 Git 您想要记录哪些更改。暂存后,您可以提交这些更改,以便将它们记录在存储库中
举行更改

正如在 Git 工作流程的章节中所述,工作树是您举行更改的地方。您可以在那边编辑文件、添加新文件和移除不需要的文件。
在工作树中所做的修改会在索引中注明修改,索引位于存储库和工作树之间,但不会直接生存到存储库中。全部更改会先在索引中暂存,然后才会生存在存储库中。
只有索引中的更改才会提交到存储库。
提交更改

git commit
下令允许您在存储库的 Git 汗青记录中记录文件更改。
您提交的每个更改都可以在相应的文件或目录中按时间顺序检察。

40 个字符的校验和哈希可唯一标识每个提交。您可以使用校验和哈希来检索您的存储库中给定提交的状态或更改。
   将不同类型的更改—比方错误修复、新功能和改进—分离到不同的提交会合,将使您和您的团队成员可以大概理解为什么以及怎样快速举行这些更改。
  git中哈希值和引用的概念

这句话中的“哈希值大概引用”指的是在版本控制体系(如Git)中,可以通过两种方式来指定一个特定的提交(commit):

  • 哈希值:每个提交在版本控制体系中都有一个唯一的标识符,这个标识符是一个长字符串,通常是由一系列字符和数字构成的,这个字符串就是所谓的哈希值。哈希值是提交内容的加密摘要,包管了每个提交的唯一性和完备性。
  • 引用:除了哈希值,还可以使用引用来指定提交。引用可以是分支名、标签名大概是其他一些别名,它们都是指向特定提交的指针大概名称。
在版本控制体系中,无论是通过哈希值还是引用,都可以正确地找到并操作特定的提交。

详细阐明怎样通过哈希值和引用来操作特定的提交。
1. 通过哈希值操作

在Git中,每个提交都有一个唯一的哈希值。你可以通过以下步骤来检察提交的哈希值,并基于这个哈希值举行操作:
检察提交的哈希值

打开终端或下令行界面,进入你的Git堆栈目录,然后实行以下下令:
  1. git log
复制代码
这将列出全部的提交记录,包罗每个提交的哈希值(通常是一串长数字和字母的组合)。

检出特定的提交

假设你找到了一个提交的哈希值(比方:a1b2c3d4e5f6g7h8i9j0),你可以通过以下下令来检出(切换到)这个特定的提交:
  1. git checkout a1b2c3d4e5f6g7h8i9j0
复制代码
这将切换到该提交的状态,但不会影响当前的工作目录。


创建一个新的分支指向该提交

假如你想基于这个提交创建一个新的分支,可以使用以下下令:
  1. git checkout -b new-branch-name
  2. a1b2c3d4e5f6g7h8i9j0
复制代码
这将创建并切换到一个名为new-branch-name的新分支,指向指定的提交。
2. 通过引用操作

在Git中,引用通常指的是分支名、标签名等。以下是一些根本操作:
创建并切换到新的分支

假如你想创建一个新的分支并立即切换到这个分支,可以使用以下下令:
  1. git checkout -b new-branch-name
复制代码
这将创建并切换到一个名为new-branch-name的新分支。
切换到已有的分支

假如你知道一个分支的名称(比方:existing-branch),可以使用以下下令来切换到这个分支:
  1. git checkout existing-branch
复制代码
创建并使用标签

标签是另一种引用,通常用于标记特定的提交(比方发布版本)。以下是创建和使用标签的步骤:

  • 创建标签
    1. git tag v1.0.0
    复制代码
    这将为近来的提交创建一个名为v1.0.0的标签。
  • 检出标签指向的提交
    1. git checkout v1.0.0
    复制代码
    这将检出标签v1.0.0所指向的提交。
通过这些操作,你可以在Git中机动地通过哈希值或引用来管理和操作代码的汗青记录。

git commit
的使用方法与实例


git commit
是 Git 版本控制体系中用来将更改记录(提交)到本地堆栈的下令。这个下令会将你的更改永久生存到堆栈的汗青记录中。以下是 git commit
下令的一些根本使用方法和实例:
根本用法

  1. git commit
复制代码
这个下令会打开一个文本编辑器,让你输入提交信息。假如你设置了默认编辑器,它会使用默认编辑器;否则,它会使用 Vim 或其他体系默认的编辑器。
提交全部更改

  1. git commit
  2. -a
复制代码
-a 选项告诉 Git 自动将全部已跟踪的更改(包罗删除的文件)加入到暂存区,并举行提交。这个选项不会暂存未跟踪的文件(即新文件)。
提交暂存区的更改

  1. git commit
  2. -m "commit message"
复制代码
-m 选项允许你在下令行中直接提供提交信息。引号中的文本是提交信息,应该简洁明了地形貌你的更改内容。
添加特定文件到暂存区并提交

  1. git add [file]git commit
  2. -m "commit message"
复制代码
假如你只想提交部分更改,你可以使用 git add 下令将特定的文件添加到暂存区,然后使用 git commit
提交这些更改。
提交全部更改并附带提交信息

  1. git commit
  2. -am "commit message"
复制代码
-a 和 -m 选项可以一起使用,如许既可以提交全部已跟踪的更改,又可以提供提交信息。
修正上一次提交

  1. git commit
  2. --amend -m "new commit message"
复制代码
假如你想要修改近来一次提交,可以使用 --amend 选项。这会打开编辑器让你修改提交信息,大概你可以直接使用 -m 选项提供新的提交信息。
使用编辑器设置提交信息

假如你不想使用默认的编辑器,可以通过 Git 设置来指定一个不同的编辑器:
  1. git config --global core.editor "editor-of-your-choice"
复制代码
将 editor-of-your-choice 替换为你想要使用的编辑器,比如 nano、emacs 或 subl(Sublime Text)。
实例

假设你已经对项目中的几个文件举行了更改,现在想要将这些更改提交到本地堆栈:

  • 暂存更改
  1. git add README.md src/code.js
复制代码
这里,我们将 README.md 和 src/code.js 文件添加到暂存区。

  • 提交更改
  1. git commit
  2. -m "Update documentation and fix bugs in code"
复制代码
这里,我们提交了暂存区的更改,并提供了一个形貌性的提交信息。
通过这些根本的使用方法和实例,你可以开始使用 git commit
来记录你的更改到 Git 堆栈中。记得每次提交都应该有一条清晰、简洁的提交信息,如许可以帮助团队成员理解你的更改内容。
Git提交消息

提交更改时,您需要输入提交信息。提交消息应该简洁正确地形貌您所做的更改。
为了使消息一致且易于理解,请实行以下 Git 提交消息模板:


  • 第 1 行:提交更改的内容摘要
  • 第 2 行:空行
  • 第 3 行:变更原因

git init
git clone git remote add git add git config user.email git config user.name git commit
等下令是否必要性以及先后实行顺序


在 Git 版本控制中,不同的下令用于不同的操作和目的。以下是你提到的下令的简要阐明和它们之间的逻辑顺序:

  • git init


    • 用途:初始化一个新的 Git 堆栈。
    • 是否必须:假如你正在从头开始一个新的项目,并且想要使用 Git 举行版本控制,那么这个下令是必须的。
    • 顺序:通常是第一个实行的下令,在你创建或选择项目目录后。

  • git clone

    • 用途:复制一个远程堆栈到本地。
    • 是否必须:假如你要参与一个已经存在的 Git 项目,并且想要在本地工作,那么这个下令是必须的。
    • 顺序:假如你是从远程堆栈开始工作,那么这个下令通常是第一个实行的。

  • git add

    • 用途:将更改添加到暂存区。
    • 是否必须:是的,每次你想要提交更改之前,你需要使用 git add 将更改添加到暂存区。
    • 顺序:在 git commit
      之前实行。

  • git remote add

    • 用途:添加远程堆栈的引用。
    • 是否必须:假如你的项目需要与远程堆栈同步(比方,推送更改或拉取更新),那么这个下令是必须的。
    • 顺序:通常在 git init
      之后实行,特殊是在你初始化了一个新堆栈并想要连接到远程堆栈时。

  • git commit


    • 用途:将暂存区的更改提交到本地堆栈。
    • 是否必须:是的,每次你想要生存项目状态的快照时,都需要实行 git commit

    • 顺序:在 git add 之后实行。

  • git config user.emailgit config user.name

    • 用途:设置 Git 用户的电子邮件和姓名。
    • 是否必须:是的,至少需要设置一次,以便 Git 知道是谁做的提交。
    • 顺序:这些设置可以在项目的任何时候设置,但最幸亏开始工作之前就设置好。

详细举例阐明

假设你是一个开发者,从头开始一个新项目,并渴望使用 Git 举行版本控制:

  • 初始化 Git 堆栈
    1. mkdir my-project
    2. cd my-project
    3. git init
    复制代码
    这里,你创建了一个新目录,进入该目录,并初始化了一个新的 Git 堆栈。
  • 设置用户信息
    1. git config user.name "Your Name"
    2. git config user.email "your.email@example.com"
    复制代码
    你需要设置你的用户名和电子邮件,如许每次提交时,Git 都知道是谁做的更改。
  • 添加文件并提交

    • 假设你创建了一个 README.md 文件,并编辑了一些内容。
    1. git add README.mdgit commit
    2. -m "Initial commit with README"
    复制代码
    这里,你将 README.md 文件添加到暂存区,并提交了这个更改。

  • 添加远程堆栈

    • 假设你已经在 GitHub 上创建了一个远程堆栈,并复制了堆栈的 URL。
    1. git remote add origin https://github.com/yourusername/my-project.git
    复制代码
    这里,你添加了一个名为 origin 的远程堆栈引用。

  • 推送到远程堆栈
    1. git push -u origin main
    复制代码
    这里,你将本地的 main 分支推送到远程堆栈。
这个流程展示了从初始化一个新的 Git 堆栈到设置用户信息,再到添加文件、提交更改,并最终与远程堆栈同步的完备过程。每个步骤都是必要的,以确保你的项目可以大概精确地使用 Git 举行版本控制。
一-4、还原变更

Git 最有代价的特性之一是可以大概打消错误的操作。当您举行新的提交时,Git 会存储项目的快照,以便您可以在需要时返回到较早的版本。
撤消更改的方法主要有两种:git revert 和 git reset。
打消提交

使用git revert 下令撤消以前的提交。这是撤消更改的最常用方法。
git revert 下令可创建一个新的提交,用于规复先前提交所做的更改。它允许您撤消不需要的更改,而无需完全移除提交或修改存储库的汗青记录。它是一个有效的工具,用于管理对 Git 存储库的更改,同时保留其汗青记录。
固然你可以用git reset或git rebase -i 下令,从汗青记录中删除先前的提交,但一般不建议如许做,由于这会导致远程存储库与其他成员的本地存储库不同。

移除提交

使用 git reset 下令使 HEAD 指向先前的提交。您可以通过进入重置模式来指定重置下令的范围

HEAD和索引的概念、作用及两者之间的区别

在 Git 中,HEAD 和索引(Index)是两个核心概念,它们在版本控制和项目管理中扮演偏重要的脚色。下面将详细先容这两个概念以及它们之间的区别。
HEAD


  • 概念

    • HEAD 是一个引用,它指向当前分支的最新提交(即当前分支的最后一次提交)。它是当前工作状态的出发点,表明了当前分支的最新进展。

  • 作用

    • 标识当前分支的最新提交,用于确定当前的工作底子。
    • 在实行如 git merge、git rebase 等操作时,HEAD 指示了归并或变基的出发点。

  • 特点

    • HEAD 总是指向当前分支的最新提交,当你切换分支时,HEAD 也会随之改变。

索引(Index)


  • 概念

    • 索引,也称为暂存区(Staging Area),是一个准备下一次提交的文件列表和内容的数据库。它是 Git 工作流程中的一个重要环节,位于工作目录和 Git 堆栈之间。

  • 作用

    • 暂存你想要包含在下一次提交中的文件和更改。你可以将更改添加到索引中,然后一次性提交。
    • 允许你在提交前对更改举行组织和审查,确保只有想要的更改被提交。

  • 特点

    • 索引是 Git 工作流程中的一个中间步骤,它允许你对更改举行多次修改,直到你满意为止。
    • 索引中的内容是下一次提交的底子,但直到你实行 git commit
      下令之前,这些更改都不会被永久生存。

两者之间的区别


  • 存储位置

    • HEAD 是一个指向特定提交的引用,存储在 .git/HEAD 文件中。
    • 索引是存储在 .git/index 文件中的二进制文件,包含了暂存的文件列表和内容。

  • 功能

    • HEAD 用于标识当前分支的最新提交,是版本控制的参考点。
    • 索引用于暂存和组织即将提交的更改,是准备提交的阶段。

  • 持久性

    • HEAD 总是指向最新的提交,是一个持久的状态标识。
    • 索引是一个临时状态,可以随时修改,直到实行提交操作。

  • 操作

    • 对 HEAD 的操作通常涉及到分支的切换和提交的移动,如 git checkout 和 git reset。
    • 对索引的操作涉及到文件的暂存和取消暂存,如 git add 和 git rm。

  • 影响范围

    • HEAD 的改变会影响当前的工作分支和提交汗青。
    • 索引的更改只影响下一次提交的内容,不会直接影响提交汗青。

理解 HEAD 和索引的概念和区别对于有效使用 Git 举行版本控制至关重要。它们共同构成了 Git 工作流程的底子,使得开发者可以机动地管理文件更改和提交汗青。
重置模式

共有三种主要的重置模式:


  • mixed (默认) 模式可规复已更改索引的状态。(使用--mixed选项)
  • Soft 模式可撤消先前的提交。(使用--soft选项)
  • Hard 模式可移除提交的全部痕迹。(使用--hard选项)
以下是每种重置模式的快速细分:

git revert下令的使用方法及实例

git revert 是一个 Git 下令,用于打消之前已经提交的更改。它通过创建一个新的提交来“反做”之前的提交,而不是直接修改汗青记录,这意味着它是一个安全的操作,由于它不会改变项目的汗青。
根本语法

  1. git revert [options] <commit>
复制代码


  • <commit> 是你想要打消的提交的哈希值大概引用。
选项



  • -m parent-number:指定父提交的编号。当你有一个由多个父提交构成的归并提交时,这个选项允许你选择哪个父提交作为底子来创建新的提交。默认是 -m 1。
  • --no-commit:天生补丁但不创建提交。
  • --no-edit:不编辑提交信息。
  • --amend:将天生的提交作为前一个提交的修改。
  • --mainline:当归并提交时,指定主基线提交。

“父提交”的解释:
   在版本控制体系(如Git)中,“父提交”(parent commit)指的是当前提交之前的提交。每个提交都有一个或多个父提交,除了初始提交(即项目的第一次提交)。在大多数情况下,一个提交只有一个父提交,这意味着它是直接前一个提交的直接后继。但在归并(merge)操作中,一个提交可以有两个父提交,这两个父提交分别代表归并前两个分支的最新提交。
  比方,假如你有两个分支A和B,它们都从同一个初始提交开始,但随着时间的推移,它们各自独立地举行了一些提交。当你想要将分支B归并到分支A时,你大概会创建一个新的提交,这个新提交将有两个父提交:一个指向分支A的最新提交,另一个指向分支B的最新提交。这个新的归并提交代表了两个分支的归并点,它的两个父提交分别指向归并前两个分支的最新状态。
  
使用方法


  • 打消单个提交
    假如你想打消特定的提交,可以使用以下下令:
    1. git revert <commit>
    复制代码
    这里的 <commit> 是你想要打消的提交的哈希值。
  • 打消归并提交
    假如你要打消的是一个归并提交,你需要使用 -m 选项来指定父提交:
    1. git revert -m 1 <merge-commit>
    复制代码
    这里的 -m 1 表现你想要打消的是归并提交的第一个父提交(通常是主分支的提交)。
  • 打消一系列提交
    假如你想要打消一系列连续的提交,你可以使用范围:
    1. git revert <commit1>..<commit2>
    复制代码
    这将会打消从 <commit1> 到 <commit2> 之间的全部提交。
  • 打消到某个特定的提交
    假如你想要打消从某个特定的提交之后的全部提交,可以使用:
    1. git revert --onto <target-commit> <commit>
    复制代码
    这里的 <target-commit> 是你想要打消到的目标提交,<commit> 是你想要打消的提交。
实例

假设你有一个提交汗青如下:
  1. A---B---C---D
  2. ---E---F
复制代码
其中 A 是初始提交,B、C、D、E 和 F 是后续的提交。

  • 打消提交 E
    1. git revert E
    复制代码
    这将会创建一个新的提交 G,它打消了 E 的更改。
  • 打消从 B 到 D 的全部提交
    1. git revert B..D
    复制代码
    这将会打消 B、C 和 D 的更改,并创建相应的新提交。
  • 打消归并提交 F
    1. git revert -m 1 F
    复制代码
    假如 F 是一个归并提交,这个下令将会打消 F 的第一个父提交的更改。
  • 打消到 C 提交
    1. git revert --onto C B
    复制代码
    这将会打消从 C 到 B 的全部更改,并将当前分支重置到 C 的状态。
使用 git revert 时,Git 会实行自动解决冲突。假如存在无法自动解决的冲突,你需要手动编辑冲突文件,并完成打消过程。
git reset下令的使用方法及实例

git reset 是一个非常强盛的 Git 下令,用于重置当前分支到指定的状态,可以是特定的提交、HEAD 大概是某个标签。这个下令可以用于打消提交、回退到某个特定的版本,大概重新排列提交顺序。下面是 git reset 的几种常见用法和选项。
根本语法

  1. git reset [options] <commit>
复制代码


  • [options] 是可选的参数,用于指定重置的类型。
  • <commit> 是指定的提交的哈希值大概引用。
选项



  • --soft:重置 HEAD 到指定的提交,但保留工作目录和暂存区的状态,如许你可以重新提交。
  • --mixed(默认):重置 HEAD 到指定的提交,并更新暂存区,但保留工作目录不变。
  • --hard:重置 HEAD 到指定的提交,并更新暂存区和工作目录,抛弃全部未提交的更改。
使用方法


  • 回退到指定的提交
    假如你想要将 HEAD 指向某个特定的提交,并且保留工作目录和暂存区的状态,可以使用:
    1. git reset --soft <commit>
    复制代码
    这里的 <commit> 是你想要回退到的提交的哈希值。
  • 重置暂存区
    假如你想要将暂存区的内容重置到 HEAD 的状态,但不改变工作目录,可以使用:
    1. git reset --mixed <commit>
    复制代码
    大概简单地:
    1. git reset <commit>
    复制代码
  • 完全重置
    假如你想要完全重置 HEAD、暂存区和工作目录到某个特定的提交,可以使用:
    1. git reset --hard
    2. <commit>
    复制代码
    这将会丢失全部未提交的更改,以是请审慎使用。
  • 回退到上一个提交
    假如你想要打消最后一次提交,可以使用:
    1. git reset --soft HEAD^
    复制代码
    大概:
    1. git reset --mixed HEAD^
    复制代码
    大概:
    1. git reset --hard
    2. HEAD^
    复制代码
  • 回退到上上个提交
    假如你想要打消最后两次提交,可以使用:
    1. git reset --soft HEAD~2
    复制代码
    大概:
    1. git reset --mixed HEAD~2
    复制代码
    大概:
    1. git reset --hard
    2. HEAD~2
    复制代码
实例

假设你有一个提交汗青如下:
  1. A---B---C---D
复制代码
其中 A 是初始提交,B、C 和 D 是后续的提交。

  • 回退到提交 B 并保留后续提交
    1. git reset --soft C^
    复制代码
    这将会将 HEAD 指向 B,C 和 D 的更改会保留在暂存区和工作目录中。
  • 重置暂存区,但保留工作目录
    1. git reset --mixed C^
    复制代码
    这将会将 HEAD 指向 B,并将暂存区的内容重置为 B 的状态,但工作目录不变。
  • 完全重置到提交 B
    1. git reset --hard
    2. C^
    复制代码
    这将会将 HEAD 指向 B,并将暂存区和工作目录的内容完全重置为 B 的状态,全部 C 和 D 的更改都会丢失。
请记住,git reset --hard
是一个伤害的操作,由于它会丢失全部未提交的更改。在使用这个下令之前,确保你不需要这些更改,大概你已经做好了备份。

git reset和git checkout的区别

git reset 和 git checkout 都是 Git 中用于改变当前工作状态的下令,但它们的用途和效果有很大的不同。
git reset

git reset 主要用于将 HEAD(当前分支的最新提交)移动到指定的提交,并且可以改变索引(暂存区)和工作目录的状态。这个下令通常用于打消提交大概重新排列提交汗青。git reset 可以有三种模式:

  • --soft:只移动 HEAD,不改变索引和工作目录,打消的提交内容会保留在暂存区。
  • --mixed(默认):移动 HEAD,重置索引与 HEAD 一致,但不改变工作目录。
  • --hard:移动 HEAD,重置索引和工作目录,抛弃全部未提交的更改。
git checkout

git checkout 用于切换分支大概检出特定的文件或提交到工作目录。它不改变 HEAD 的位置,也不影响索引,只影响工作目录。git checkout 的一些常见用途包罗:

  • 切换分支:git checkout <branch-name> 切换到指定的分支。
  • 检出文件:git checkout <branch-name> -- <file-path> 将指定分支上的文件检出到当前工作目录。
  • 检出提交:git checkout <commit-hash> 将工作目录替换为指定提交的内容,但不改变 HEAD 或索引。
区别



  • HEAD 的改变:git reset 会改变 HEAD 的位置,而 git checkout 不会。
  • 索引的改变:git reset 可以改变索引的状态,而 git checkout 不会。
  • 工作目录的改变:两者都可以改变工作目录的状态,但方式和目的不同。
  • 用途:git reset 通常用于打消操作大概重写汗青,而 git checkout 用于在不同分支或提交之间切换工作目录的内容。
  • 安全性:git reset --hard
    可以丢失未提交的更改,因此被认为是伤害的,而 git checkout 不会丢失未提交的更改。
总结来说,git reset 是一个更强盛的下令,它可以直接修改 Git 的汗青和索引,而 git checkout 更安全,主要用于在不同的分支或提交之间切换,不改变 HEAD 和索引的状态。在使用这些下令时,需要根据详细的需求和场景来选择符合的下令。

一-5、同步存储库

远程存储库可以位于私人服务器、与您不同的盘算机上,大概通过某些项目管理软件托管,比方 Backlog。
无论您在哪里托管,都需要常常将本地存储库与远程存储库同步,以便与其他团队成员共享更改内容。
您可以使用三个下令同步存储库:git push, git pull
,和 git merge
推送更改

要与他人共享更改,您必须使用 git push下令。这将更新远程存储库并将其与本地存储库同步。

git push下令的使用方法及实例

git push 是 Git 中用于将本地堆栈的更改推送到远程堆栈的下令。这个下令允许你与团队成员共享你的工作,大概更新远程堆栈中的内容。下面是 git push 的使用方法和一些实例。
根本语法

  1. git push [options] [repository] [refspec]
复制代码


  • [options] 是可选的参数,用于指定推送的行为。
  • [repository] 是远程堆栈的名称,通常是 origin,但也可以是其他你添加的远程堆栈的名称。
  • [refspec] 是你想要推送的引用规范,可以是分支名、标签大概其他。

注:
“ ‘git push [options] [repository] [refspec]
’ 中的‘[repository]’通常是 origin ”解释
   指的是,在版本控制体系中,尤其是Git,当你克隆一个堆栈大概添加远程堆栈时,默认情况下,这个远程堆栈会被命名为“origin”。这是一个约定俗成的命名习惯,意味着这个远程堆栈通常是你从哪里获取代码的原始堆栈。固然,你也可以根据需要给远程堆栈起其他的名字,但“origin”是最常用的默认名称。
  
选项



  • --all:推送全部分支。
  • --tags:推送全部标签。
  • --force 或 --delete:强制推送或删除远程分支。
  • --dry-run:模仿推送操作,不现实推送。
  • --prune:在推送的同时,移除远程堆栈中不存在的引用。
  • --set-upstream:设置远程分支为上游,如许以后可以使用 git push 或 git pull
    而不需要指定远程堆栈。

注:
“–prune:在推送的同时,移除远程堆栈中不存在的引用”的解释:
   在Git中,--prune是一个用于与远程堆栈同步时清理无用引用的选项。详细来说:
  

  • --prune:这是一个下令行选项,用于指定在实行操作时同时举行某些清理工作。
  • “在推送的同时”:这里的操作是"推送"(push),即将本地堆栈的更改同步到远程堆栈。
  • “移除远程堆栈中不存在的引用”:这里的"引用"指的是远程堆栈中的分支或标签。假如远程堆栈中某个分支或标签已经被删除,而本地堆栈中仍然有对应的引用,使用--prune选项可以在推送时将这些无用的引用从本地堆栈中移除,保持本地和远程堆栈的一致性。
  综上所述,这句话的意思是:在使用Git推送更改到远程堆栈时,通过添加--prune选项,可以自动清理本地堆栈中那些远程堆栈已经不存在的分支或标签引用,克制它们占用空间并保持堆栈的整洁。
  
使用方法


  • 推送到远程分支
    将本地分支 master 推送到远程堆栈的同名分支:
    1. git push origin master
    复制代码
    假如 master 分支是第一次推送到远程堆栈,你可以使用:
    1. git push -u origin master
    复制代码
    这会设置远程的 master 分支为上游(tracking branch),以后可以直接使用 git push 或 git pull

  • 推送全部分支
    推送本地全部分支到远程堆栈:
    1. git push --all origin
    复制代码
  • 推送标签
    推送本地全部标签到远程堆栈:
    1. git push --tags origin
    复制代码
  • 强制推送
    假如你需要覆盖远程分支的汗青(慎用,由于这会丢失远程分支上其他人的更改):
    1. git push --force origin branch-name
    复制代码
  • 删除远程分支
    删除远程堆栈中的分支:
    1. git push origin --delete branch-name
    复制代码
  • 推送特定提交
    推送从特定提交开始到 HEAD 的更改:
    1. git push origin master
    2. :master:from_commit^..head
    复制代码

注:
这个“master”是已经预界说的存在的分支名吗?
   在Git版本控制体系中,“master”分支并不是预界说的,但它是一个约定俗成的默认分支名。当你初次初始化一个新的Git堆栈时,Git会自动创建一个名为“master”的分支,并将其设置为当前分支。这意味着,假如你没有特殊指定分支名,你的初始提交将会在“master”分支上。
  然而,这个默认分支名是可以被更改的。比方,许多项目现在为了政治精确和包容性,选择将默认分支名从“master”更改为“main”或其他名称。如许的更改可以通过以下Git下令完成:
  1. # 将当前分支重命名为maingit branch -m master main# 假如你的远程堆栈也有master分支,你还需要更新远程堆栈的默认分支git push -u origin main
  2. # 设置main为默认分支git push origin --delete master
复制代码
  请留意,假如你的团队或项目已经习惯了使用“master”作为默认分支名,并且没有更改的计划,那么“master”就是一个存在的分支名。但假如项目决定更改默认分支名,那么“master”就不再是默认的分支名了。
  
实例

假设你有一个本地分支 feature,并且想要推送到远程堆栈的 origin 上的同名分支:
  1. git push origin feature:feature
复制代码
假如你想要推送本地的 feature 分支到远程的 develop 分支:
  1. git push origin feature:develop
复制代码
假如你的本地分支 master 落后于远程分支,并且你想要拉取最新的更改并归并到你的本地分支,你可以先实行:
  1. git pull
  2. origin master
  3. --rebase
复制代码
然后推送本地的更改:
  1. git push origin master
复制代码
请记住,git push 是一个强盛的下令,特殊是当使用 --force 选项时,由于它大概会覆盖远程堆栈上的更改。在使用 --force 或 --delete 选项时一定要小心,确保这是你想要的操作,并且最好与团队成员沟通确认。
拉取更改

每当有人将他们的更改推送到共享的远程存储库时,您的本地存储库就会过期。要将本地存储库与新更新的远程存储库重新同步,只需运行 git pull
下令。
当运行拉取下令时,最新的修订汗青记录会从远程存储库下载并导入到您的本地存储库。

git pull
下令的使用方法及实例


git pull
是 Git 中用于从远程堆栈拉取内容并归并到本地分支的下令。这个下令现实上是 git fetch 和 git merge 的组合,用于获取远程分支的最新更改并归并到当前工作分支。
根本语法

  1. git pull
  2. [options] [repository] [refspec]
复制代码


  • [options] 是可选的参数,用于指定拉取的行为。
  • [repository] 是远程堆栈的名称,通常是 origin,但也可以是其他你添加的远程堆栈的名称。
  • [refspec] 是你想要拉取的引用规范,可以是分支名、标签大概其他。
选项



  • --rebase:在拉取时使用变基(rebase)而不是归并(merge)。
  • --no-ff:禁止快进式归并(fast-forward merge)。
  • --allow-unrelated-histories:允许归并没有共同汗青记录的分支。
  • --dry-run:模仿拉取操作,不现实拉取。
  • --all:拉取全部远程堆栈的更改。
  • --tags:同时拉取远程堆栈的全部标签。
  • --prune:在拉取的同时,移除本地不存在的远程引用。
使用方法


  • 拉取远程分支的更改
    将远程堆栈 origin 的 master 分支的更改拉取到本地同名分支:
    1. git pull
    2. origin master
    复制代码
    假如 master 分支是跟踪远程分支的,你可以省略分支名:
    1. git pull
    复制代码
  • 拉取全部远程分支
    拉取全部远程分支的更改:
    1. git pull
    2. --all origin
    复制代码
  • 拉取并使用变基
    拉取远程分支的更改并使用变基:
    1. git pull
    2. --rebase origin master
    复制代码
  • 拉取标签
    拉取远程堆栈的全部标签:
    1. git pull
    2. --tags origin
    复制代码
  • 拉取特定远程堆栈
    假如你有多个远程堆栈,你可以指定从哪个堆栈拉取:
    1. git pull
    2. upstream master
    复制代码
实例

假设你有一个本地分支 feature,并且想要拉取远程堆栈 origin 上的 master 分支的更改:
  1. git pull
  2. origin master
  3. --rebase
复制代码
假如你想要拉取远程堆栈 origin 的全部分支,并且归并到本地全部对应的分支:
  1. git pull
  2. --all origin
复制代码
假如你的本地分支落后于远程分支,并且你想要更新本地分支:
  1. git pull
  2. origin master
复制代码
假如你想要拉取远程分支的更改,并且解决归并时的冲突:
  1. git pull
  2. origin master
复制代码
在实行 git pull
时,假如碰到冲突,Git 会制止归并过程,并让你手动解决冲突。解决完冲突后,你需要使用 git add 将更改添加到暂存区,然后使用 git commit
提交解决冲突后的代码。
请记住,git pull
默认实行的是归并操作,假如你想要克制归并提交,可以使用 --rebase 选项来拉取远程更改。如许可以保持提交汗青的线性,使得项目汗青更加清晰。
怎样详细实现“一台呆板上拉取远程呆板的 Git 堆栈,并在远程堆栈有改变时获取新的改变”

要在一台呆板上拉取远程呆板的 Git 堆栈,并在远程堆栈有改变时获取新的改变,您可以按照以下步骤操作:
1. 克隆远程堆栈

起首,假如您还没有克隆远程堆栈到本地,可以使用 git clone 下令来克隆远程堆栈。这会创建一个本地副本,并设置一个名为 origin 的远程堆栈引用。
  1. git clone https://远程仓库地址/xxx.git
复制代码
2. 添加远程堆栈(假如尚未添加)

假如您的本地堆栈尚未与远程堆栈关联,您可以使用以下下令添加远程堆栈:
  1. git remote add origin https://远程仓库地址/xxx.git
复制代码
3. 拉取远程堆栈的更改

要拉取远程堆栈的更改并归并到您的本地分支,您可以使用 git pull
下令。假如您想要拉取特定分支的更改,可以指定分支名:
  1. git pull
  2. origin master
复制代码
这个下令会从远程堆栈 origin 的 master 分支拉取最新的更改,并自动与您的本地 master 分支归并。
4. 获取远程堆栈的新改变

当远程堆栈有新的改变时,您可以重复使用 git pull
下令来获取这些改变。这会将远程堆栈的最新更改拉取到您的本地堆栈,并实行与您的本地更改归并。
  1. git pull
  2. origin master
复制代码
5. 处理归并冲突

假如在拉取过程中出现归并冲突,Git 会提示您解决这些冲突。解决冲突后,您需要使用 git add 将更改添加到暂存区,并使用 git commit
提交解决冲突后的代码。
总结

通过上述步骤,您可以在本地呆板上拉取远程呆板的 Git 堆栈,并在远程堆栈有新的改变时,通过 git pull
下令获取这些改变。请确保在实行 git pull
之前,您的工作目录是干净的,大概您已经提交了全部本地更改,以克制不必要的归并冲突。

大概

要设置本地分支与远程分支同步,您可以按照以下步骤操作:
1. 确保本地分支是最新的

起首,您需要确认您的本地分支是基于最新的远程分支创建的。可以使用 git fetch 下令来获取远程分支的最新代码。
  1. git fetch origin
复制代码
2. 切换到本地分支

接下来,您需要切换到您想要同步的本地分支上。可以使用 git checkout 下令来举行切换。
  1. git checkout branch_name
复制代码
3. 归并远程分支

现在,您需要归并远程分支的代码到本地分支。可以使用 git merge 下令来实现。
  1. git merge origin/branch_name
复制代码
4. 推送到远程分支

最后,您需要将本地分支的更新推送到远程分支上。可以使用 git push 下令来举行推送。
  1. git push origin branch_name
复制代码
5. 设置本地分支跟踪远程分支

假如您渴望本地分支自动跟踪远程分支,可以使用 git branch 下令的 --set-upstream-to 选项。
  1. git branch --set-upstream-to=origin/remote_branch_name local_branch_name
复制代码
其中,remote_branch_name 是远程分支的名称,local_branch_name 是本地分支的名称。
总结

通过实行这些下令,您可以将本地分支与远程分支的代码保持同步,确保您的工作和团队的工作是最新的。通过及时同步分支,可以克制分歧和冲突,并保持团队中不同开发者之间的协同工作。

Warning: you are leaving 1 commit behind, not connected to any of your branches报错分析解决

  1. 请为我分析解决以下报错:
  2. [root@gitlab01 gitProject2]# git checkout master
  3. Warning: you are leaving 1 commit behind, not connected to
  4. any of your branches:
  5.   87d0c20 To append file_C.txt some content
  6. If you want to keep them by creating a new branch, this may be a good time
  7. to do so with:
  8. git branch new_branch_name 87d0c20
  9. Switched to branch 'master'
复制代码
这个告诫信息表明,您在实行 git checkout master

下令时,当前工作目录中有尚未被任何分支所包含的提交。详细来说,您有一个提交(哈希值为 87d0c20)不在当前的 master 分支上,这意味着这个提交是“孤立”的,没有被任何分支所跟踪。
原因

这种情况通常发生在以下场景中:

  • 您大概在错误的分支上举行了提交,然后想要切换回 master 分支。
  • 您大概在当前分支上举行了一些提交,但现在想要切换到 master 分支,而这些提交还没有被归并或推送到 master。
解决方案

根据您的详细需求,这里有几种不同的处理方法:
1. 创建新分支

假如您渴望保留这些提交,并且想要创建一个新的分支来跟踪它们,您可以按照告诫信息中的建议操作:
  1. git branch new_branch_name 87d0c20
复制代码
这会创建一个名为 new_branch_name 的新分支,它基于提交 87d0c20。然后,您可以切换到这个新分支:
  1. git checkout new_branch_name
复制代码
2. 归并到 master 分支

假如您渴望将这些提交归并到 master 分支,您可以使用 git merge 下令:
  1. git checkout master
  2. git merge 87d0c20
复制代码
这会将 87d0c20 提交的内容归并到当前的 master 分支。
3. 放弃这些提交

假如您确定这些提交不需要保留,您可以放弃这些更改并完全切换到 master 分支。这将丢失那些孤立的提交:
  1. git checkout master
复制代码
假如您的工作目录中有未提交的更改,您大概需要先使用 git stash 生存这些更改,大概使用 git reset --hard
放弃全部本地更改(包罗未提交的更改):
  1. git reset --hard
复制代码
请留意,git reset --hard
是一个伤害的操作,由于它会丢失全部未提交的更改,以是在实行之前请确保这是您想要的操作。
结论

根据您的情况和需求,您可以选择保留、归并或放弃这些孤立的提交。创建新分支是一种安全的方式,可以确保您不会丢失任何工作,而归并或放弃提交则需要您根据项目的详细需求来决定。
remote: error: refusing to update checked out branch: refs/heads/master报错解决

  1. 为什么本地修改了堆栈之后,想要推到远程堆栈中,为什么会有下面的报错:[root@gitlab02 gitProject2]# git add file_43.txt [root@gitlab02 gitProject2]# git commit
  2. -a[master 6fa88f7] To touch a new file: file_43.txt 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 file_43.txt[root@gitlab02 gitProject2]# git log
  3. commit 6fa88f7db64e1a01ee07b73544be1cc7ce4be073Author: gitlab02 <root@gilab02>Date:   Sun Nov 24 20:40:23 2024 +0800    To touch a new file: file_43.txt        Reason: jljljljlk......commit 66bbb9e17c5c01af91eee8e4888a1870ad25601dAuthor: lotus <lotusqi@foxmail.com>Date:   Sun Nov 24 20:38:36 2024 +0800    To append the file_A.txt some content        Reason:xxjljlj.......commit 87d0c20813eb5a1722acb08da501ab49a3403042Author: lotus <lotusqi@foxmail.com>Date:   Sun Nov 24 20:11:46 2024 +0800    To append file_C.txt some content        Reason: jjljljljlk....commit 4a56542a1bba414939762f0f444fbf35aa5aacb5Author: lotus <lotusqi@foxmail.com>Date:   Sun Nov 24 06:00:48 2024 +0800    在file_B.txt上追加了一些内容        原因是:XXXXXcommit da1ad3a1a13f83b9251e02cd42458f59e0acf698Author: lotus <lotusqi@foxmail.com>Date:   Sun Nov 24 05:34:11 2024 +0800    提交初始化信息,包罗三个文件:file_A.txt file_B.txt file_C.txt[root@gitlab02 gitProject2]# git pushwarning: push.default is unset; its implicit value is changing inGit 2.0 from 'matching' to 'simple'. To squelch this messageand maintain the current behavior after the default changes, use:  git config --global push.default matchingTo squelch this message and adopt the new behavior now, use:  git config --global push.default simpleSee 'git help config' and search for 'push.default' for further information.(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode'current' instead of 'simple' if you sometimes use older versions of Git)root@172.16.1.91's password: Counting objects: 4, done.Compressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 347 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)remote: error: refusing to update checked out branch: refs/heads/masterremote: error: By default, updating the current branch in a non-bare repositoryremote: error: is denied, because it will make the index and work tree inconsistentremote: error: with what you pushed, and will require 'git reset --hard
  4. ' to matchremote: error: the work tree to HEAD.remote: error: remote: error: You can set 'receive.denyCurrentBranch' configuration variable toremote: error: 'ignore' or 'warn' in the remote repository to allow pushing intoremote: error: its current branch; however, this is not recommended unless youremote: error: arranged to update its work tree to match what you pushed in someremote: error: other way.remote: error: remote: error: To squelch this message and still keep the default behaviour, setremote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.To 172.16.1.91:/root/gitProject2/.git ! [remote rejected] master -> master (branch is currently checked out)error: failed to push some refs to '172.16.1.91:/root/gitProject2/.git'
复制代码
根据您提供的错误信息和搜刮效果,出现这个错误的原因是由于您实行将更改推送到远程堆栈的当前检出分支(即远程堆栈的工作目录中的分支),而 Git 默认是不允许如许做的。如许做大概会导致远程堆栈的工作目录与索引不一致,因此 Git 拒绝了这个操作。

这段话的意思是,当你使用Git版本控制体系时,你碰到了一个错误。这个错误发生的原因是由于你实行将代码更改推送(push)到远程堆栈(也就是存放在服务器上的堆栈)的当前检出分支上。检出分支是指你在本地工作时,从远程堆栈中检出(checkout)的分支,它对应远程堆栈中的一个分支。
Git默认情况下不允许你直接推送更改到远程堆栈的当前检出分支,由于如许做大概会导致远程堆栈的工作目录(也就是远程堆栈中的文件)和索引(Git用来跟踪文件更改的数据布局)不一致。这种不一致大概会导致版本控制出现问题,比如丢失提交大概出现归并冲突。
因此,为了保持版本控制的一致性和稳固性,Git拒绝了这种直接推送到远程检出分支的操作。这是Git的一种掩护机制,以防止潜伏的问题发生。假如你需要更新远程堆栈的分支,通常需要先在本地创建一个新的分支,举行更改,然后推送这个新分支到远程堆栈,大概在本地归并远程分支的更改后再推送。

解决方案


  • 修改远程堆栈的设置
    您可以修改远程堆栈的 receive.denyCurrentBranch 设置变量,将其设置为 ignore 或 warn,以允许推送到当前检出的分支。但请留意,这并不保举,除非您有其他方式确保远程堆栈的工作目录与您推送的内容一致。
    要修改这个设置,您需要访问远程堆栈的 .git/config 文件,并添加或修改以下行:
    1. [receive]
    2.     denyCurrentBranch = ignore
    复制代码
    修改后,您应该可以大概正常推送。
  • 切换到其他分支再推送
    假如您不想修改远程堆栈的设置,另一个解决方案是先切换到其他分支,然后再推送您的更改。如许做可以克制直接推送到当前检出的分支。
    比方,假如您当前在 master 分支上,您可以先切换到 develop 分支(或其他任何分支),然后再推送 master 分支的更改:
    1. git checkout develop
    2. git push origin master
    复制代码
  • 使用裸堆栈
    假如您是堆栈的管理员,建议在初始化远程堆栈时使用 git --bare init 而不是 git init
    。使用 git init
    初始化的堆栈包含工作目录,这会导致推送时的问题。
  • 强制推送
    假如您确定要覆盖远程堆栈的更改(请留意,这会丢失远程堆栈上的更改),您可以使用强制推送:
    1. git push -f origin master
    复制代码
    但请留意,强制推送会覆盖远程分支的汗青,这大概会影响其他协作者的工作,因此应该审慎使用。
请根据您的详细情况选择符合的解决方案,并确保在举行这些操作之前,您已经备份了全部重要的数据,以防止数据丢失。

详细一些的解决:

假如您想要克制直接推送到远程堆栈的当前检出分支,并且想要创建并切换到其他分支再举行推送,您可以按照以下步骤操作:
1. 创建新分支

起首,您可以在本地创建一个新的分支。这个新分支将用于存放您的更改,并且可以安全地推送到远程堆栈。
  1. git branch new-branch-name
复制代码
这里的 new-branch-name 是您想要创建的新分支的名称。
2. 切换到新分支

然后,切换到您刚刚创建的新分支:
  1. git checkout new-branch-name
复制代码
3. 添加更改并提交

在新分支上,您可以添加您的更改并举行提交。假如您的更改已经在暂存区(即已经实行了 git add),则可以直接提交:
  1. git commit
  2. -m "Your commit message"
复制代码
4. 推送新分支到远程堆栈

现在,您可以将这个新分支推送到远程堆栈:
  1. git push origin new-branch-name
复制代码
这会将您的新分支推送到远程堆栈,并创建同名的远程分支。
5. 切换回原分支(可选)

假如您需要回到原来的分支(比如 master),可以使用以下下令:
  1. git checkout master
复制代码
6. 归并新分支的更改(可选)

假如您想要将新分支的更改归并回主分支,可以在主分支上实行以下下令:
  1. git checkout master
  2. git merge new-branch-name
复制代码
归并完成后,您可以将归并的效果推送到远程的 master 分支:
  1. git push origin master
复制代码
通过这种方式,您可以克制直接推送到远程堆栈的当前检出分支,同时保持版本控制的一致性和稳固性。这种方法也有助于在团队协作中管理不同的功能或修复,通过创建不同的分支来隔脱离发工作,直到它们准备好被归并到主分支。
验证:

本地呆板:


本地呆板操作后,远程堆栈呆板的操作:


归并更改

假如您的本地存储库已过期,您对远程存储库的推送将被拒绝。

在这种情况下,您可以使用 git merge 下令在推送前整合远程分支的本地副本的最新修改。Git 强制实行此操作以确保其他成员所做的更改可保留在版本汗青记录中。

在归并期间,Git 将实行自动应用汗青更改并将它们与当前分支归并。但是假如有冲突,会报错提示你手动解决。
验证:

已知远程堆栈呆板已做了最新修改

但是本地呆板还是过期的,这时候本地实行push时,远程堆栈将会拒绝:

git merge下令的使用方法及实例??

解决归并冲突??

一-6、管理Git汗青记录??

二、Git协作??

三、怎样使用Git??

四、Git下令和设置??

五、CI/CD先容

六、代码堆栈管理

什么是代码堆栈管理、有什么用

代码堆栈管理(Source Code Management,简称SCM)是一种用于管理源代码的体系,它允许多个开发者协作开发软件项目。代码堆栈管理的主要目的是跟踪文件和目录的变更汗青,支持版本控制,以及促进团队协作。以下是代码堆栈管理的几个关键方面:

  • 版本控制

    • 版本控制是一种记录文件和目录变更汗青的方法。它允许开发者检察文件的旧版本,比力不同版本之间的差别,以及在必要时回退到旧版本。
    • 版本控制体系(VCS)是实现版本控制的工具,如Git、Subversion(SVN)、Mercurial等。

  • 变更跟踪

    • 代码堆栈管理跟踪文件的每一次更改,包罗谁做了更改、何时更改以及为什么更改。这有助于团队成员理解代码的演变过程。

  • 分支管理

    • 分支是代码堆栈的一个副本,允许开发者在不影响主分支的情况下举行实行和开发。这有助于并行开发和快速迭代。

  • 归并和冲突解决

    • 当多个开发者在不同分支上工作时,他们最终需要将更改归并回主分支。代码堆栈管理工具提供了归并功能,并在出现冲突时帮助解决。

  • 协作

    • 代码堆栈管理促进了团队协作,允许多个开发者同时在项目上工作,而不会相互干扰。

  • 备份和规复

    • 代码堆栈管理提供了一种备份代码的方式,以防原始代码丢失或粉碎。它还允许从任何版本规复项目。

  • 审计和合规性

    • 代码堆栈管理记录了全部的更改汗青,这对于审计和确保合规性非常有效。

  • 自动化和集成

    • 代码堆栈可以与持续集成/持续摆设(CI/CD)体系、自动化测试工具和其他开发工具集成,以提高开发效率和质量。

  • 权限和访问控制

    • 代码堆栈管理允许设置不同的权限级别,以控制谁可以检察、编辑或管理代码。

  • 代码审查

    • 代码堆栈管理通常与代码审查工具集成,以促进代码质量的提高和知识共享。

代码堆栈管理对于软件开发至关重要,由于它提高了代码的可维护性、可追溯性和协作性,同时降低了错误和重复工作的风险。通过使用代码堆栈管理工具,团队可以更有效地管理项目,确保代码的质量和项目的顺遂举行。
Gitee、GitHub、GitLab区别

Gitee、GitHub 和 GitLab 是三个常用的代码托管平台,它们之间有一些区别,主要表现在功能、使用场景和定位上。以下是它们的比力:
1. Gitee



  • 定位:Gitee 是一个中国本土的代码托管平台,特殊得当国内开发者使用。
  • 功能

    • 提供 Git 版本控制功能,支持私有和公共堆栈。
    • 集成 CI/CD 功能,支持自动化构建和测试。
    • 支持 Wiki 和问题跟踪(Issues)。
    • 提供项目管理工具,如看板和任务管理。

  • 上风

    • 国内访问速度较快,得当中国用户。
    • 支持中文界面和社区。

2. GitHub



  • 定位:GitHub 是全球最流行的代码托管平台,广泛用于开源项目和个人开发者。
  • 功能

    • 提供丰富的 Git 版本控制功能,支持公共和私有堆栈。
    • 强盛的社区和开源生态,方便开发者分享和合作。
    • 集成 GitHub Actions,支持 CI/CD。
    • 提供项目管理工具,如 Issues、Projects 和 Discussions。

  • 上风

    • 拥有庞大的用户底子和开源社区。
    • 支持多种语言和框架,资源丰富。

3. GitLab



  • 定位:GitLab 是一个综合性的平台,专注于 DevOps 整合,得当从开发运维的全流程管理。
  • 功能

    • 提供完备的 CI/CD 管道,支持自动构建和摆设。
    • 提供内置的容器注册表、监控和安全扫描工具。
    • 支持私有和公共堆栈,具有强盛的权限控制。
    • 包含项目管理功能,如 Issues、Milestones 和 Boards。

  • 上风

    • 自托管选项,允许企业在自己的服务器上运行 GitLab。
    • 强调 DevOps 整合,得当需要全面管理的开发团队。

总结



  • Gitee 更得当国内用户,提供良好的中文支持和访问速度。
  • GitHub 是开源社区的首选,拥有广泛的资源和合作机会。
  • GitLab 强调 DevOps 流程,得当需要持续集成和交付的团队。
选择哪一个平台取决于您的详细需求、团队规模和工作流程。
Gitee使用

Gitee平台官网

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表