• git基本使用手册


    init

    background

    Today, I will introduce how to use Git. Git is a tool that we can use it record project logs. When we build a big project, there have many questions in development. Using Git can do a better job f in a team. We need to control source quality with Git in the pearl life project.

    Content

    怎么理解git呢?

    在用git的时候, 不知道git原理的话, 就不明白那么多git命令是在做啥? 哪些是重点? 每个命令操作了哪里。 因此有必要了解一下git。

    content

    git本身是作为一个版本管理工具, 这里其实只需要明白下面这张图就行。 我们改动的时候是在workspace, add 到了暂存区, commit到本地仓库, push到远程, pull 到工作区workspace, 此外我们需要理解git log的里面的内容, 远程分支的提交是有origin标识的, 本地的commit 和远程的commit要区分开。 因此可以说明白log和 三个区(工作区, 本地仓库, 远程仓库), 差不多就明白git怎么用了。

    在这里插入图片描述

    杂项理解

    git clone git@hhhh.git 就是使用ssh命令, 去hhh域名下拉取某个路径的代码, 人家后面也是一个服务器。
    本地和远程合并区别是啥?

    • 本地就是merger rebase 本地master,然后push形成一个pull request功能。 远程会员功能可以直接用远程的dev分支合并到远程的master, 不然正常都是本地直接操作。 基本没有关系, 远程就是一个存储地方。
      CI/CD是什么?
    • CI是持续集成,CD是持续部署。 就是自动化的将你的代码集成检查,CD是自动会给你部署。 github的action中就有这些,主要就是workflow做一些东西, 例如检查代码风格, 还有自动部署环境这些。

    git中重点难点的命令有哪些?

    用git的时候, 面对上百个命令哪些是重点命令?有些相似的命令怎么区分呢?

    content
    rebase, revert, pull, fetch, merge, reset, cherry pick的使用场景?

    rebase一般是 将远程的依赖合并进来测试, 同时可以保持无记录。
    revert是代码有问题, 回滚, 同时保持了记录。
    fetch 是拿到分支信息, 可以用来reset或者merger等, 能同步到远程的信息。
    pull是直接拉取最新的代码, 让本地的代码往后移。 pull可以merger和rebase的, 一般我都不用, 自己分支只有自己提交一般都是最新的。 拉master的时候直接rebase变基。因为master不会变commit的。
    cherry pick 将自己的一个commit级别改动同步到另外一个分支, 非常方便。
    rebase -i是改变自己的基准, 可以用来当做拉取最新代码, 或者别人的代码, 来测试。
    merge是将自己的修改合并进上线分支,是不按时间线而是按操作的, 想要合入要保留记录, 一般合入master都用merge。 - merge --sqush会将合并进来的代码超出自己rebase部分搞成一个提交, 合入到master的时候会经常用到。

    workflow

    常用的操作指令

    用git的时候, 面对上百个命令哪些是重点命令?有些相似的命令怎么区分呢?

    content
     basic commit;
     git add . 
     git commit -m "XXX"
     git push origin master:tianyi_dev   # if you not using git ssh, push will need password and username.
    
    4.   想打补丁
     git add . 
    > git commit --ammend
    > git push -f  origin tianyi_dev
    
    5. 想重置本地代码
    git fetch --all 
    git reset --hard
    git reset --mixed 撤回记录, 但是代码在workspace区还。
    git reset --soft   撤回log, 修改在index区,直接commit就行。 
    6. 想让本地修改依赖的提交是最新的 (一般是测试用)
    git rebase -i  id
    
    7.  提交自己的某个改动到另外一个测试分支
    git cherry pick  你想要加进来的改动commitid
    
    8  提交错误代码到线上分支想要回退
    git revert  id1
    git revert id2
    gt push  or merger
    
    9.  看diff
    git diff commitid commitid
    git status 看工作区的修改diff
    
    
    10   各种提交和分支规范
    分支有自己信息有日期有功能
    commit中告诉改动了啥, fix是修改功能, demand是需求, test或者tmp是需求测试, tag是一些重要版本。  此外要带自己的改动介绍文档。 
    
    11. 有冲突怎么办
    修改
    git add . & commit & push
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    不常用但是也重要的命令有哪些?

    用git的时候, 有些指令虽然不常用, 但是还是会偶尔遇到的,遇到了会花比较多的时间去查询的, 这种就记录一下哈。

    content
    # check diff  只展示某个目录的区别。
    
    git diff ada9b57 my_branchname my_changed_directory/ 
    
    
    
    # make you local tack origin branch.
    git branch -u origin/dev
    
    
    # make your push -f orgin go back
    git reflog# check commit id
    git  reset commit_id # back this commit
    
    
    # not commit a file 
    if in work space:
    	git checkout filename
    if in stash:
    	git reset HEAD filename.
    
    
    
    # MakeMasterIntoSelfBranch()
    
    git commit -m “fix bug”
    git checkout master
    git pull  # or reset
    git checkout dev
    git merge master # slove confliect.
    git add Test.java
    git commit -m “merge master”
    git push origin dev
    
    
    
    # 配置邮箱等
    
    // 1. git clone your ssh project;
      if you clone master : 
      	git clone git@github.com:iambest2002/pearl_life.git
      esle if you clone other branch 
      	git clone -b tianyi_dev  git@github.com:iambest2002/pearl_life.git
    > git config --global user.name "tianyi"
    > git config --global user.email "10086@qq.com"
    
    # 配置远程仓库
        if current is ssh:
            git remote remove origin ;
            git remote add origin http:wwww;
            git remove --v;
            git  fetch; # get remote log into self.
            # ref 1. git push -u和git branch --set-upstream-to指令之间的区别 https://juejin.cn/post/6844904005773213704
            git push --set-upstream origin liupeng_ut_work_flow2; # set local branch connect with origin. make push is ok. 
    
    
    # 删除自己git中子git的信息 , 不然传上去就是一个打不开的文件。
    rm -rf path/.git
    git rm --cached path/
    git add . & commit & push 
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    Sometips()

    1. pelease pay attention for git commit rule. not using some commit like “add code”.
    2. 由于我因为vscode编辑每次和终端会有冲突, 导致我一个项目多次管理的能力很差, 没有git status的习惯, 我习惯了创建新的分支,但是要注意分支尽量还是和远程一样,不要dev对应master。

    reference()

    1. https://backlog.com/git-tutorial/cn/stepup/stepup1_4.html
    2. 零声学院课程
    3. 施磊老师课程

    version log

    1. 之前撰写了很多关于git相关的文档: https://editor.csdn.net/md/?articleId=103460445 | https://editor.csdn.net/md/?articleId=127709694 | https://editor.csdn.net/md/?articleId=126151184
    2. 整合之前的内容全部组装到一起,现在感觉能用了。2022年11月12日18:51:45
    3. https://www.cnblogs.com/chenjunjie12321/p/6876220.html
    4. 2023年5月1日16:32:15 整理了一次高级用法,rebase和merge基本熟练。 但是对于多次提交中修改一次的, 还有cheery_pick不熟悉, 可能涉及代码没那么的原因。
  • 相关阅读:
    2.redis缓存数据库学习
    程序员转行短视频的故事(一)
    胺液(MDEA)净化树脂A-98FM
    jupyter 切换虚拟环境
    wwordpress发布文章HTML标签被自动过滤掉该如何处理?
    JDK1.5后增加了泛型,那么为什么要有泛型呢?我们该如何自定义泛型结构呢?
    JS事件监听器
    武汉某厂前端中高级面试题一面
    ES6 入门教程 13 Symbol 13.4 实例:消除魔术字符串 & 13.5 属性名的遍历
    Java基础---第十四篇
  • 原文地址:https://blog.csdn.net/liupeng19970119/article/details/127823700