• git-使用命令笔记


    场景1:
        当前在分支A进行代码开发,但是突然因某个问题,需要切换到B分支进行问题修改,但是此时直接切换到B分支,会报错abort中断信息,因为本地有未commit的的代码修改,必须要commit之后在进行切换。如果直接进行commit临时提交了在切换分支,那么会多一条无效commit记录,如果想通过提交记录来排查问题,那就有点困难了,压根不知道提的代码是否有用了。如果没有对应黑历史记录,那么有时候可以很快的通过提交记录来定位对应的问题.有个好的命令解决对应的黑历史记录问题,如下stash命令:(当然可以强制切换)
    1> stash命令集锦

    1. # 保存当前未commit的代码
    2. git stash
    3. # 保存当前未commit的代码并添加备注
    4. git stash save "备注的内容"
    5. # 列出stash的所有记录
    6. git stash list
    7. # 删除stash的所有记录
    8. git stash clear
    9. # 应用最近一次的stash
    10. git stash apply
    11. # 应用最近一次的stash,随后删除该记录
    12. git stash pop
    13. # 删除最近的一次stash
    14. git stash drop


      当如果存在多条stash记录时,可以使用如下命令,指定要使用某个记录

    1. [root@localhsot my-jwt ]# git stash list
    2. stash@{0}: On jwt_1.1: 增加性别sex字段
    3. stash@{1}: WIP on jwt_1.1: 06369cd 增加address字段


    使用第2条记录

    git stash apply stash@{1}


    2>使用举例:

    1. [root@localhsot my-jwt ]# git checkout master
    2. error: Your local changes to the following files would be overwritten by checkout:
    3.         model/user.go
    4. Please commit your changes or stash them before you switch branches.
    5. Aborting
    6. [root@localhsot my-jwt ]# git stash 
    7. [root@localhsot my-jwt ]# git checkout master


    场景2:当不消息进行了一次commit,之后发现某个东西没有修改,又要重新修改,add之后再重新commit,那么提交记录有多了,另外,有时候可能将不同的问题,当作一个记录直接提交了,那么在想通过commit排查问题,就变得比较困难了。这种不规范的提交无形中增加后续排查问题的难度.怎么处理呢?通过reset命令可以很好的解决该问题。如下所示:
    1> reset命令使用

    1. # // 恢复最近一次的commit记录
    2. git reset --soft HEAD^


    2>使用举例
    例如,最近一次commit记录为:增加sex字段

    1. [root@local my-jwt]# git log  
    2. commit 7c41e10cd0a0e5c3240aa26f11a687e7782df9fb (HEAD -> jwt_1.1)
    3. Author: cloudlx
    4. Date:   Mon Aug 1 17:36:45 2022 +0800
    5.     增加sex字段
    6.     
    7. commit 06369cd2176f3a22482dbb3a5bb5d1b335067361 (origin/jwt_1.2, origin/jwt_1.1, local_jwt, jwt_1.2)
    8. Author: cloudlx
    9. Date:   Mon Aug 1 17:01:38 2022 +0800
    10.     增加address字段


    3>撤销最近这次的commit

    1. git reset --soft HEAD^
    2. [root@local my-jwt]# git reset --soft HEAD^
    3. [root@local my-jwt]# git log               
    4. commit 06369cd2176f3a22482dbb3a5bb5d1b335067331 (HEAD -> jwt_1.1, origin/jwt_1.2, origin/jwt_1.1, local_jwt, jwt_1.2)
    5. Author: cloudlx
    6. Date:   Mon Aug 1 17:01:38 2022 +0800
    7.     增加address字段
    8. commit 1d1d1253b329d39aefef5af792faaa779e8d8a14 (origin/master, master)
    9. Author: cloudlx
    10. Date:   Wed Jan 19 17:25:08 2022 +0800
    11.     add model


    如上2中的commit经过3中的处理已经撤销了最近一次的commit,可以重新编辑处理之后在进行commit.注:以上的撤销,主要是针对commit之后,尚未push的处理。如果已经push,如上命令仍旧生效,但是在此push时,因为远端分支跟本地分支已经有差异了,需要在push时添加参数-f,进行强制push.来覆盖远端已经存在的代码
    4> --soft也可以指定commit号进行撤销,该操作会将该commit一直到最近的一次commit全部撤销,而非仅仅是撤销指定的commit号。
    例如:指定倒数第二条commit进行撤销

    1. [root@local my-jwt]# git log
    2. commit 292167481d34690a47bb459a10c6532362e18cf4 (HEAD -> jwt_1.1)
    3. Author: cloudlx
    4. Date:   Mon Aug 1 17:49:05 2022 +0800
    5.     增加sex字段
    6. commit 06369cd2176f3a22482dbb3a5bb5d1b335067361 (origin/jwt_1.2, origin/jwt_1.1, local_jwt, jwt_1.2)
    7. Author: cloudlx
    8. Date:   Mon Aug 1 17:01:38 2022 +0800
    9.     增加address字段
    10. commit 1d1d1253b329d39aefef5af792faaa779e8d8a14 (origin/master, master)
    11. Author: cloudlx
    12. Date:   Wed Jan 19 17:25:08 2022 +0800


    撤销commit号:06369cd2176f3a22482dbb3a5bb5d1b335067361, 增加address字段。

    1. [root@local my-jwt]#  git log
    2. commit 06369cd2176f3a22482dbb3a5bb5d1b335067361 (HEAD -> jwt_1.1, origin/jwt_1.2, origin/jwt_1.1, local_jwt, jwt_1.2)
    3. Author: cloudlx
    4. Date:   Mon Aug 1 17:01:38 2022 +0800
    5.     增加address字段
    6. commit 1d1d1253b329d39aefef5af792faaa779e8d8a14 (origin/master, master)
    7. Author: cloudlx
    8. commit 1d1d1253b329d39aefef5af792faaa779e8d8a14 (origin/master, master)
    9. Author: cloudlx
    10. Date:   Wed Jan 19 17:25:08 2022 +0800
    11.     add model


    如上例表中,发现,当前的HEAD到了 增加address字段记录,最近的增加sex字段的修改内容都回到了暂存区.

    场景3:有时候版本的一些优化需求开发到一半,可能其中某一个开发完的需求要临时上,或者某些原因导致待开发的需求卡住了已开发完成的需求上线。这时候就需要把 commit 抽出来,单独处理。再者有时候开发分支中的代码记录被污染了,导致开发分支合到线上分支有问题,这时就需要拉一条干净的开发分支,再从旧的开发分支中,把 commit 复制到新分支。
    1>cherry-pick命令使用将源分支的某个提交复制到当前分支
    源分支

    1. [root@local my-jwt]#  git log
    2. commit 06369cd2176f3a22482dbb3a5bb5d1b335067361 (HEAD -> local_jwt, origin/jwt_1.2, origin/jwt_1.1, jwt_1.2, jwt_1.1)
    3. Author: cloudlx
    4. Date:   Mon Aug 1 17:01:38 2022 +0800
    5.     增加address字段


    目标分支

    1. [root@local my-jwt]#  git log   
    2. commit 1d1d1253b329d39aefef5af792faaa779e8d8a14 (HEAD -> master, origin/master, local_jwt)
    3. Author: cloudlx
    4. Date:   Wed Jan 19 17:25:08 2022 +0800
    5.     add model
    6. commit 02b755f97531a7e5cb8e7f3824f8812e3edbc6f4
    7. Author: cloudlx
    8. Date:   Wed Jan 19 10:16:55 2022 +0800
    9.     add file


    chery-pick之后,目标分支

    1. [root@local my-jwt]# git cherry-pick 06369cd2176f3a22482dbb3a5bb5d1b335067361
    2. [master fc2c5d3] 增加address字段
    3.  Date: Mon Aug 1 17:01:38 2022 +0800
    4.  1 file changed, 1 insertion(+)
    5. [root@local my-jwt]#  git log
    6. commit fc2c5d37d3923c8784f30ba0e5127c027191b13e (HEAD -> master)
    7. Author: cloudlx
    8. Date:   Mon Aug 1 17:01:38 2022 +0800
    9.     增加address字段


     *** 合并后,commit号是不一样的,但是提交的时间记录信息都是一样的2>commit号可以一次跟多个,或者使用区间方式

    1. git cherry-pick commit1 commit2  ...
    2. // 区间
    3. git cherry-pick commit1^..commitn   // 直接拷贝1..n之间的所有提交记录{都是commitHash码号}


    注:在进行多个commit复制是,可能产生冲突,如果产生冲突,解决冲突之后,再提交到暂存区,之后再通过

    git cherry-pick --continue // 继续后面的合并.

    另外,有时候,可能需要终止复制,通过如下命令,回到复制前的状态,表示什么操作都没发生过

    git cherry-pick --abort

    复制了一部分,后面的不想复制了,可以直接退出该操作,本地分支保留已经  `cherry-pick`  成功的 commit,后面未改变,直接退出.

    git cherry-pick --quit

    场景4:因疏忽再其他人分支提交了代码还推到远程分支,这时因为分支只有你的最新提交,就想着使用 reset --hard,结果紧张不小心记错了 commitHash,reset 过头,把别人的 commit 搞没了。没办法,reset --hard 是强制回退的,找不到 commitHash 了
    1>reflog命令 

     

    分支记录如上,想要 reset 到 b。

    误操作 reset 过头,b 没了,最新的只剩下 a。

     

    再次 reset 回去,就会发现 b 回来了。 场景5,:开发上线的功能有问题,需要马上撤回,否则会影响到系统使用。这时可能会想到用 reset 回退,但是最新的提交还有其他同事的代码,用 reset 会把这部分代码也撤回了。该种情况如果仍旧使用 reset,那么将别人的提交的代码也还原的问题。如下使用合理的处理方式:
    现状:
        

    1. commit 45d8ce465eb054db5d97d03282bae7489f4c029f
    2. Author: cl_2
    3. Date:   Tue Aug 2 11:14:45 2022 +0800
    4.     bbb
    5. commit 20e67099a898a3e246dcd48eb6730e796ec8bc91
    6. Author: cl_0
    7. Date:   Tue Aug 2 10:59:20 2022 +0800
    8.     add wwwwwww字段信息


    现在要撤销 wwwwwww字段信息的提交记录,操作如下:

    git revert 20e67099a898a3e246dcd48eb6730e796ec8bc91

    会进入到一个可以编辑的界面,如下:

    1. Revert  "add XXXX"
    2. This is reverts commit 20e67099a898a3e246dcd48eb6730e796ec8bc91
    3. # Please enter the commit message for your changes .Lines starting
    4. # Changes to be committed
    5. #       modified   cli.go
    6. #
    7. :wq

    进行wq保存退出之后,会打印出撤销的修改信息:

    1. [root@local]# git revert 20e67099a898a3e246dcd48eb6730e796ec8bc91
    2. [jwt_1.2 1jsfk3] Revert "撤销 add XXXX"
    3.  1 file changed, 1 deletion(-)
    4. [root@local]# git log
    5. commit 20e67099a898a3e246dcd48eb6730e796ec8bc91
    6. Author: cl_0
    7. Date:   Tue Aug 2 11:59:20 2022 +0800
    8.     Revert "撤销 add wwwwwww字段信息
    9. commit 45d8ce465eb054db5d97d03282bae7489f4c029f
    10. Author: cl_2
    11. Date:   Tue Aug 2 11:14:45 2022 +0800
    12.     bbb
    13. commit 20e67099a898a3e246dcd48eb6730e796ec8bc91
    14. Author: cl_0
    15. Date:   Tue Aug 2 10:59:20 2022 +0800
    16.     add wwwwwww字段信息

    如上图,新成一条commit记录,并且修改文件撤销。旧的消息记录仍记也会存在。
        

  • 相关阅读:
    [LeetCode][LCR169]招式拆解 II——巧妙利用字母的固定顺序实现查找复杂度为O(1)的哈希表
    【Linux】(五)GateWay远程开发方式-实验室服务器使用GateWay远程开发
    spark
    Linux-基础知识(黑马学习笔记)
    达标进度条
    YB4058是一款经济高效、完全集成的高输入电压单电池锂离子电池充电器
    C++可以这么学------>类和对象(中)
    【vue五分钟】五分钟让你了解vue组件
    用好快捷键事半功倍!如何在Excel中快速取消隐藏的行
    C语言文件操作
  • 原文地址:https://blog.csdn.net/qq_26105397/article/details/126111539