Git场景运用

git 脚本在开发中应用场景-CSDN博客

Git基础

  1. Git基本运作流程
    ​​​​​​​

    (1) workspace->index->Repository
    ​ 本地写代码在workspace,add暂存到index,commit提交到本地Repository。多项目成员,每员对应本地仓库,各自代码互不干扰。
    (2) checkout
    切换Repository分支。版本控制重要功能,不同分支工作。

  2. Git与SVN不同
    SVN没本地仓库,只有集中服务器,所有操作与服务器进行,必须联网查看历史信息,进行版本控制,而Git有本地仓库,本地即全部版本历史信息,没有网络,只需提交本地仓库,之后Remote同步即可。

    ​ svn集中式依赖中心服务器。Git有去中心化特点,使用者平等,每人有完整版本库,每人的有各自修改后写入代码。使用者比较交换,同步。SVN和Git的关系类似C/S和P2P。

Git操作与使用

Github, Gitee云平台基于Git,担任托管代码服务器角色,与SVN中不一样,各主机关系平等。

Github还Gitee都需本地有Git,与云服务器同步,需Git通信。

  1. Git配置
    (1) 安装Git
    下载安装Git: https://git-scm.com/download;配置用户名邮箱:git config --global user.name "your_name"git config --global user.email "your_email"生成SSH Key:ssh-keygen -t rsa -C your_email查看Key:open ~/.ssh将Key复制,是公钥,之后配置GitHub/Gitee

    (2) 配置GitHub
    在GitHub->settings->SSH keys,粘贴Key。Git与Github通信,每次同步不需登陆。

  2. Git操作
    git init - - 初始代码仓git clone - - 克隆远程仓
    PS:克隆时,自定义新项目名,命令末尾指定新名:$ git clone git://github.com/schacon/grit.git mygritgit add - - 修改放暂存区(Stage)git add file – 提交指定文件
    git add . || git add -A – 提交所有文件
    git add *.js – 提交所有.js文件
    git add -f file – 强制添加
    git diff - - 查看当前目录修改(#暂存区没文件时,git diff比较工作区文件与上次提交版本库文件。
    #暂存区有文件时,git diff比较工作区文件与暂存区文件)git diff HEAD - - file – 比较工作区中文件与版本库文件差异。HEAD指当前版本,file指当前工作区文件。
    git commit -m “message” - - 提交代码
    git commit --amend -m [message] - - 用新commit,替代上次提交git rm - - 文件从当前目录删除(不保存删除文件)。从Git仓删除,但保留工作目录,即从跟踪清单删除,用git rm -r --cached readme.md
    PS:文件被提交版本库,永远不担心误删,恢复文件最新版,丢失最近一次提交修改内容。git log - - 查看历史记录,git log显示从最近到最远提交日志git log --graph – 查看分支合并图
    git reflog - - 记录每次命令git remote - - 查看远程库git remote -v - - 显示克隆地址(对多远程仓有用)git remote add [short_name] - - 添加新远程仓git remote add origin < address > - - 关联远程仓git fetch [remote-name] - - 从远程仓抓数据到本地。git pull - - 更新git push [remote_name] [branch_name] - - 推送到远程仓 默认用origin和mastergit push -u origin master [-f] - - 第一次将本地库内容推送远程仓git remote show origin - - 查看远程仓信息git remote rename [old_name] - - 远程仓重命名git remote rm [remote_name] - - 删除远程仓git branch -d < name > - - 删除本地分支git tag - - 显示当前库标签git branch - - 显示当前所有分支。用–merged和–no-merged查看已经合并、未合并分支。git branch <branch_name> - - 创建新分支git branch -r - - 查看远程分支git checkout <branch_name> - - 切换指定分支git checkout -b <branch_name> - - 创建分支并切换分支git merge 合并分支
    例:
    hotfix分支合并到master:
    git checkout master
    git merge hotfix
    合并后用git branch -d hotfix删除分支。
    如合并冲突,手工修改
    加—no-ff参数用普通模式合并,合并后历史有分支,看出曾经合并,而fast forward合并看不出曾经合并。git checkout . --恢复上次提交状态git checkout --file - - 工作区修改全部撤销
    file修改没放暂存区,撤销修改回到版本库状态;
    file已添加暂存区,又修改,撤销修改回到添加暂存区后状态。
    git status – 显示工作目录和暂存区状态。哪些修改被暂存到, 哪些没被Git tracked。git status不显示已commit项目历史信息。git reset --hard HEAD^ - - #版本回退git reset --hard commitId - - 取消回退,commitId回到未来版本号
    PS:Git知当前版本,HEAD表当前版本,上一版本HEAD^,回退早时写成HEAD~100。
    git stash - - 储藏工作目录中间状态——修改过被追踪文件和暂存变更——并保存到未完结变更堆栈,可重新应用。
    切换分支,但不提交进行中工作;所以储藏变更。往堆栈推送新储藏,运行git stash。把未提交修改(暂存和非暂存)保存,后续恢复当前工作目录。
    PS:stash本地的,不通过git push上传到git server。git stash list - - 查看所有储藏,git stash多次保存工作进度,恢复时选择。git stash pop [–index] [ < stash > ] - - 重新应用已实施储藏(删除储藏)如不用参数,恢复最新工作进度,将恢复工作进度从存储工作进度列表清除。
    如提供< stash>参数(来自git stash list显示列表),从< stash>恢复。从进度列表删除< stash>。
    选项–index除恢复工作区文件外,还尝试恢复暂存区。
    git stash drop [< stash >] - - 删除存储进度。(默认删除最新进度)git stash clear - - 清空当前所有stashgit stash branch < branchname > < stash > - - 基于储藏进度创建分支。

Git案例与心得

  1. 场景一:本地建工程
    工程目录:git init
    本地库状态:git status


    本地添加工程文件:

    git add HomeWork/Git使用心得体会.md

    放暂存区(Index),如下Staged Changes:

    提交本地库(Repository):

    git commit -m "add HomeWork/Git使用心得体会.md"

    版本控制:

    "git.md"四次修改,第i次版本,内容"version i",每次提交。

    git log提交记录:

     

    恢复到版本2:git reset --hard HEAD^^ 退到version 2:

    git reset —hard HEAD^^/HEAD~100/commit-id/commit-id

    回至version 4,查看commit-id:git reflog,用reset。
    像链表操作,HEAD即指针,移动切换版本。

  2. 场景二:与远程库交互

    先拉取GitHub内容与自己合并,再提交GitHub,减少冲突,仍不完全避免冲突。如直接push,冲突概率大,你写代码时,同事提交修改代码,而你写和他不同。所以先pull,因远程仓是一段时间后“达成共识”,拉取基本没错,比较过提交各方代码后确定下暂时版本。拉取后,有冲突,本地修改,解决冲突部分,不直接提交远程,致远程代码混乱,使各成员失去标准参照版本。

    拉取(fetch/clone 或 pull)

    第一次,fetch/clone。否则git pull [远程仓库名] [要拉取的分支]

    再push即merge远程和本地两不同分支

    注:同分支里某版本对上版本增量补丁,记录不同行对比差异(line diff)。

  3. 场景三:团队协作
    团队成员各负责不同功能块,各占分支,各自本地仓,自己master和branch,branch下更多branch,最后将自己分支合并到自己master,再提交服务器。

    合并分类

    (1) 快进式合并
    分支和主线合并成一条时间线,如图:


    (2) 多分支:git merge --no-ff mybranch

    分支合并图像有向无环活动图。带箭头有向边相当于活动,图点相当于事件,或者版本。多人合作,并行进行,效率取决于关键路径长短,即有人进度落后,不能按时合并期望版本。
  4. 场景四:GitBase
    pull再push,pull实际将两分支(本地分支和服务器分支)merge,两条分支线:

    另外方法,让分支历史没经任何合并,用 git rebase:

    gitbase原理:

    "mywork"分支(commit)取消,临时 保存为(patch)(补丁放".git/rebase"目录),"mywork"分支更新 为最新"origin"分支,保存补丁应用"mywork"分支。当"mywork"分支更新后,指向新建提交(commit),老提交丢弃。

    冲突的解决:

    rebase过程,出现(conflict). 停止rebase并解决冲突;解决后,用git-add更新内容索引(index), 无需执行git -commit, 只执行:

    git rebase --continue

    继续应用(apply)补丁。

    用--abort参数终止rebase行动,且"mywork" 分支回到rebase开始前状态。

    git rebase --abort

  5. 场景五:Fork + Pull request

    向开源项目贡献代码,需先fork仓库(即拷贝),写完自己代码后,发起Pull request给原仓,原仓所有者决定要merge。

    如,github上fork一个gitignore项目,很多写好.gitignore文件:
    ​​​​​​​
    仓库进自己的,如有添加或修改代码,点击Pull request:

    提交后,原仓Pull request看到提交:

联系方式

手机:13822161573 微信:txsolarterms QQ:419396409

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/300357.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习(30)

文章目录 摘要一、文献阅读1. 题目2. abstract3. 网络架构3.1 Sequence Generative Adversarial Nets3.2 SeqGAN via Policy Gradient3.3 The Generative Model for Sequences3.4 The Discriminative Model for Sequences(CNN) 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过…

蓝桥杯刷题-13-子矩阵-二维滑动窗口 ಥ_ಥ

给定一个 n m &#xff08;n 行 m 列&#xff09;的矩阵。 设一个矩阵的价值为其所有数中的最大值和最小值的乘积。求给定矩阵的所有大小为 a b &#xff08;a 行 b 列&#xff09;的子矩阵的价值的和。 答案可能很大&#xff0c;你只需要输出答案对 998244353 取模后的结果。…

鸿蒙内核源码分析 (双向链表篇) | 谁是内核最重要结构体

双向链表是什么&#xff1f; 谁是鸿蒙内核最重要的结构体 &#xff1f; 一定是: LOS_DL_LIST(双向链表)&#xff0c; 它长这样。 typedef struct LOS_DL_LIST {struct LOS_DL_LIST *pstPrev; /**< Current nodes pointer to the previous node | 前驱节点(左手)*/struct L…

AFCI 应用笔记三、使用 mlflow 管理模型

1. 简介 由于 AI 神经网络涉及多种参数&#xff0c;需要频繁修改各种超参数&#xff0c;比如&#xff1a;learning rate&#xff0c;batchsize&#xff0c;filter numbers&#xff0c;alpha 等等&#xff0c;每个参数都有可能影响到模型最终的准确率&#xff0c;所以比较这些参…

如何保证全部流量走代理

最近因为某些原因&#xff0c;需要做一些确保高匿的事情&#xff0c;便花时间做了一定的调研&#xff0c;至于是什么事情这里不便多说。 本文主要还是聊聊我看到的一些使用代理软件误区和确保流量全部走代理的方法&#xff0c;甚至也可以说是Proxifier的用户使用手册&#xff…

2023年下半年中级软件设计师上午真题及答案解析

01 02 03 04 05 06 07 08 09 10 篇幅有限&#xff0c;私我获取免费完整 pdf文件

如何在Linux中安装软件

文章目录 一、Linux应用程序基础1.Linux软件安装包分类2.应用程序和系统命令的关系3.常见的软件包的封装类型 二、安装软件的方式1.RPM包管理工具2.yum安装3.编译 一、Linux应用程序基础 1.Linux软件安装包分类 Linux源码包&#xff1a; 实际上&#xff0c;源码包就是一大堆源…

海纳斯删除广告位

找到文件 vim /var/www/html/home.php 删除代码段 <div class"adleft" id"adleftContainer"><button onclick"closeAd()">关闭</button><a href"https://www.ecoo.top/ad.html" target"_blank">&l…

bugku-misc 啊哒

拿到题目得到一张图片 尝试查看属性看到照相机型号 应该是加密字符&#xff0c;用010打开图片查看源码 文件结尾看到50 4B&#xff0c;是压缩包形式并且看到flag.txt 猜测是文件包含 kali用foremost尝试分离图片 得到zip文件&#xff0c;打开显示需要密码 想到一开始图片属…

GESP Python编程五级认证真题 2024年3月

Python 五级 2024 年 03 月 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 下面流程图在yr输入2024时&#xff0c;可以判定yr代表闰年&#xff0c;并输出 2月是29天 &#xff0c;则图中菱形框中应该填入&#xff08; &#xff09;。 A. (yr % 400 0…

LDR6328助力Type-C普及,便捷充电,绿色生活更精彩

随着科技的进步和全球统一接口的需求&#xff0c;Type-C接口正日益受到青睐。越来越多的设备正选择采纳这一先进的接口设计&#xff0c;它的普及无疑在改善着我们的日常生活。 在过往&#xff0c;许多小功率设备如小风扇、蓝牙音箱、桌面台灯以及家用加湿器等&#xff0c;都普遍…

在ChatGPT中,能用DALL·E 3编辑图片啦!

4月3日&#xff0c;OpenAI开始向部分用户&#xff0c;提供在ChatGPT中的DALLE 3图片编辑功能。 DALLE 3是OpenAI在2023年9月20日发布的一款文生图模型&#xff0c;其生成的图片效果可以与Midjourney、leonardo、ideogram等顶级产品媲美&#xff0c;随后被融合到ChatGPT中增强其…

20.2k stars项目搭建私人网盘界面美功能全

Nextcloud是一套用于创建网络硬盘的客户端&#xff0d;服务器软件。其功能与Dropbox相近&#xff0c;但Nextcloud是自由及开放源代码软件&#xff0c;每个人都可以在私人服务器上安装并执行它。 GitHub数据 20.2k stars561 watching3.2k forks 开源地址:https://github.com/ne…

博弈论(Nim+sg)

Nim游戏 给定 n 堆石子&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问如果两人都采用最优策略&#xff0c;先手是否必胜。…

Android Studio学习15——多页面情况下再看Activity生命周期

按返回键退出APP时&#xff1a; 走正常页面的退出流程&#xff1a;onPause–>onStop–>onDestroy(会Destroy,因为它从任务栈中退出了) 再点击图标回来时&#xff1a; 走正常页面的创建流程&#xff1a;onCreate–>onStart–>onResume 按Home键退出App时&#xff1a…

测试基础|为啥大多数功能测试会觉得测试平台不好用?自动化测试的几点思考

一、接口自动化到底要验证什么 个人觉得做什么事情前&#xff0c;应该想下做的动机和想要达成的目的&#xff0c;这样会减少很多不必要的弯路。 1. 自动化的原因 测试界普遍认为应该加自动化用于提高测试效率和保障&#xff1b; 测试kpi任务&#xff1b; 应对需要频繁执行…

0基础如何进入IT行业?

0基础如何进入IT行业&#xff1f; 简介&#xff1a;对于没有任何相关背景知识的人来说&#xff0c;如何才能成功进入IT行业&#xff1f;是否有一些特定的方法或技巧可以帮助他们实现这一目标&#xff1f; IT 行业可能是当今门槛最低的行业之一&#xff0c;想要进入 IT 行业&a…

【机器学习·浙江大学】机器学习概述、支持向量机SVM(线性模型)

机器学习概述 机器学习 特征提取(feature) 根据提取的特征构造算法&#xff0c;实现特定的任务⭐&#xff08;这门课程的重点&#xff1a;假设所有的特征已经存在且有效&#xff0c;如何根据这些特征来构造学习算法&#xff09; 如下图所示&#xff0c;机器学习主要就是来进行…

FreeRTOSFreeRTOS列表和列表项

FreeRTOS列表和列表项 今天继续跟着正点原子学习FreeRTOS列表和列表项的内容。列表和列表项这个知识点用到了C语言链表的知识点。所以必须对C语言中的链表这个数据结构才能更好的理解这部分内容。TIPS&#xff1a;正点原子这节课内容讲的特别好&#xff0c;强烈推荐&#xff1…

基于SSM的基于个人需求和地域特色的外卖推荐系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的基于个人需求和地域特色的外卖推荐系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…