• 项目开发必备git操作


    背景知识

    教程

    工作流程

    在这里插入图片描述

    常用操作

    常用命令

    工作区准备

    从远程克隆项目:git clone git@kqy/test.git

    选择分支

    查看远程地址:git remote -v
    查看所有远程分支:git branch -r
    查看所有本地分支:git branch -a
    新建本地分支:git branch xxx
    切换本地分支:git checkout xxx
    修改本地分支名称:git branch -m oldName newName
    新建本地分支并切换到本地分支:git checkout -b xxx
    创建远程分支:git push origin xxx

    在克隆的资源上添加或修改文件

    如果其他人修改了,你可以更新资源

    暂存本地修改:git stash
    本地与远程同步:git pull = git fetch + git merge FETCH_HEAD
    还原并删除暂存的内容:git stash pop stash@{id}
    删除暂存的内容:git stash drop stash@{id}

    在提交前查看修改

    查看修改的内容:git diff fileName
    撤销文件的修改:git checkout fileName
    添加文件到暂存区:git add fileName
    取消修改到暂存区:git reset fileName

    提交修改

    查看修改的状态:git status
    普通提交(本地):git commit -m "notes"
    使用指定log文件的形式进行提交(本地):git ci -F cimsg.txt
    给提交点打标签:git tag -a v1.4 hashValue
    提交标签到远程:git push origin v1.4

    在修改完成后,如果发现错误,可以撤回提交

    查看提交记录:git log
    查看修改记录:git show hashValue
    撤销log修改1:git reset --hard hashValue(恢复到之前某个提交的版本,且那个版本之后提交的版本都不要了)
    撤销log修改2:git revert hashValue(撤销之前的某一版本,保留该目标版本后面的版本)

    在修改完成后,如果提交了不需要的文件可以撤回

    git reset HEAD^ -- 文件名
    git commit --amend --no-edit

    合并/删除分支

    dev分支合并到master分支

    git checkout dev
    git pull
    git checkout master
    git merge --no-ff dev(会保存分支历史)
    git push -u origin master(会指定该主机为默认主机)

    master分支更新到dev分支

    • 常规操作
      git checkout master
      git pull
      git checkout dev
      git merge --no-ff master
      git push -u origin dev
    • rebase操作
      绝不要在公共的分支上使用它, git rebase 会重写历史,一定只能在你自己的分支上使用它!!!
      拉取远程分支master的内容同步到当前分支:git pull origin master --rebase
      继续合并:git rebase --continue

    遇到冲突需要手动解决

    删除本地分支:git branch -d xxx
    删除远程分支:git push origin --delete xxx

    更新到远程

    同步到最新状态:git pull origin master
    提交到远程仓库:git push origin master
    提交到远程仓库并新建远程仓库(两个仓库同名写一个就行):git push origin 本地:远程

    分支说明

    master

    稳定的平台分支。仓库创建时,默认创建了master分支,master分支的每一个版本都必须是可发布的;

    develop

    经过评审的开发分支。从master创建,且上面的提交是经过MR评审后的;
    项目名:项目发布分支。项目经过PV评审后,从develop创建,以供后续项目运维分支,后续所有该项目的软件从此分支发布;

    dev_工程师

    工程师开发临时分支。个人仓库,从develop fork的开发分支,开发人员确保功能完整、可评审后,可发起MR合并到develop,合并后删除;

    Git使用——命令行方式

    • 下载仓库
      git clone git@xian/test.git
    • 拉取最新内容
      git pull origin master
    • 查看分支
      git branch -a
    • 创建分支(可跳过)
      git branch dev_kqy
    • 切换分支(可跳过)
      git checkout dev_kqy
    • 修改工程内容
    • 暂存本地修改的内容
      git stash
    • 切换到master分支
      git checkout master
    • 拉取最新内容
      git pull origin master
    • master分支更新到dev分支
      git checkout dev_kqy
      git merge --no-ff master
    • 恢复暂存的内容
      git stash pop
    • 如果有冲突,就处理冲突
    • 查看修改了文件的内容
      git diff xxxfile
    • 添加文件
      git add xxxfile
    • 查看修改状态
      git status
    • 创建cimsg.txt文件,写入log信息
    • 使用指定的log文件,提交修改
      git ci -F cimsg.txt
    • 查看提交记录
      git log
    • 撤销commit
      git reset --soft HEAD^ // HEAD 指向当前所在分支
      –soft:不删除工作空间改动代码,撤销commit,不撤销git add .
      –mixed:默认参数,不删除工作空间改动代码,撤销commit,并且撤销git add .
      –hard: 删除工作空间改动代码,撤销commit,撤销git add .
    • 修改commit注释和补充添加文件
      git commit --amend
    • 推送分支到远程
      git push origin dev_kqy
    • 如果没有创建新分支,直接用的master分支,上传分支时要改名
      git push origin master:dev_kqy
    • 登录Gitlab后台,点击“创建合并请求”
    • 按照提示,选择审核人,要合并的分支,以及commit msg,以及是否删除source branch也就是我们的个人分支(建议勾选MR后自动删除source branch分支)
    • 完成后,删除远程分支
      git push origin --delete xxx

    一些命令补充~

    git commit -m 'xxxx' // 当前目录的文件快照,提交差异部分
    
    git checkout -b branchName // 新建分支并切换到这个分支
    
    git merge branchName // 将当前分支内容和branchName分支内容合并
    
    git checkout main^ // main 的父节点(一个^表示一级,多个表示多级)
    
    // HEAD 指向当前所在分支,直接 git checkout commit的hash值就可以指向当前所在的commit处
    git branch -f main HEAD~3 // 强制指向 HEAD 的第 3 级父提交
    
    git reset HEAD~1 // 类似于回退,但是对远程分支没有效果,回到当前分支的上一个commit
    
    git cherry-pick C2 C4 // 更新提交记录 C2 C4 到当前分支
    
    git rebase -i HEAD~4 // 产生图形界面
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    Q&A

    此处仅罗列个人遇到的问题,欢迎补充~

    1. 如果不小心提交了不需要提交的文件,如果在不增加 commit 次数的情况下去除不需要的文件。
      参考:部署流程—上线篇 和 https://www2.zhihu.com/question/281440343。

      git reset HEAD^ -- bar.txt
      git commit --amend --no-edit
      
      • 1
      • 2

    参考资料

    1. https://blog.csdn.net/sxf1061700625/article/details/116643786
    2. 学习 git 小游戏:https://learngitbranching.js.org/?locale=zh_CN
    3. 搞懂 rebase:https://zhuanlan.zhihu.com/p/47905032
    4. git 常用命令:https://blog.csdn.net/sxf1061700625/article/details/116643786
      在这里插入图片描述
  • 相关阅读:
    JVM原理(一)JVM通识、JVM架构
    商汤&上海AI实验室联合发布:自动驾驶全栈式高精度标定工具箱(含车、IMU、相机、激光雷达等的标定)
    LeetCode 287. 寻找重复数(java实现)
    【软件工程之美 - 专栏笔记】“一问一答”第3期 | 18个软件开发常见问题解决策略
    【TSP问题】基于遗传算法求解固定的开放式不返回多旅行推销员问题(M-TSP)附matlab代码
    Go web 开发数据库管理平台,利用远程过程调用(RPC)实现对MySQL数据库的管理和使用
    AppleID切换验证手机
    经典中的经典之字符串
    (arch)linux 转换文件编码格式
    DTSE Tech Talk | 云原生架构下的数字身份治理实践
  • 原文地址:https://blog.csdn.net/qq_43569680/article/details/126231928