首页 > 其他分享 >技术笔记(8)git的部分进阶功能

技术笔记(8)git的部分进阶功能

时间:2024-03-12 23:33:22浏览次数:34  
标签:git 进阶 笔记 merge finished feture 提交 分支

技术笔记(8)git的部分进阶功能

  • 学习笔记:

    • 与分支有关的git操作 branch、checkout、merge

      • 查看分支:

        • 查看当前分支信息:git branch
        • 查看远程分支信息:git branch -r
        • 查看所有分支信息,包括本地和远程:git branch -a
      • 分支与分支:

        • 切换到某分支:git checkout
        • 从当前节点新建一个分支:git checkout -b git
        • 删除掉一个分支:git branch -d
        • 将某个分支合并到当前分支:git merge
      • 回到过去或将来某个提交节点:

        • 回撤到某个提交点,文件也回到那个状态:

          git reset --hard

        • 回撤到某个提交点,文件保留被修改后的状态:

          git reset --soft

    • 处理merge conflict

      • 少量已修改的文件的处理方式:

        • 首先 cd <冲突文件所在目录>,例如:cd ~/Documents/Sample
        • vi <冲突文件名>,例如:vi a.txt
        • 输入i,进入insert模式,将想要的最终结果修改好
        • 按esc键退出insert模式,再按:键进入命令模式
        • 输入wq,退出该文件
        • 再次将冲突的文件add、commit之后,即顺利解决merge conflict
      • 大量且难修改可供参考的处理方式:

        • git checkout --ours <路径或文件名> 保留当前分支的内容
        • git checkout --theirs <路径或文件名> 保留对方分支的内容
    • 忽略无须版本管理的文件 .gitignore

      • 例如:在Unity游戏开发中,大部分时候只需要管理项目里的Asset、ProjectSetting、UserSetting文件。而可由Unity自动生成的且占容量极大的Library文件就没有版本管理的必要。

      • 在.gitignore文件中的输入格式:

        • 忽视某个特定文件:memo.txt
        • 忽视特定拓展名:*.avi
        • 作为例外情况,不忽视该文件:!study.avi
        • 忽略特定目录:study_asset/something_good/
        • 忽视根目录下的子目录:/sunofbeatch/
        • 注释行:用两个#扩起来
    • 撤销过去的提交,回滚提交 Revert

      • 实际上是在现在提交一个相反的,与过去的目标提交相抵消,并非直接让过去的提交消失
      • git revert
      • git revert HEAD~3 逆转当前分支当前节点往回数的第三次提交
      • git revert ^... 把这两次提交之间的所有提交以此逐个逆转
      • git revert -n ^... 用一次提交逆转这些提交
      • revert中发生冲突,与merge中冲突的处理方法一致
    • 提交历史合并为一条直线,变基 Rebase

      • rebase的逻辑是把所有历史提交都重新生成新的提交,所以提交id会改变

      • 但改变提交历史有一定的风险,最好不要把远程仓库已有的分支进行rebase,否则用普通的方法就无法成功推送了

      • 引用知乎用户“一个小号”的举例:

        • 原链接:https://www.zhihu.com/question/36509119/answer/1990894567

          一个好的 commits history,应该是这样的:

          *   e2e6451 (HEAD -> master) feture-c finished
          |\
          | * 516fc18 C.2
          | * 09112f5 C.1
          |/
          *   c6667ab feture-a finished
          |\
          | * e64c4b6 A.2
          | * 6058323 A.1
          |/
          *   2b24281 feture-b finished
          |\
          | * c354401 B.4
          | * 4bfefb8 B.3
          | * eb13f72 B.2
          | * c2c62b9 B.1
          |/
          * bbbba82 init
          

          而不是这样的:

          *   9f0c13b (HEAD -> master) feture-c finished
          |\
          | * 55be61c C.2
          | *   e18b5c5 merge master
          | |\
          | |/
          |/|
          * |   ee549c2 feture-a finished
          |\ \
          | * | 51f2126 A.3
          | * |   72118e2 merge master
          | |\ \
          | |/ /
          |/| |
          * | |   6cb16a0 feture-b finished
          |\ \ \
          | * | | 7b27b77 B.3
          | * | | 3aac8a2 B.2
          | * | | 2259a21 B.1
          |/ / /
          | * | 785fab7 A.2
          | * | 2b2b664 A.1
          |/ /
          | * bf9e77f C.1
          |/
          * 188abf9 init
          

          也不是这样的:

          * b8902ed (HEAD -> master) C.2
          * a4d4e33 C.1
          * 7e63b80 A.3
          * 760224c A.2
          * 84b2500 A.1
          * cb4c4cb B.3
          * 2ea8f0d B.2
          * df97f39 B.1
          * 838f514 init
          
      • 但说实话,什么时候用,怎么用,还是有一定疑惑

      • 另记录一个可供参考的git分支模型:

    • 合并多个提交,交互式变基 Squash

      • 把几个相连的提交合并成一个新的提交,冲突解决与merge类似
      • 同样的,由于涉及更改提交历史,慎重啊我的朋友
      • 还有不能对已经在远程仓库中存在的提交进行交互式变基
    • 拉取的具体实现 Pull

      • 实际上先从远程仓库的远程分支fetch到本地仓库里看不到的远程跟踪分支,再merge到我们能看到的本地分支。
      • 有个中介
      • 而只fetch的话,就是只获取远程分支的变化,先不急着改到本地分支
    • 暂存未提交的内容,贮藏 Stash

      • 当前功能做到一半,但还不适合提交。此时需要先去做另一部分的功能,或者merge另一个提交。此时就可以先把这部分没做完的贮藏起来,先搞定别的,再回来继续慢慢做。
    • 从其他分支上获取特定提交,遴选 cherry-pick

      • 即把另一个分支的某次提交,直接拿来吧你!
    • detached HEAD状态

      • 指不属于任何分支的无从属状态,一般发生于reset到过去的节点后,又做了一部分修改并提交,导致脱离所有的现有分支。
      • 在此状态下直接切换到某一分支的话,本次提交会直接丢失。
      • 解决:新建一个分支去接管

