Git浅浅入个门~

news2024/11/17 19:30:21

1 Git

1.1 安装配置

  1. install
  • 安装位置:$HOME/git
  • 二进制文件位置:/usr/bin/git
/* Linux 源码安装 git */
[username@hostname]$ git clone git://git.kernel.org/pub/scm/git/git.git
[username@hostname]$ cd git
[username@hostname]$ ./configure --prefix=/usr
[username@hostname]$ make
[username@hostname]$ sudo make install

git --version // 查看git版本信息
  1. config
  • git 配置文件位置:$HOME/.gitconfig
/**
 * 1. --global 参数表示配置全局
 * 2. 单个 git 管理的项目中配置文件位置为: $PROJECT/.git/config
 */
[username@hostname]$ git config --global --list // 列出当前配置 
[username@hostname]$ git config --global user.name <用户名> // 配置用户名
[username@hostname]$ git config --global user.email <邮箱> // 配置邮箱
[username@hostname]$ git config credential.helper store // 鉴权凭证存储(配置后只需首次鉴权)
[username@hostname]$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" // 配置命令别名(git log => git lg)
[username@hostname]$ git config --global color.ui true // 配置颜色
  1. 配置 ssh
  • ssh相关文件位置:$HOME/.ssh
[username@hostname]$ ssh-keygen -t rsa -C <邮箱> // 生成ssh密钥
  1. 配置忽略文件
  • 文件位置:$HOME/.gitignore

1.2 代码提交

在这里插入图片描述

[username@hostname]$ mkdir -p $PROJECT
[username@hostname]$ cd $PROJECT
[username@hostname]$ git init // 初始化本地库,创建 .git
[username@hostname]$ git status // 查看本地库状态

在这里插入图片描述

1.2.1 添加修改(工作区 <=> 暂存区)

  1. 查看工作区的修改:git diff
  • git diff // 列出所有的修改

  • git diff <files> // 列出若干文件的修改

  • git diff 检查的是工作区与暂存区之间的差异

  1. 撤销未添加到暂存区的修改:git checkout / git clean
  • git checkout // 撤销项目下所有的修改

  • git checkout . // 撤销当前文件夹下所有的修改

  • git checkout <files> // 撤销若干文件的修改

  • git clean -f // untracked状态,撤销新增的文件

  • git clean -df // untracked状态,撤销新增的文件和文件夹

  1. 添加工作区的修改到暂存区:git add
  • git add <files> // 从工作区添加若干文件的更改到暂存区
  • git add . //添加当前目录下所有更改
  • git add --all(-a) // 添加当前目录下所有更改
  1. 查看暂存区的内容:git ls-files
  • --cached(-c) // 显示暂存区中的文件,git ls-files命令默认的参数

  • --deleted(-d) // 显示删除的文件

  • --modified(-m) // 显示修改过的文件

  • --other(-o) // 显示没有被git跟踪的文件

  • --stage(-s) // 显示mode以及文件对应的Blob对象,

  • git cat-file -p

  1. 撤销暂存区的修改:git reset / git rm
  • git rm --cached <files> // 删除暂存区的文件

  • git rm <files> // 删除暂存区 和 工作区的文件

  • git reset // 暂存区的修改恢复到工作区

  • git reset --soft // 与git reset等价,回到已修改状态,修改的内容仍然在工作区中

  • git reset --hard // 回到未修改状态,清空暂存区和工作区

  • git reset --hard 相当于 git reset --soft + git checkout

1.2.2 提交修改(暂存区 <=> 本地仓库)

  1. 提交暂存区的修改到本地仓库:git commit
  • git commit -m <info> // 提交暂存区所有的修改
  • git commit -m <info> <files> // 提交暂存区若干文件的修改
  • git commit --amend <new info> // 修改提交信息
  1. 查看本地仓库的内容:git log
  • git reflog // 查看提交 commit 信息
  • git log // 查看提交 commit 详细信息
  1. 撤销commit
  • git reset --hard HEAD^ // 回退到本地仓库上一个版本
  • git reset --hard <hashcode> // 回退到指定版本
  • git reset // 回退且回到已修改状态,修改仍保留在工作区中
  • git reset --soft // 回退且回到已修改状态,修改仍保留在工作区中

