• git使用技巧


    1、Git 工作区、暂存区和版本库概念:

    • 工作区:就是你在电脑里能看到的目录。
    • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
    • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

    在这里插入图片描述

    • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新。
    • 当执行提交操作(git commit)时,暂存区的目录树写到本地版本库
    • 当执行 git checkout . 或者 git checkout – 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
    • 当执行 git checkout HEAD . 或者 git checkout HEAD 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
    • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

    2、提交代码

    git pull    # 更新到最新代码然后提交。之前公司都不用,只所修改的文件不冲突就可成功提交,现在公司必须要先更新到最新代码然后才可以提交
    git add ....                 # 把工作区的文件提交到暂存区,反向操作用git checkout
    git commit -m "........"     # 把暂存区的文件提交到本地仓库区,暂存区空空荡荡
    git push -u origin master    # 提交本地版本库修改内容到远程版本库
    
    • 1
    • 2
    • 3
    • 4

    之前公司提交之前都不用先git pull,现在新公司每次提交之前都需要先git pull一下把本地仓库代码更新到最新,才能提交成功。这时会有几种情况:

    1、本地修改了文件,远程没有修改

    不需要提交的用git checkout package/utils/vabs/src/web_home.c这样就能和远程保存一致;需要提交的不用管,git pull更新到最新之后,就可以git add走提交流程了。

    2、本地和远程仓库都修改了同一个文件,造成冲突。
    例如下面远程也有人修改了internet.c文件,且已经成功提交,自己这版本git pull之后会报下面错误:

    leiting@nova-PowerEdge-C2100:~/mt7621_0629/mt7621/mtk-openwrt-lede-4.2.1.0$ git status
    位于分支 NOVA7621-LM
    您的分支与上游分支 'origin/NOVA7621-LM' 一致。
    
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
            修改:         package/utils/novaRouter/src/internet.c
    
    修改尚未加入提交(使用 "git add"/"git commit -a")
    leiting@nova-PowerEdge-C2100:~/mt7621_0629/mt7621/mtk-openwrt-lede-4.2.1.0$ git pull
    remote: Counting objects: 11, done.
    remote: Compressing objects: 100% (11/11), done.
    remote: Total 11 (delta 10), reused 0 (delta 0)
    Unpacking objects: 100% (11/11), done.
    来自 git.iotnova.com.cn:develop_group3/mt7621
       8616e2a..ef3bdcd  NOVA7621-LM -> origin/NOVA7621-LM
    更新 8616e2a..ef3bdcd
    error: Your local changes to the following files would be overwritten by merge:
            mtk-openwrt-lede-4.2.1.0/package/utils/novaRouter/src/internet.c
    Please, commit your changes or stash them before you can merge.
    Aborting
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    解决方法:
    首先进入到internet.c文件夹,把internet.c修改名字为internet_bak.c,
    然后执行git pull,
    然后最新internet.c文件会被下载下来,用beyond compare工具将自己的修改对比过去,
    然后删掉internet_bak.c,
    最后编译、验证自己添加的功能是否正常,如果正常就可以走git add流程提交代码。

    3、一些常用操作

    git pull       # 更新到最新版本
    git push       # 提交代码到远程版本库
    git status     #
    git log        #
    git diff ...   #
    git reflog     # 显示命令历史
    git merge branchname  # 合并branchname分支
    git rm filename       # 将文件从暂存区和工作区中删除
    
    git reset --hard            # 回退到本地版本库最新版本
    git reset --hard commit号   # 强制回退到commit号指向的版本
    
    git branch       # 查看本地分支
    git branch -r    # 查看远程分支
    git branch -a    # 查看所有分支
    git branch dev   # 创建dev分支
    
    git checkout filename          # 用暂存区的filename覆盖工作区的filename
    git checkout branchname        # 切换到branchname分支
    git checkout –b branchname     # 创建并切换到branchname分支
    
    git commit --amend   # 追加提交,只能用在git commit之后git push之前
    git commit --amend --only -m 'xxxxxxx'   # 修改提交信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4、怎样用git查看指定文件的历史修改记录

    可以用 git log filename

    leiting@nova-PowerEdge-C2100:~/mt7621_0629/mt7621/mtk-openwrt-lede-4.2.1.0$ git log package/utils/vabs/html/html/more_page1.html
    commit 5def26a44eefc0cc5f9b9e732a0dedb0541dd564
    Author: china <1505611406@qq.com>
    Date:   Mon Jun 27 16:24:09 2022 +0800
    
        fix router_info and page1
    
    commit 68a81e1ae5cba38d39bab22085059fee54d23e72
    Author: ting.lei <Ting.Lei@iotnova.com>
    Date:   Thu Jun 23 14:17:51 2022 +0800
    
        fix web_route_info bug
    
    commit fc300e241152e3e2445060796118219b23ea218b
    Author: leoy <leo.yan@iotnova.com>
    Date:   Tue Jun 14 13:21:10 2022 +0800
    
        Normalize all the line endings
    leiting@nova-PowerEdge-C2100:~/mt7621_0629/mt7621/mtk-openwrt-lede-4.2.1.0$ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    另外,可以用 git blame filename

    git blame 可以显示文件的每一行最后修改的版本和作者

    5、你修改了一个内容,并且已经git add到暂存区了。想撤销怎么办?

    回溯版本,git reset --hard + 版本号
    再git checkout – file,替换工作区的版本。

  • 相关阅读:
    Mutated 源代码解析 client (一)
    为什么你开发的网页不应该大于 14KB?
    DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》课程讲解之十大知识领域之4辅助—项目人力资源管理
    表白墙程序
    【2023,学点儿新Java-42】赋值运算符 及其 基础练习(含整体分析解释,适合小白学习哦)| 复合赋值操作符:“+=“、“++“、“*=“的综合应用
    ERP库存管理
    LyScriptTools Control 调试类API手册
    用HTML+CSS6音乐吧 7页
    Go数据库操作插件-xorm
    深入浅出,带你看懂Vue组件间通信的8种方案
  • 原文地址:https://blog.csdn.net/qq_36741413/article/details/125525328