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 mygrit
    
    git 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和master
    
    git 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 - - 清空当前所有stash
    
    git 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp-设置UrlSchemes从外部浏览器H5打开app

需求&#xff1a;外部浏览器H5页面&#xff0c;跳转到uniapp开发的原生app内部。 1、uniapp内部的配置&#xff1a; &#xff08;1&#xff09;打开manifest->App常用其他设置&#xff0c;如下&#xff0c;按照提示输入您要设置的urlSchemes&#xff1a; &#xff08;2&am…

pom.xml文件中的标签认识

周末不卷&#xff0c;研究下pom.xml里的内容。 一般一个pom.xml文件外面一个project包着以下的标签&#xff1a; groupId artifactId repositories properties dependencies build plugins 下面分别来说说这几个标签的含义&#xff1a; 1、groupId&#xff1a;表示项目组的id…

MSOLSpray:一款针对微软在线账号(AzureO365)的密码喷射与安全测试工具

关于MSOLSpray MSOLSpray是一款针对微软在线账号&#xff08;Azure/O365&#xff09;的密码喷射与安全测试工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以直接对目标账户执行安全检测。支持检测的内容包括目标账号凭证是否有效、账号是否启用了MFA、租户账号是…

vivado 系统内逻辑设计调试流程

系统内逻辑设计调试流程 Vivado 工具提供了诸多功能 &#xff0c; 用于在真实硬件器件中调试系统内设计。系统内调试流程包含 3 个不同阶段 &#xff1a; 1. 探测阶段 &#xff1a; 确定设计中要探测的信号和探测的方法。 2. 实现阶段 &#xff1a; 完成设计实现 &…

Java学习笔记24(面向对象编程(高级))

1.面向对象编程(高级) 1.1 类变量和类方法 1.类变量 ​ *类变量也叫静态变量/静态属性&#xff0c;是该类的所有对象共享的变量&#xff0c;任何一个该类的对象去访问它时&#xff0c;取到的都是相同的值&#xff0c;同样任何一个该类的对象去修改它时&#xff0c;修改的也是…

31.2k star, 免费开源的白板绘图工具 tldraw

31.2k star, 免费开源的白板绘图工具 tldraw 分类 开源分享 项目名: tldraw -- 无限画布白板 Github 开源地址&#xff1a; https://github.com/tldraw/tldraw 在线测试地址&#xff1a; tldraw 文档地址&#xff1a; tldraw SDK tldraw 是一款开源免费的无限画布白板&…

网络规划(homework 静态路由 and Rip路由表更新)

1、写出下图路由器1和路由器3中的路由表&#xff08;按直接交付、特定主机交付、特定网络交付、 默认交付的顺序放置路由项&#xff09; 2、写出Ri更新后的路由表&#xff08;rip路由协议&#xff09; 1、将Rj广播的路由消息全部1 2、直接对照着更新Ri中的路由表

基于java实现的二手车交易网站

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea…

【可能是全网最丝滑的LangChain教程】六、快速入门Agent

系列文章地址 【可能是全网最丝滑的LangChain教程】一、LangChain介绍-CSDN博客 【可能是全网最丝滑的LangChain教程】二、LangChain安装-CSDN博客 【可能是全网最丝滑的LangChain教程】三、快速入门LLM Chain-CSDN博客 【可能是全网最丝滑的LangChain教程】四、快速入门Re…

[深度学习] 无人车环境准备

1. 安装过程基本遵循以下步骤 电脑端环境配置 - OriginBot智能机器人开源套件 需要注意以下两点&#xff1a; 1> 由于深度学习需要的包和镜像体积都比较大&#xff0c;所以虚拟机硬盘大小建议120GB 2> 虚拟机的网络适配器应该设置为桥接模式&#xff0c;如果使用NAT模…

Windows系统C盘空间优化进阶:磁盘清理与Docker日志管理

Windows系统C盘空间优化进阶&#xff1a;磁盘清理与Docker日志管理 文章目录 Windows系统C盘空间优化进阶&#xff1a;磁盘清理与Docker日志管理磁盘清理工具 使用“运行”命令访问磁盘清理利用存储感知自动管理空间清理WinSxS文件夹结合手动清理策略 小结删除临时文件总结&…

git入门教程

Git 1. Git历史 同生活中的许多伟大事件一样&#xff0c;Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上&#xff08;1991&#xff0d;2002年间&#xff09;。到 2002…

vitepress系列-06-部署篇

部署篇 上传代码库 选择腾讯旗下的CONDING 有手就行 构建 采用CONDING自带的CICD: 注意&#xff1a;这边持续集成中的构建计划已经满足不了vitepress了&#xff0c;会把默认流水线拉挂了&#xff0c;但是如果你是vuepress依旧可以 采用云原生进行构建&#xff1a; 步骤一&a…

本地生活抖音同城商家流量推广运营解决方案

【干货资料持续更新&#xff0c;以防走丢】 本地生活抖音同城商家流量推广运营解决方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 抖音本地生活运营方案&#xff0c;帮助本地生活服务…

金融企业区域集中库的设计构想和测试验证

导读 本文探讨了金融企业区域集中库的设计构想和测试验证&#xff0c;包括架构设想、数据库整合场景测试及优势和使用设想。作者提出利用 TiDB 数据库产品集中建设区域集中库&#xff0c;解决 MySQL 存量节点的整合问题&#xff0c;实现部署的标准化、按需扩展和统一运维管理。…

linux:du和df区别

文章目录 1. 概述2. du 命令2. df 命令3. 区别总结 1. 概述 du 和 df 都是 Linux 系统中用于查看磁盘空间使用情况的命令&#xff0c;但它们的功能和用法有所不同。 2. du 命令 du 是 “disk usage” 的缩写&#xff0c;用于显示文件或目录的磁盘使用情况。du 命令用于查看指…

基于SSM框架实现的在线心理评测与咨询系统(技术栈 spring+springmvc+mybatis+jsp+jquery+css)

一、项目简介 本项目是一套基于SSM框架实现的在线心理评测与咨询系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

二、企业级架构之Nginx

一、Nginx的重装与升级 1、为什么需要重装与升级&#xff1a; 在实际业务场景中&#xff0c;需要使用软件新版本的功能、特性&#xff0c;就需要对原有软件进行升级或者重装操作。 Nginx&#xff1a;1.12版本 → 1.16版本 2、Nginx重装&#xff1a; 第一步&#xff1a;停止…

武汉星起航:打造亚马逊一站式孵化平台引领电商新风潮

2020年正式成立后&#xff0c;武汉星起航持续深耕亚马逊自营店铺运营&#xff0c;不断拓展跨境电商业务。公司凭借专业运营团队和多年经验为合作伙伴提供深入合作模式&#xff0c;迅速崭露头角。推出亚马逊一站式孵化平台&#xff0c;为卖家提供全方位支持&#xff0c;彰显了公…

(已解决)引入本地bootstrap无效,bootstrap和jquery的引入

问题&#xff1a; 首先我是跟着张天宇老师下载的bootstrap文件&#xff0c;新建了一个css文件夹&#xff0c;但是这样子<link rel"stylesheet" type"text/css" src"./css/bootstrap.css">在index.html引入没有用。 解决办法: 1.把建立的…