1.3 代码分支

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
Git 分支实际上是指向更改快照的指针。

1.3.1 分支CRUD

默认分支:master

  1. 分支操作:git branch
  • git branch // 查看当前分支

  • git branch -a // 查看所有分支

  • git branch -v // 查看当前分支详细信息

  • git branch <branch-name> // 创建分支

  • git checkout <branch-name> // 切换分支

  • git checkout -b <branch-name> // 创建并切换到该分支上

  • git branch -m <oldname> <newname> // 修改分支名

  • git branch -d <branch-name> // 删除分支

1.3.2 分支整合

  1. 分支合并:git merge
    在这里插入图片描述
  • git checkout master -> git merge iss53 // master 分支合并 iss53 分支
  1. 分支变基:git rebase
    在这里插入图片描述
  • git rebase <upstream-branch-name> <to-branch-name> // 通用语法
  • git rebase master experiment // 对 experiment 分支变基(experiment 分支改变)

执行上述命令的过程为:

  1. 切换到to-branch分支;
  2. 将to-branch中比upstream-branch多的commit先撤销掉,并将这些commit放在一块临时存储区($PROJECT/.git/rebase);
  3. 将upstream-branch中比to-branch多的commit应用到to-branch上,此刻to-branch和upstream-branch的代码状态一致;
  4. 将存放的临时存储区的commit重新应用到to-branch上;
  5. 结束。
    执行完上述第3步后,to-branch的代码状态已经改变,接着执行第4步时则可能会产生合并冲突。

解决合并冲突几个常见的办法是:

  1. 手动编辑冲突文件,手动删除或者保留冲突的代码;

  2. 对于“both added”、“both deleted”、“both modified”等类型的冲突,若想完整地保留某一方的修改可以执行git checkout --ours(或者–theirs) <文件名>来选择想要保留的版本。需要注意的是由于git rebase 是先撤销再应用commit,所以这里的ours指的是upstream-branch,theirs指的是我们将要应用的临时commit。

  3. 对于“added by us/them”、“deleted by us/them”等类型的冲突需要使用git rm 和git add 来删除/添加file。在此过程中需要特别注意谁是us,谁是them。

    冲突解决完之后,
    使用git add 来标记冲突已解决,即更新这些内容的索引(index)(不需要 git commit),
    最后执行git rebase --continue继续。
    如果中间遇到某个补丁不需要应用,可以用下面命令忽略:git rebase --skip
    如果想回到rebase执行之前的状态,可以执行:git rebase --abort

1.4 代码同步

1.4.1 远程仓库

  1. 关联远程仓库:git remote
  • git remote <url> // 关联远程仓库

  • git remote add <name> <urls> // 关联远程仓库,并指定远程仓库的名字,默认为 origin

  • 可以同时关联多个远程仓库

  • git remote -v // 查看关联的远程仓库

  • git remote set-url <name> <your-git-url> // 修改远程仓库的url,name 是远程仓库的名字

  1. 拉取远程仓库代码:git clone / git fetch
  • git clone -b <branch-name> <url> // 克隆远程仓库指定分支
  • git clone -b <branch-name> --recurse-submodules <url>// 克隆子仓库
  • git fetch <name> <remote-branch>:<local-branch> // 拉取远程仓库指定分支为本地指定分支,name 是远程仓库的名字

1.4.2 拉取推送

  1. 拉取远程仓库来更新本地仓库:git pull
  • git pull origin <远程分支名>:<本地分支名> // 将远程指定分支 拉取到 本地指定分支上
  • git pull origin <远程分支名> // 将远程指定分支 拉取到 本地当前分支上
  • git pull // 将与同名的远程分支 拉取到 本地当前分支上
  1. 推送本地仓库到远程仓库:git push
  • git push origin <本地分支名>:<远程分支名> // 将本地当前分支 推送到 远程指定分支上
  • git push origin <本地分支名>// 将本地当前分支 推送到 与本地当前分支同名的远程分支上
  • git push // 将本地当前分支 推送到 与本地当前分支同名的远程分支上

1.5 其他操作

1.5.1 git stash

团队协作时,当远程仓库中已有新的提交,而本地修改的内容还未添加到暂存区时,可以使用 git stash 临时存储自己的修改内容,拉取最新的代码后继续开发。

