当前位置: 首页 > news >正文

git详细教程

git详细教程

  • 区域划分
  • 单分支操作
    • git log
      • 语法
      • 常用的参数及其详解
      • git log 结果
    • git reflog
    • git diff
      • 常用的参数及其详解
    • git reset
      • 常用的参数及其详解
    • git checkout
    • git rm
      • 常用的参数及其详解
    • git remote
      • 常用的参数及其详解
  • 多分支切换代码融合
    • git switch
      • 常用的参数及其详解
    • git branch
      • 常用的参数及其详解
    • git merge
      • 常用的参数及其详解
    • git cherry-pick
      • 常用的参数及其详解
  • 暂存

区域划分

在 Git 中,有三个主要的区域,用于管理文件的状态和版本控制。这三个区域分别是:工作区(Working Directory) 暂存区(Staging Area) 版本库(Repository)

工作区(Working Directory):工作区是你在电脑上实际进行文件编辑和修改的地方。这里包含了项目的所有文件,包括已经被 Git 管理的文件和未被 Git 管理的文件。
暂存区(Staging Area):暂存区是一个中间区域,你可以将工作区中的文件添加到暂存区。在 添加到暂存区(add) 之后,这些文件就处于等待被提交的状态。暂存区的主要功能是允许你对提交做出更细粒度的控制。
版本库(Repository):版本库是 Git 的核心部分,用于存储项目的所有历史记录和元数据。当你 执行提交(commit) 操作后,暂存区中的文件会被复制到版本库中,并生成一次新的提交记录。

简单来说,工作区是你实际进行编辑和修改的地方,暂存区是存放准备提交的文件的地方,而版本库则是存储所有历史记录的地方。
通过这三个区域的结合使用,你可以有效地管理和追踪项目中文件的状态和变化,并进行版本控制。

注: HEAD : 指针,指向的本地版本库的当前版本 HEAD^ 指针的上一个版本

单分支操作

git init #初始化git
git log #查看当前分支历史提交记录
git reflog #查看Git日志,历史提交记录
git clone git@github.com:vvd/vvd.git #克隆指定的远程仓库到本地,在本地创建一个与远程仓库完全一样的副本
git status #查看当前工作区状态
git diff #对比显示未暂存的变更
git checkout -- readme.txt #撤销在工作区中被修改但尚未被添加到暂存区的内容 例如将误删的文件找回 删修改 
git add #将工作区的文件添加到暂存区
git reset HEAD readme.txt #取消暂存的文件 不删修改
git commit #将暂存区的文件添加到版本库中
git reset HEAD^ #撤销上一次提交  不删修改
git checkout HEAD^ #撤销上一次提交  删修改
git pull #将远程版本库的代码拉至本地版本库
git push #将本地版本库代码推送至远程库中
git diff #比较文件差异

git log

git log 是一个用于查看 Git 提交历史记录的命令。它列出了当前分支上的所有提交,并提供有关每个提交的详细信息,如提交作者、提交时间、提交消息等。

语法

git log [<options>] [<revision range>] [--] [<path>...]

以下是命令中各个部分的说明:
<options>:用于控制 git log 命令的输出方式和内容的选项。例如 --oneline--graph 等。
<revision range>:可选参数,用于指定查看哪些提交的范围。例如分支名称、提交哈希值、标签名称等。如果未指定范围,则默认为当前分支的所有提交。
--:可选参数,用于隔离路径参数。如果指定了<path>参数,则 git log 将只显示与指定路径相关的提交。
<path>:可选参数,用于指定与路径相关的提交。只显示与指定路径相关的提交。

常用的参数及其详解

--oneline: 以紧凑的格式显示每个提交的简略信息,只显示提交的哈希值和提交消息。
--pretty=oneline: 同上,区别是显示的提交哈希值为完整信息
--graph: 在提交历史的左侧显示 ASCII 字符以形成图形表示,展示分支和合并的情况。
--author=<author>: 按照作者筛选提交记录,只显示指定作者的提交历史。
--since=<date>: 只显示指定日期以后的提交记录。
--until=<date>: 只显示指定日期之前的提交记录。
--grep=<pattern>: 按照指定的模式匹配提交消息,只显示匹配的提交记录。
--follow: 如果指定的文件在提交过程中被重命名或移动,继续显示它们的历史。
--stat: 显示每个提交的简略统计信息,包括修改的文件和插入/删除的行数。
--patch: 显示每个提交的详细差异信息,包括修改的文件和修改内容的具体行。
--decorate: 在提交历史中显示分支和标签的名称。
--abbrev-commit: 使用较短的提交哈希值显示提交记录。
--pretty=<format>:指定自定义的输出格式。例如:

git log --pretty=format:"%h - %an, %ad : %s"`  
d87f4c2 - name, Mon Sep 18 13:47:21 2023 +0300 : Added new feature: login functionality%H:提交的完整哈希值。
%h:提交的短哈希值。
%an:作者的姓名。
%ae:作者的电子邮件地址。
%ad:作者日期(使用日期格式)。
%s:提交的标题/消息。
%cn:提交者的姓名。
%ce:提交者的电子邮件地址。
%cd:提交日期(使用日期格式)。

git log 结果

git logcommit d87f4c26a6f2a682e8e029d209a5e7b48330c60e (HEAD -> main, origin/main origin/HEAD)
Author: John Smith <john@example.com>
Date:   Mon Sep 18 13:47:21 2023 +0300Added new feature: login functionalitycommit 0b427baffe75d4e24e690a88821982a4f19a5e79 (origin/develop)
Author: Jane Doe <jane@example.com>
Date:   Fri Sep 15 09:22:47 2023 +0300Fixed bug in registration form validationcommit 0b427baffe75d4e24e690a88821982a4f19a5e79
Merge: 346f84a c1bf48e
Author: John Smith <john@example.com>
Date:   Fri Sep 20 10:15:52 2023 +0300Merge branch 'feature/login' into mainResolved conflicts and added login featureCommit c1bf48e fixed bug in navigation menuCommit 346f84a added new feature: search functionality

示例中,每个提交记录都有以下主要部分:
提交哈希值(commit hash): commit d87f4c26a6f2a682e8e029d209a5e7b48330c60e
它是用于唯一标识提交记录的字符串,可以用来在 Git 中引用这个提交。
作者(Author): Author: John Smith john@example.com
显示了提交者的姓名和邮箱地址。
提交日期(Date): Date: Mon Sep 18 13:47:21 2023 +0300
表示提交的时间戳,包括日期和时间信息。本例中的 +0300 表示时间偏移值。
提交消息(Commit message): Added new feature: login functionality
提交者在提交代码时提供的描述信息,用于说明该次提交的目的和内容。
Merge commit信息(Merge commit message): Merge: 346f84a c1bf48e
如果当前提交是一个合并提交(Merge commit),则会显示这个合并提交的信息,包括被合并的分支和父提交。
分支和标签(Branches and tags): (HEAD -> main, origin/main origin/HEAD)
如果提交记录所在的分支或标签存在,则会在括号内的标记提供了分支和远程分支的相关信息。是帮助理解当前所在分支及其对应的远程分支的位置和追踪关系的指示器,
其中
HEAD: 表示当前所在的分支。在这个例子中,HEAD 指向main分支,说明当前所在的分支是 main
main: 表示当前所在的本地分支。这是仓库中的一个分支名称。
origin/main: 表示 main 远程分支的引用。origin 是远程仓库的名称,而 origin/main 则表示该仓库中 main 分支的引用。
origin/HEAD: 表示 origin 远程仓库中当前所在的分支。origin/HEAD 是一个特殊的指针,它指向 origin 仓库中当前活动的分支。

git reflog

git reflog是一个用于查看 Git 引用日志(reference log)的命令。它记录了本地仓库中的引用(如分支、标签等)的更新历史,包括这些引用的创建、更新以及删除操作。
即:记录你的每一次命令!

通过 git reflog,你可以查看最近的引用操作历史,以便进行回退、恢复、分析或修复操作。如果意外地删除了分支、标签等引用,可以使用 git reflog 来找回被删除的引用。

需要注意的是,git reflog 记录的日志信息是针对本地仓库的操作历史,不同的本地仓库之间的 git reflog 是相互独立的。

git diff

git diff 是一个用于比较文件差异的命令。它可以比较不同的 Git 对象之间的差异,如工作区和暂存区之间的差异,或者暂存区和最新提交之间的差异。帮助了解和管理项目中的更改内容。

常用的参数及其详解

git diff:比较 工作区中的文件和暂存区之间的差异。这将显示哪些文件已修改但尚未被添加到暂存区。
git diff --cached:比较暂存区和最新提交之间的差异。这将显示将要被提交的更改内容。
git diff --staged:与 git diff --cached 相同,比较暂存区和最新提交之间的差异。
git diff <commit> <commit>:逐一比较两个提交之间的文件差异,显示每个文件的具体变化。
git diff <commit>..<commit>:比较两个提交之间的提交范围与工作区的差异,以统计信息的方式显示差异情况。
git diff <branch>..<branch>:比较两个分支之间的差异。
git diff --color-words:以单词为单位显示差异,更易读。
git diff --stat:只显示差异的统计信息,包括修改的文件、插入的行和删除的行等。
git diff --ignore-space-change:忽略空格变化,只关注实际的代码更动。
git diff --name-only:只显示发生变更的文件名,而不显示具体的差异内容。

git reset

git reset是一个用于撤销提交和调整当前分支指针的 Git 命令,只能在本地仓库中使用。请记住在使用之前要确保理解其影响,并小心地考虑操作对代码库的影响。不要在与他人共享的分支上使用,以免引起冲突和问题。

取消暂存文件:git reset 或 git reset HEAD 可以取消暂存文件。如果你已经使用 git add 将文件添加到暂存区,但又不想提交它们,可以使用此命令将文件从暂存区移除并保留在工作区。

git reset HEAD readme.txt

撤销提交git reset HEAD~<n> 可以撤销最近的 个提交。 在Git中,用HEAD表示当前版本,也就是最新的提交哈希值,上一个版本就是HEAD^ ,上上一个版本就是HEAD^^ , 当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

git reset HEAD^
git reset HEAD~2

git reset HEAD readme.txtgit reset HEAD~2 是不同的命令,它们的作用和效果有所不同:

  • git reset HEAD readme.txt:这个命令将取消 readme.txt 文件的暂存状态,也就是将文件从暂存区移除,但保留其在工作区中的更改。这个命令通常用于撤销对文件的暂存操作,使文件重新变为未暂存状态。
  • git reset HEAD~2:这个命令将当前分支指针(HEAD)重置到前两个提交之前的位置。它会移动分支指针,丢弃那两个提交以及之后的所有提交。此操作会修改版本历史,要谨慎使用。默认情况下,这个命令将暂存区和工作区重置为重置之前的状态,即丢弃那两次提交带来的修改。

所以,这两个命令的区别在于:

  • git reset HEAD readme.txt 撤销指定文件的暂存状态。
  • git reset HEAD~2 则是将分支指针移动到前两个提交之前的位置,并相应地重置暂存区和工作区,丢弃这两个提交带来的更改。

调整分支指针git reset <commit> 可以将当前分支指针移动到指定的 <commit>,并将之后的提交丢弃。该操作会修改版本历史,慎用。常见的选项有:

常用的参数及其详解

--soft: 仅移动分支指针,保留修改和暂存区的内容。此时可以使用 git commit 重新提交。
--mixed (默认选项): 仅移动分支指针,保留修改和暂存区的内容。此时可以使用 git add 和 git commit 重新处理更改。
--hard: 这个选项是最彻底的选项,它会完全删除指定提交及其之后的所有提交,移动分支指针,重置暂存区和工作区,丢弃修改。使用该选项需要谨慎,因为它会永久删除你的更改,无法恢复。

git reset d87f4c26a6f2a682e8e029d209a5e7b48330c60e

注意: Git必须知道要将指针打到哪个版本上:

  1. git log可以查看提交历史,以便确定要回退到哪个版本。要重返意外回退的版本,
  2. git reflog查看命令历史,以便确定要回到之前意外回退的哪个版本。

git checkout

git checkout 是一个在 Git 中用于切换分支恢复文件检出提交的命令。

恢复文件git checkout -- <file> 撤销在工作区中被修改但尚未被添加到暂存区的内容,将其恢复到最近一次提交的状态。这对于丢弃未保存的更改或修复错误修改很有用。例如,运行 git checkout – myfile.txt 将撤销对 “myfile.txt” 文件的修改。

git checkout -- readme.txt

切换分支git checkout <branch> 可用于切换到指定的分支。将使你的工作区和版本库中的文件变为该分支的最新状态。

git checkout feature #切换到名为 “feature” 的分支

创建并切换分支git checkout -b <branch> 可用于创建一个新的分支并立即切换到该分支。

git checkout -b feature  # 创建并切换到名为 “feature” 的新分支

检出提交git checkout <commit> 可用于将工作区和版本库状态恢复到指定提交的状态。这会导致分离头指针(detached HEAD),在这种模式下,你不会处于任何分支上,所以任何提交将会导致一个匿名分支。使用 git checkout 需要指定提交的哈希值或引用名。例如,git checkout HEAD~2 将使工作区和版本库恢复到倒数第二次提交的状态。

git checkout HEAD~2git reset HEAD~2 在功能上有所不同:

  • git checkout HEAD~2:这个命令会将分支指针移动到前两个提交之前的位置,并切换到该提交状态。在执行完这个命令后,你将进入“分离头指针”状态,即不再位于任何分支上。工作区和暂存区将被重置为该提交的内容。这意味着你将丢失当前分支上未提交的更改,并且切换到的那个提交的内容将成为工作区和暂存区的内容。
  • git reset HEAD~2:这个命令会将分支指针移动到前两个提交之前的位置,并重置暂存区为该位置的内容,但保留工作区的修改。这意味着你可以保留当前分支上未提交的更改,并将它们保留在工作区中。暂存区则被重置为之前的状态,即丢弃了最近的两个提交带来的修改。这个命令通常用于撤销之前的提交或重新组织提交历史。

所以,这两个命令的区别在于:

  • git checkout HEAD~2 会切换到指定提交状态,并重置工作区和暂存区,丢失未提交的更改。
  • git reset HEAD~2 会将分支指针移动到指定提交之前的位置,重置暂存区但保留工作区的修改,保留未提交的更改。

还原某文件的特定版本git checkout <commit> -- <file> ,将<commit>替换为目标版本的提交标识符或引用名,并将 替换为要还原的文件的路径和名称。例如,要将某个文件 myfile.txt 还原到提交标识符为 abcd1234 的版本,可以运行 git checkout abcd1234 – myfile.txt。
注:在切换分支或检出提交时,请确保将当前工作区中的更改保存、添加或提交。否则,可能会丢失未保存的更改。

git rm

git rm 是用于删除文件和目录的 Git 命令。它可以删除已跟踪的文件,并将删除操作记录在 Git 的提交历史中。你还可以使用不同的选项来保留文件或目录在工作区中,或删除目录及其所有内容。

常用的参数及其详解

git rm file.txt:删除一个已跟踪的文件。执行此命令后,Git 会从工作区和暂存区中删除该文件,并将删除操作记录在 Git 的提交历史中。该文件将不再出现在未来的提交中。

git rm --cached file.txt:移除一个已跟踪的文件,但保留在工作区中。执行此命令后,Git 会从暂存区中删除该文件,但会保留在工作区中。这意味着文件将不再被 Git 跟踪,但不会被物理删除。

git rm -r directory/:删除一个目录及其所有内容。执行此命令后,Git 会从工作区和暂存区中删除目录及其所有内容,并将删除操作记录在 Git 的提交历史中。

git rm --cached -r directory/:移除一个已跟踪的目录,但保留在工作区中。执行此命令后,Git 会从暂存区中删除目录及其所有内容,但会保留在工作区中。这意味着目录将不再被 Git 跟踪,但不会被物理删除。

git rm readme.txtrm readme.txt 后跟 git add 的区别如下:

  • git rm readme.txt:这是 Git 提供的删除文件的方法。执行 git rm readme.txt 命令会将文件 “readme.txt” 从 Git 的版本控制中删除,并将删除操作记录在 Git 的提交历史中。
    删除的文件将从工作区和暂存区中移除,不再被 Git 跟踪。
    你可以直接执行 git commit 来提交这个删除操作,将其记录在 Git 的提交历史中。
  • rm readme.txt 后跟 git add:rm readme.txt 是操作系统的命令,它只是简单地从文件系统中删除了 “readme.txt” 文件,而不涉及 Git。
    如果在删除文件后执行 git add readme.txt,Git 会将这个已删除的文件添加到暂存区。这意味着 Git 认为这是一个新的文件,并准备将其包含在下一次提交中。
    在执行完 git add 后,你还需要执行 git commit 来记录这个新文件的添加操作。

综上所述

  • git rm 是 Git 提供的用于删除文件的命令,将删除操作记录在 Git 的提交历史中。
  • rm 是操作系统的命令,只是简单地从文件系统中删除文件。git add 用于将被删除的文件添加到暂存区,
    注:先rm文件,然后使用git rm <file>git add<file>效果是一样的。

git remote

git remote 是一个用于管理远程仓库的 Git 命令。它用于查看、添加、重命名或删除与你的本地仓库相关联的远程仓库。

常用的参数及其详解

git remote:查看当前本地仓库关联的所有远程仓库的名称。
git remote -v:以详细模式查看当前本地仓库关联的所有远程仓库,包括它们的 URL。
git remote add <name> <url>:添加一个新的远程仓库。使用指定的名称和 URL 将一个远程仓库与你的本地仓库关联起来。

git remote add origin git@github.com:vvd/vvd.git

上述将一个名为 “origin” 的远程仓库与你的本地仓库关联起来
git remote add 是一个 Git 命令,用于添加一个新的远程仓库。
origin 是这个远程仓库的名称,它可以是任何合法的字符串,通常用于表示主要的远程仓库。
git@github.com 是远程仓库的地址,这里使用的是 SSH 协议。
vvd/vvd.git 是远程仓库的路径,表示应该关联的远程仓库是 GitHub 上的 vvd/vvd.git 仓库。
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

git remote rename <old-name> <new-name>:将一个已存在的远程仓库重命名。
git remote remove <name> 或 git remote rm <name>:移除本地仓库与指定名称的远程仓库之间的关联。
git remote set-url <name> <new-url>:修改一个远程仓库的 URL。
git remote show <name>:查看指定远程仓库的详细信息,包括它的 URL 和与之相关联的分支。
git remote prune <name>:删除本地已经不存在的远程分支与指定远程仓库的关联。

多分支切换代码融合

git checkout -b dev # 新建 dev 分支并将HEAD指向dev
git checkout dev # HEAD切换到已经创建的dev分支上
git branch # 查看当前分支 当前分支前面会标一个*号
git merge dev # 将dev分支merge 到当前分支上
git branch -d dev # 删除 dev 分支

最新版本的Git提供了新的git switch命令来切换分支,这里的切换分支 checkout 可用 switch 命令替换

git switch

git switch 是 Git 2.23 版本引入的命令,用于在不同的分支或提交之间切换。

常用的参数及其详解

git switch <branch>:切换到指定的分支。
git switch -c <branch> 或 git switch --create <branch>:创建并切换到一个新的分支。并将当前分支的更改合并到新分支
git switch -b <branch>:创建并切换到一个新的分支。
git switch - 或 git switch --:切换回上一次所在的分支。
git switch <commit>:切换到指定的提交,创建一个分离头指针(detached HEAD)状态,这意味着不会自动创建新的分支,而是直接切换到指定提交。
git switch --track <remote-branch>:创建并切换到与指定远程分支关联的本地分支。
git switch --detach:切换到分离头指针(detached HEAD)状态,即不在任何分支上工作。
切换分支或提交时,git switch 会自动更新工作区以反映目标分支或提交的内容。切换分支时会保留当前分支的修改,并将其应用到新分支上(如果可能)。

git checkout -b devgit switch -b devgit switch -c dev 是在 Git 中创建并切换到一个新分支的命令。

  • git checkout -b dev:这是 Git 旧版本中用于创建并切换到新分支的命令。它会创建一个名为 “dev” 的新分支,并将 HEAD(当前活动分支的引用)切换到该新分支。这个命令可以在 Git 的任何版本中使用,包括较新的版本。
  • git switch -b dev:这是在 Git 2.23 版本中引入的新命令,用于创建并切换到新分支。它的作用与 git checkout -b dev 相同,都是创建名为 “dev” 的新分支并切换到该分支。git switch -b dev 是为了替代旧版本的 git checkout -b dev 的方式,使得分支操作的语义更加直观和清晰。
  • git switch -c dev:这也是在 Git 2.23 版本中引入的新命令,用于创建并切换到新分支,与 git switch -b dev 类似。使用 git switch -c dev 时,Git 会将当前分支(如果存在)与新分支的内容合并到工作区,然后创建名为 “dev” 的新分支,并将 HEAD 切换到该分支上。

总结来说:

  • git checkout -b dev 是旧版本中的创建并切换到新分支的命令,适用于任何 Git 版本。
  • git switch -b dev 是新版本中引入的创建并切换到新分支的命令,语义更加清晰和直观。
  • git switch -c dev 是新版本中引入的创建并切换到新分支的命令,它会将当前分支的更改合并到新分支,适用于需要保留当前分支修改的情况。

git branch

git branch 是用于管理 Git 分支的命令。它可以列出、创建、删除和重命名分支,以及查看分支的合并情况和最后一次提交信息。通过这个命令,你可以更轻松地进行分支的管理和操作。

常用的参数及其详解

git branch:列出所有本地分支。在分支前面加一个星号 * 的是当前所在的分支。
git branch <branch>:创建一个新的分支。
git branch -d <branch>:删除指定的分支。要求分支已被合并到其他分支。
git branch -D <branch>:强制删除指定的分支,即使分支尚未合并。
git branch -m <branch>:重命名当前分支。
git branch -a:列出所有本地分支和远程跟踪分支。
git branch -v:显示每个分支的最后一次提交信息。
git branch --merged:列出已经合并到当前分支的分支。
git branch --no-merged:列出尚未合并到当前分支的分支。
git branch -r:查看远程仓库的分支。
git branch --set-upstream-to=origin/<branch-name> <branch-name> :设置本地分支与远程分支的跟踪关系。当在本地分支 dev 上执行 git pull 或 git push 命令时,Git 会自动将本地分支与远程分支进行关联,并根据需要进行代码拉取或推送操作。

git checkout -b devgit branch dev 后 git checkout dev 都是用于创建并切换到一个名为 “dev” 的新分支,但它们的操作顺序和效果略有不同。

  • git checkout -b dev: 这个命令是一个合并了两个步骤的快捷方式。它会创建一个名为 “dev” 的新分支,并切换到该分支。相当于以下两个命令的组合:
    git branch dev
    git checkout dev
    使用快捷方式 git checkout -b dev 可以在一条命令中完成这两个操作。这个命令在创建新分支时,会将当前所在分支的内容完全复制到新分支。

两种方式最终都会在本地仓库中创建一个名为 “dev” 的新分支,并将工作区切换到新分支上。不同之处在于 git checkout -b dev 是一个原子操作,将创建分支和切换分支合并为一条命令,而 git branch dev 和 git checkout dev 是分开执行的。
无论使用哪种方式,最终的结果都是创建了一个名为 “dev” 的新分支,并将工作区切换到该分支上,可以在新分支中进行后续的开发工作。

git merge

git merge 是 Git 的一个命令,用于合并分支的更改。
合并是将不同的分支上的更改结合到一起的过程。git merge 命令允许你在 Git 中执行合并操作。以下是一些常用用法和选项:

常用的参数及其详解

git merge <branch>:将指定分支 <branch> 的更改合并到当前所在的分支。
git merge --no-ff <branch>:使用非快进合并模式将分支 <branch> 的更改合并到当前分支。这将创建一个新的合并提交,即使合并是快进合并也是如此。
git merge --squash <branch>:将分支 <branch> 的更改合并到当前分支,但是将合并提交压缩为单个提交。这样可以避免历史记录中出现过多的合并提交。
git merge --abort:如果合并过程中遇到冲突或问题,可以使用该命令中止合并操作并恢复到合并前的状态。

注:在执行 git merge <branch> 命令时,Git 会尝试将指定分支 <branch> 的更改应用到当前分支。这可能会导致三种情况:

  • 快进合并(Fast-forward merge):如果当前分支的提交历史中没有新增的提交,Git 可以直接将当前分支指向指定分支的最新提交。这种情况下,Git 会简单地将当前分支更新到指定分支的最新状态。
  • 自动合并(Automatic merge):如果当前分支和指定分支之间有共同的祖先,但是有不同的更改,Git 将尝试自动合并这些更改。如果合并过程中没有冲突,Git 会创建一个新的合并提交,并将当前分支更新到合并之后的状态。
  • 冲突合并(Merge conflict):如果当前分支和指定分支之间有不同的更改并且无法自动合并,Git 将产生合并冲突。在这种情况下,你需要手动解决冲突,编辑文件以解决冲突并标记为已解决后,再提交合并结果。

git cherry-pick

git cherry-pick 复制一个特定的提交到当前分支,它会将指定的提交复制到当前所在的分支中,并创建一个新的提交。

注:如果在应用提交的过程中遇到冲突,需要手动解决冲突,并通过 git add 命令将解决后的文件标记为已解决,最后要通过 git cherry-pick --continue 命令完成 cherry-pick 操作。

常用的参数及其详解

git cherry-pick -e--edit:生成新提交前,允许编辑提交信息。
git cherry-pick -n--no-commit:只应用提交的更改,不自动生成新的提交。这样可以将多个提交的更改合并成一个提交。
git cherry-pick -x--signoff:在生成新提交时自动添加「Signed-off-by」行。
git cherry-pick -s--strategy:指定应用差异的合并策略。

暂存

git stash # 暂存当前分支下未提交的内容
git stash list # 查看当前分支下暂存的信息
git stash apply # 恢复暂存的内容 但不删暂存信息
git stash drop # 删除暂存信息
git stash pop # 弹出暂存内容, 即恢复暂存内容后删暂存信息 

相关文章:

git详细教程

git详细教程 区域划分单分支操作git log语法常用的参数及其详解git log 结果 git refloggit diff常用的参数及其详解 git reset常用的参数及其详解 git checkoutgit rm常用的参数及其详解 git remote常用的参数及其详解 多分支切换代码融合git switch常用的参数及其详解 git br…...

[old]TeamDev DotNetBrowser Crack

TeamDev DotNetBrowser将 Chromium Web 浏览器添加到您的 .NET 应用程序中。在 WPF 和 WinForms 中显示现代网页。使用 DOM、JS、网络、打印等。在 Windows x86/x64/ARM64、macOS x64/Apple Silicon、Linux x64/ARM64 上运行&#xff0c;支持.NET Framework 4.5 特征 HTML5、C…...

Zynq-Linux移植学习笔记之63- linux内核崩溃的重启

1、背景介绍 在运行linux应用程序的时候&#xff0c;有时会遇到内核崩溃异常的情况&#xff0c;此时串口中会打印出内核崩溃时的堆栈情况&#xff0c;如下&#xff1a; 当出现这个情况后串口就死了&#xff0c;应用也停了&#xff0c;此时无法进行恢复。 之前写过可通过板子w…...

【精华】ubuntu编译openpose

文章目录 &#xff08;1&#xff09;参考资料&#xff08;2&#xff09;opencv编译&#xff08;3&#xff09;Openpose编译&#xff08;4&#xff09;异常问题 &#xff08;1&#xff09;参考资料 ubuntu20 openpose cuda11.7 cudnn8 opencv4.7.0_Nightmare004的博客-CSDN博客…...

第二届全国高校计算机技能竞赛——Java赛道

第二届全国高校计算机技能竞赛——Java赛道 小赛跳高 签到题 import java.util.*; public class Main{public static void main(String []args) {Scanner sc new Scanner(System.in);double n sc.nextDouble();for(int i 0; i < 4; i) {n n * 0.9;}System.out.printf(&…...

使用Webpack设置TS引用模块,解决Module not found: Error: Can‘t resolve ‘./m1‘ in ...问题

当我们把ts文件作为模块被引用的时候&#xff0c;我们使用Webpack打包代码会报错&#xff1a; Module not found: Error: Cant resolve ./m1 in ... 解决方法&#xff1a; 在webpack.config.js文件中配置如下代码&#xff1a; module.exports {// 设置引用模块resolve: {ext…...

北斗GPS网络时钟系统(子母钟系统)助力智慧教室建设

北斗GPS网络时钟系统&#xff08;子母钟系统&#xff09;助力智慧教室建设 北斗GPS网络时钟系统&#xff08;子母钟系统&#xff09;助力智慧教室建设 HR系列型NTP网络时钟系统是由我公司精心设计、自行研发生产的一套通过网口与母钟连接的子钟&#xff0c;接收母钟发送来的时间…...

蓝牙芯片香薰机智能化方案

RAMSUN提供的蓝牙芯片香薰机智能化方案&#xff0c;支持提供远程提前开启、多档位调节、工作模式切换等产品方案&#xff0c;可通过倒计时进行计时管理&#xff0c;实现免看管香薰&#xff0c;方便节能。 香薰机智能化方案采用的蓝牙芯片MS1656内置有M0内核的32位MCU,具有24MH…...

9.23 校招 实习 内推 面经

绿泡*泡&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 友道智途2024年校招开启&招聘投递Q&A&#xff08;内推&#xff09; 校招 | 友道智途2024年校招开启&招聘投递Q&A&#xff08;内推&#xff09; 2、校招 | ABB机器人…...

ARM 和 AMD 架构的区别

ARM 架构和 AMD 架构是两种不同的计算机处理器架构&#xff0c;它们有以下几个主要区别&#xff1a; 设计出发点&#xff1a; ARM 架构&#xff1a;ARM 架构最初是为嵌入式系统设计的&#xff0c;旨在提供低功耗和高效能的解决方案。它主要应用于移动设备、嵌入式系统和物联网设…...

Logstash、sharding-proxy组件高级配置

记录Logstash数据同步插件在分库分表场景下相关高可用、高并发配置 一、Logstash 1.配置文件控制任务数 vim /etc/logstash/logstash.yml pipeline.workers: 24 pipeline.batch.size: 10000 pipeline.batch.delay: 10 Logstash建议在修改配置项以提高性能的时候&#xff0c;每…...

【Elasticsearch】简单搜索(三)

简介&#xff1a;Elasticsearch&#xff08;ES&#xff09;是一个开源的分布式搜索和分析引擎&#xff0c;用于快速存储、搜索和分析大量数据。它具有高性能、可扩展性和灵活性的特点&#xff0c;被广泛用于构建实时搜索、日志分析、数据可视化等应用。 这篇文章主要介绍检索相…...

【PMP/软考】软件需求的三个主要层次:业务需求、用户需求和功能需求解释及实例解析

简述 当进行需求分析时&#xff0c;通常着重考虑三个主要层次&#xff1a;业务需求、用户需求和功能需求。业务需求关注项目与组织战略目标的一致性&#xff0c;用户需求明确最终用户的期望&#xff0c;而功能需求定义具体的系统功能和特性。这三个层次为项目管理和软件工程提…...

Linux基础知识 总结

Linux基础知识 总结 1、Clion的简单介绍 CLion是以IntelliJ为基础&#xff0c;专为开发C及C所设计的跨平台IDE&#xff0c;可以在Windows、Linux及MacOS使用&#xff0c;这里我是在ubuntu 16.0.4基础上安装。2、下载 Linux版Clion的.tar.gz的压缩包 wget https://download.j…...

网上申请流量卡要不要身份证?填写的信息安全吗?

网上申请流量卡要不要身份证&#xff1f;当然是要的&#xff01; 现在直接从营业厅办理流量卡的很少了&#xff0c;都是直接在网上申请大流量卡&#xff0c;在这里小编提醒大家&#xff0c;在网上申请大流量卡和激活时都是需要提供个人证件的。 申请时提供身份证号是为了运营…...

关于计算机缺失vcruntime140.dll文件的解决方法分享

在计算机系统中&#xff0c;DLL&#xff08;动态链接库&#xff09;是一种特殊的文件类型&#xff0c;它包含了可以被多个程序共享的代码和数据。其中&#xff0c;VCRuntime140.dll是一个由Microsoft Visual C Redistributable package提供的运行时库文件&#xff0c;它为许多M…...

华为乾坤区县教育安全云服务解决方案(2)

本文承接&#xff1a; https://blog.csdn.net/qq_37633855/article/details/133276200?spm1001.2014.3001.5501 重点讲解华为乾坤区县教育安全云服务解决方案的部署流程。 华为乾坤区县教育安全云服务解决方案&#xff08;2&#xff09; 课程地址解决方案部署整体流程组网规划…...

PL/SQL异常抓取

目录 1. -- 什么是异常 2. 如何捕获预定义异常? 3.捕获异常的两个函数 SQLCODE :为错误代码返回一个数值 SQLERRM : 返回字符串的数据,包含了与错误相关的信息. 1. -- 什么是异常 DECLARE V_JOB EMP.JOB%TYPE; BEGIN SELECT JOB INTO V_JOB FROM EMP WHERE JOB CLERK; D…...

Java 18的未来:新特性和编程实践

文章目录 引言新特性预览1. 基于值的类的进一步改进2. 模式匹配的增强3. 新的垃圾回收器4. 扩展的模块系统5. 更强大的异步编程 编程实践示例1&#xff1a;基于值的类示例2&#xff1a;模式匹配的增强示例3&#xff1a;新的垃圾回收器 结论 &#x1f389;欢迎来到Java学习路线专…...

2024快手校招面试真题汇总及其解答(三)

11. 联合索引 联合索引是指包含多个列的索引,与之概念相对的是单列索引,仅包含一个数据列。在大多数情况下,建立多列索引的好处都要多于单列索引。 联合索引的优点 联合索引的优点如下: 提高查询效率:联合索引可以提高查询效率,特别是对于复杂的查询条件。减少磁盘IO:…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...