首页 > 其他分享 >git

git

时间:2024-02-22 22:22:26浏览次数:28  
标签:HEAD git 记录 rebase 提交 main

创建一个新的分支同时切换到新创建的分支

git checkout -b new-branch 或 git switch -c new-branch

合并两个分支(将B合并到A)

git merge B // 操作在A分支(连线模式)
git rebase A // 操作在B分支(复制模式)
/*注意:
当你知道你所需要的提交记录(并且还知道这些提交记录的哈希值)时, 用 cherry-pick 再好不过了
*/
  • merge图示:
    image
  • rebase图示:提交记录C3依然存在(树上那个半透明的节点),而C3'是我们Rebase到main分支上的C3 的副本。
    image

操作符 ^ 与 ~ 符一样,后面也可以跟一个数字。

但是该操作符后面的数字与 ~ 后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个 parent 提交。还记得前面提到过的一个合并提交有两个 parent 提交吧,所以遇到这样的节点时该选择哪条路径就不是很清晰了。

Git 默认选择合并提交的“第一个” parent 提交,在操作符 ^ 后跟一个数字可以改变这一默认行为。


相对引用^(1个) 与~(多个)

git checkout HEAD^ //向上移动 1 个提交记录
git checkout HEAD^^ //向上移动 2 个提交记录, 依次累加
git checkout HEAD~ //向上移动 1 个提交记录
git checkout HEAD~3 //向上移动 3 个提交记录
git branch -f main HEAD~3 // 将 main 分支强制指向 HEAD 的第 3 级 parent 提交
/*
注意: 
git checkout 移动的只能是HEAD指向的位置, 要移动main指向的位置,需要使用git branch与HEAD结合使用
*/

git reset 通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。
git revert 通过新引入一个版本用于后续修改,新的版本与废弃版本的父版本一致,不影响提交的历史记录

  • 本地使用git reset HEAD~1(前一个结点)
    image

  • 远程使用git revert HEAD(当前节点)
    image


git cherry-pick B D// 在父节点上单独拎出若干子节点按照自定义顺序重新排序

  • cherry-pick图示:git cherry-pick C2 C4
    image