1. git stash save "some info" 	// 临时存储还未暂存的修改
2. git pull 										// 拉取最新的代码
3. git stash list 							// 查看临时存储栈中的信息
4. git stash pop 								// 从临时存储栈中弹出栈顶的存储记录
5. git stash clear 							// 清除临时存储栈

1.5.2 git submodule

有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。
Git 通过子模块来解决这个问题。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。

// 1. 拉取远程仓库指定分支 作为指定路径的子仓库,会创建新文件 .gitmodules
git submodule add -b <branch-name> <url> <path> 
// 2. 克隆含有子仓库的仓库时,子仓库是空的
2.1 git submodule init   // 初始化配置
2.2 git submodule update // 拉取子仓库
git submodule update --init --recursive // 精简命令

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【入门到精通】安装与运行PHP脚本语言

文档背景 突然看见XSS攻击和钓鱼网站一些实现的代码。突然对PHP语言燃起了兴趣&#xff0c;怎么可以用如此精简的流程去实现复杂的逻辑。所以来记录一下入门PHP的一个过程&#xff0c;以免遗忘。 1、PHP简介 PHP是什么? PHP&#xff08;全称&#xff1a;PHP&#xff1a;Hyper…

基于蒙特卡洛的大规模电动汽车充电行为分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4dd;目前更新&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;电力系统相关知识&#xff0c;期刊论文&…

em13c 部署 AGENT报:SSH 服务器检查失败

报错信息如下&#xff1a; 2022-03-18_19-43-21:INFO: Jsch Valdation Failed Problem :SSH 服务器检查失败 Recommendation: 验证 /u02/em13c/oraclehome/oui/prov/resourcesPaths.properties 文件中 SSH_PORT 的值。请确保该值与远程主机上运行 sshd 的端口相同。 2022-03-18…

Linux(CentOS-7)-全面详解(学习总结---从入门到深化)

Linux概述 Linux特点 首先Linux作为自由软件有两个特点&#xff1a;一是它免费提供源代码&#xff0c; 二是爱好者可以根据自己的需要自由修改、复制和发布源码 Linux的各个发行版本 Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打 包。 1、Red Hat Linux 2、Ubu…

Word文档怎样翻译?Word文档翻译方法大分享

大家平时会被这种情况所困扰吗&#xff1f;在交接工作的时候&#xff0c;接收到一个Word文档&#xff0c;却发现是英文的&#xff0c;奈何自己的英语基础不够&#xff0c;难以完全理解文档里面的内容。这种情况我们该如何解决呢&#xff1f;别担心&#xff0c;今天教你Word文档…

如何实施企业采购战略?

拥有现代灵活的采购战略&#xff0c;不仅可以使企业降低成本和提高效率&#xff0c;而且还可以作为一种竞争优势&#xff0c;帮助企业增加收入。 根据行业的不同&#xff0c;供应链成本&#xff08;主要是采购和运输成本&#xff09;可能占销售额的50%至70%。因此&#xff0c…

[附源码]Python计算机毕业设计Django通用病例管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

开源消息引擎系统 Kafka 3新特性,一文带你了解

文章目录1、Kafka 简介2、kafka3 的安装配置3、Kafka 当中 Raft 的介绍4、Raft 算法介绍5、Kafka 常见问题1、Kafka 简介 Kafka 是一款开源的消息引擎系统。一个典型的 Kafka 体系架构包括若干 Producer、若干 Broker、若干 Consumer&#xff0c;以及一个 ZooKeeper 集群&#…

Spring IoC Container 原理解析

IoC、DI基础概念 关于IoC和DI大家都不陌生&#xff0c;我们直接上martin fowler的原文&#xff0c;里面已经有DI的例子和spring的使用示例 《Inversion of Control Containers and the Dependency Injection pattern》 https://www.martinfowler.com/articles/injection.htm…

关系抽取(三)实体关系联合抽取:CasRel

目录 关系抽取两大类方法 CasRel&#xff08;HBT&#xff09;——ACL2020 1. 基本思想 2. 模型细节 2.1 头实体识别层 2.2 关系、尾实体联合识别层 2.3 原理解释 3. 实验 NLP 关系抽取 — 概念、入门、论文、总结 - 知乎 (zhihu.com) 关系抽取两大类方法 按模型结构…