标签:git,进阶,笔记,merge,finished,feture,提交,分支
From: https://www.cnblogs.com/bqza000/p/18069630

相关文章

  • 做题笔记2024.03
    2024.03.12#1CapitalismCF1450E奇环显然无解有解就直接差分约束就行https://www.luogu.com.cn/record/150592177[2024.03.12#2LEGOndaryGrandmasterCF1615F]不是自己想的/kk看了题解,感觉都说这个转换是显然的,还是太菜考虑将所有偶数位的数先翻转一次,这样原来的操作......
  • datawhale-动手学数据分析task1笔记
    动手学数据分析task1第一节:数据载入及初步观察载入数据数据集下载导入numpy库和pandas库。importnumpyasnpimportpandasaspd载入数据。相对路径载入数据。df=pd.read_csv('train.csv')绝对路径载入数据。path=os.path.abspath('train.csv')df......
  • 东华OJ 进阶题30 盾神与砝码称重
    问题描述:有一天,他在宿舍里无意中发现了一个天平!这个天平很奇怪,有n个完好的砝码,但是没有游码。盾神为他的发现兴奋不已!于是他准备去称一称自己的东西。他准备好了m种物品去称。神奇的是,盾神一早就知道这m种物品的重量,他现在是想看看这个天平能不能称出这些物品出来。但是......
  • git 版本回退
    git版本回退1.方法12.方法22.1补充2.2revert多次版本3.两个区别1.方法1原有的代码分支与代码加一行代码做一次改变回退到指定版本gitreset--hard2a404ae22.方法2新加一行代码gitrevrt测试,它的commit-id:35c416da,然后我执行gitrevert35c416da......
  • ruoyi框架学习笔记(二)
    三、通知公告发布流程搭建3.1功能策划在第一篇学习笔记中已经将“通知公告”拆分为两个部分,分别为全部公告:主要是实现查看所有用户已经走完发布流程且是发布状态的公告;我的公告:实现当前用户新建公告、发起审批流程并发布公告的编辑位置;在笔记一中已经实现上述两个部分的前......
  • C语言学习笔记day3
    1.逗号运算符           逗号运算符连接的表达式,从左至右依次执行,最后一个逗号后面的表达式结果作为   整体的逗号表达式的结果2.sizeof运算符        sizeof(数据类型/变量名)        获得一个数据类型或者变量在内存中所占的......
  • 回文自动机学习笔记
    回文自动机学习笔记定义所谓自动机,是一个对信号序列进行判定的数学模型。即对一连串有顺序的信号关于某一个判定给出或真或假的判定。所谓回文自动机,就是对一个字符串进行其是否为回文串的判定。也就是存储字符串\(s\)中的所有的回文串。与\(\text{SA}\)不同的是,\(\text{SA......
  • 计算机三级网络技术之IP地址规划技术与路由设计技术基础 笔记
    IP地址规划技术NAT的工作原理:当内部网络的一个专用地址需要访问外网时,NAT将其转换为Internet上唯一的外部公用地址+端口号。而当外部网络响应这个访问请求时只能是响应给外部公用IP地址+端口号,此时NAT技术再将外部公用地址+端口号转换为内部地址+端口号以成功访问。IPv6......
  • ansible-playbook剧本 进阶
    剧本的高级特性剧本高级特性是完全遵循python的循环结构来的编程语言特有的逻辑控制语句变量循环等等你的剧本,可以考虑用高级特性,也可以不用高级特性是为了简化剧本比如,创建10个系统的用户ansiblebakcup-muser-a"name=cc01"ansiblebakcup-muser-a"name=cc......
  • Python入门学习笔记(1)Python&VS code下载与配置
    去年夏天,笔者拿到EricMatthes所著的蟒蛇书,一番学习下,为其细致与条理所触动。作为曾经学过C++的NOIP退役选手,笔者深知一个好的语言基础对于后续学习的巨大作用。费曼提到,把新知识、复杂概念解释给完全不懂的人听,是最好的提升知识质量、把知识点融入自己的知识体系的方法。因此......