如果你不清楚你想要的提交记录的哈希值
交互式 rebase 指的是使用带参数--interactive的rebase 命令,简写为-i
如果你在命令后增加了这个选项,Git 会打开一个U 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。
在实际使用时,所谓的 UI 窗口一般会在文本编辑器-如 Vim - 中打开一个文件。 考虑到课程的初衷,我弄了一个对话框来模拟这些操作。
当rebase UI界面打开时,你能做3件事:
·调整提交记录的顺序(通过鼠标拖放立空成、
·删除你不想要的提交(通过切换
合并提交。 遗憾的是由于某种逻辑允许你把多个提交记录合并成一个
(349,58)
66,
66,
66
关闭就意味着你不想要这个提交记录)
是不支持此功能,因此我不会详细介绍这个操作。简而言之,它
git rebase -i HEAD~3

git commit --amend 是 Git 中的一个命令,它允许你修改(即修正或替换)最近一次提交的内容和/或提交消息。这个命令会将当前暂存区中的所有改动与上一次提交合并,并且可以重新编辑提交信息。这意味着你可以更改代码、添加遗漏的文件,或者纠正提交时输入错误或不够准确的提交消息。
修改某个内容,不提交

标签
git tag v1 C1
git checkout v1
使用git branch bugwork加上一个目标提交记录来创建消失的引用。

git fetch 不会做的事
git fetch并不会改变你本地仓库的状态。它不会更新你的main分支,也不会修改你磁盘上的文件。
理解这一点很重要,因为许多开发人员误以为执行了git fetch 以后,他们本地仓库就与远程仓库同步了。它可能已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件。我们在后面的课程中将会讲解能完成该操作的命

标签:HEAD,git,记录,rebase,提交,main
From: https://www.cnblogs.com/Yami-Wa/p/18028357

相关文章

  • 借用github账号,丰富报酬,丰富报酬!!
    github账号满足这个条件有的话有偿借账号一用,500-8000报酬不等。自己或身边朋友有满足条件的话可以联系我。​在2023年11月15日之前,你至少向一个世界上排名前5000的存储库提交了三次提交。这些提是交中至少有一个发生在2018年或以后。TRANSLATEwithxEnglishAra......
  • 30.基于gitlab的持续集成机制
    一般代码提交流程开发人员从远程中央仓库(例如dev)拉取最新的代码本地创建自己的分支在自己的分支中进行开发在完成一个功能并通过自测后,提交本地版本库将本地版本库推送到远程中央仓库自己的分支在远程中央仓库自己的分支中,提交MergeRequest(合并请求,简称MR)。源......
  • git reset 命令详解 git revert命令详解。
    https://blog.csdn.net/wangdawei_/article/details/124543824gitreset命令详解reset命令介绍参数使用commit还没有pushcommit已经push补救gitrevert命令revert说明举例命令reset命令介绍gitreset命令格式为:gitreset[--soft|--mixed|--hard][<commitid>]在git......
  • visual studio 2022 的git提交大文件的方法
     我用visualstudio2022的git提交代码后推送,出现一个大文件无法推送怎么办? 可以直接用命令推送 项目文件夹右键,选择gitbashhere。   ......
  • Git commit日志基本规范
    Git commit日志基本规范<type>(<scope>): <subject><BLANK LINE><body><BLANK LINE><footer>对格式的说明如下:type代表某次提交的类型,比如是修复一个bug还是增加一个新的feature。所有的type类型如下:feat: 新增featurefix: 修复bugdocs: 仅仅修改了文档,比如READM......
  • 如何使用极狐GitLab 代码推送规则,提高代码质量?
    简述极狐GitLab中的推送规则(PushRules)是一种强制执行代码仓库规范和最佳实践的方法。推送规则解决了以下场景的痛点:第三方需求管理工具集成:比如与Jira集成需要开发者提交代码时的commitmessage中携带JIRA-ID,通过推送规则的正则约束,可以有效的避免野生commit的存在,确保commi......
  • Git合并固定分支的某一部分至当前分支
    在Git中,通常使用gitmerge命令来将一个分支的更改合并到另一个分支。如果你只想合并某个分支的一部分代码,可以使用以下两种方法:1.批量文件合并1.1.创建并切换到一个新的临时分支首先,从要合并的源分支(即要提取代码的分支)中创建并切换到一个新的临时分支。这样可以在该分......
  • SpringBoot使用git-commit-id-maven-plugin打包
    简介git-commit-id-maven-plugin是一个maven插件,用来在打包的时候将git-commit信息打进jar中。这样做的好处是可以将发布的某版本和对应的代码关联起来,方便查阅和线上项目的维护。至于它的作用,用官方说法,这个功能对于大型分布式项目来说是无价的。功能你是否经常遇到这样的......
  • ssts-hospital-web-master项目实战记录二:版本管理-git
    记录时间:2024-02-211.VSCode打开项目(1)文件→打开文件夹,对应的英文为File→OpenFolder(2)打开效果如下 2.VSCode本地项目托管 (1)打开终端:Terminal→NewTerminal(2)生成仓库:git init输入 git命令git init (3)添加到暂存区:git add.输入 git命令git add. (4)提......
  • Git第十三阶段:Rebase -> 调整commit 顺序
     一、缘起:我有一些修改涉及到旧的commit,我想把这种同类的修改放在一起,这就需要我把原来的commit放在"TOP"的位置。图示:这是我原来的commit:C1-C2-C_TARGET-C3-C4我想将它变成:C1-C2-C3-C4-C_TARGET二、进入我的测试gitrepo,我将生成三个测试commit,然后用gitrebase来调......