Git应用详解第七讲:Git refspec与远程分支的重要操作

这一节来介绍本地仓库与远程仓库的分支映射关系: git refspec 。彻底弄清楚本地仓库到底是如何与远程仓库进行联系的。 一、 Git refspec refspec 是 Reference Specification 的缩写,字面意思就是 具体的引用 。它其实是 一种格式 , git 通过这种格式来表示 本地分支 与 …

盘点|国内5款主流低代码开发平台介绍

国内主流低代码开发平台有哪些&#xff1f; 低代码开发平台作为解决企业数字化转型的有力手段&#xff0c;得到越来越多的关注&#xff0c;但企业在选型的时候也很苦恼&#xff0c;到底该选哪家&#xff0c;不同低代码平台到底有啥区别&#xff1f;各自侧重点是什么&#xff1…

R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析

使用R和Python进行分析的主要好处之一是&#xff0c;它们充满活力的开源生态系统中总是有新的和免费提供的服务。 去年&#xff0c;我们与一家公司进行了短暂的咨询工作&#xff0c;该公司正在构建一个主要由基于R和Python机器学习分析的应用程序。 如今&#xff0c;越来越多…

在M1Mac上为GIMP安装G‘MIC插件

tags: GIMP MacOS Tips 写在前面 在Mac上使用GIMP也有段时间了, 虽然用起来还是一股理科风, 但是还是不影响使用, 之前就看过一个介绍GMIC插件的视频, 其中的滤镜效果确实很不错, 但是一直安装失败(可能是m1的原因), 这次看到GIMP更新到了Apple silicon的原生支持: 2.10.32-1…

深度测评FL Studio性能,多年Fl Studio使用感受分享

前阵子世界级电音盛会Tomorrowland在比利时如期举行&#xff0c;拉开了疫情下Rave文化复兴的帷幕。而国内&#xff0c;也推出了如《超感星电音》等电子音乐综艺&#xff0c;在节目上大家也更多地了解到了电子音乐的制作过程。节目中最被大家看好的制作人Carta所使用的FL Studio…

【数字信号去噪】基于matlab变分贝叶斯卡尔曼滤波器数字信号滤波【含Matlab源码 2256期】

⛄一、变分贝叶斯卡尔曼滤波器数字信号滤波 1变分贝叶斯 在参数估计的问题中,在获得了观测样本的数据集Z后,根据贝叶斯准则,核心是参数集 θ 的后验概率密度函数的计算 而式( 1) 计算的一个难点在于分母,边缘似然概率密度函数p( Z) 的计算。正如引言所述,通常情况下p( Z) 的计…

Windows系统反斜杠(倒斜杠 \ )和 Linux系统正斜杠(斜杠 / )

/撇是正斜杠&#xff0c;\捺是反斜杠&#xff08;Windows单词的第一笔&#xff0c;即字母W的第一笔&#xff0c;就是反斜杠&#xff09;。 1.单正斜杠&#xff08;斜杠/&#xff09;和双正斜杠&#xff08;//&#xff09; 1.1 在linux系统中的路径分隔符 ../表示上一级路径 …

Jenkins + GitBlit自动构建

多人协同过程中&#xff0c;避免不了多人提交&#xff0c;但没及时构建代码&#xff0c;导致代码被复盖。。。。 然后有了现在的自动构建【GitBlit配置groovy进行关联即可 &#xff0c;或GitHub使用WebHook实现】 一、 安装Jenkins【Git Plugin】 GitBlit &#xff0c;且可以正…

Java对象内存空间大小计算

一、查看基础类型的对象内存大小 八股文中很明确的告诉你了基础类型的大小 &#xff0c;如下图&#xff1a; 类型值大小&#xff08;byte&#xff09;对象内存大小(byte)备注byte116char216int416float416long824double1624 很明显基础类型值的大小和内存大小不一致&#xff…

从入门到精通,收下这 22 个 Python 学习网站

今天一并给大家整理推送&#xff0c;希望能帮你在这条道路上&#xff0c;走得更顺畅&#xff0c;走得更远&#xff0c;更稳… 0. 学习整体思路 我做为一个过来人&#xff0c;有一些经验想要分享&#xff1a; 前期&#xff1a;花点时间选一门口碑上佳的入门电子文字教程&…