Git

什么是Git

Git是用C语言开发的分布式版本控制系统,所谓版本控制系统,就是可以储存一个文件在不同时间的版本,记录每次文件的改动,可以根据需要,随时切换到之前的版本(比如在编写Word文档的过程中,能记录下你每一次保存下来的记录,如果你对于现在的修改不满意,就可以回退到之前保存的版本)。

分布式vs集中式

中央服务器 是否需要联网 安全性 集中式 需要 需要 低 分布式 不需要 不需要 高

Git安装

Linux安装
sudo apt-get install git

windows下通过Git官网下载即可

Macos下可以通过HomeBrew安装(前提安装HomeBrew)
brew install git

安装完成后,需要配置用户和邮箱,就可以愉快的使用Git了
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
这个配置的是全局用户名和邮箱,当然还可以针对当个仓库配置用户名和邮箱
git config user.name "gitlab’s Name"
git config user.email "gitlab@xx.com"

配置完成可以用 git ocnfig --list查看

远程仓库一般支持两种协议:SSH和HTTPS,SSH协议只认机器,HTTPS协议只认账号;也即为:如果使用SSH操作远程仓库的话,我们需要使用公钥和私钥对来做权限的认证,如果使用HTTPS操作远程仓库,则需要使用账号密码来做权限的认证。无论是公钥私钥对,还是账号密码,都只做权限的认证;但是远程仓库里需要记录这些提交记录是由谁来完成的;所以我们需要给本地的git设置用户名和邮箱,用于从本地仓库向远程仓库提交记录时,在远程仓库记录下这些操作是由谁来完成的。

为什么需要配置用户名和端口?
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址(名字和邮箱都不会进行验证),这样远程仓库才知道哪次提交是由谁完成的。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

配置的用户名和邮箱对push代码到远程仓库有什么影响?

首先,配置的用户名和邮箱对push代码到远程仓库时的身份验证没有作用,即不用他们进行身份验证;他们仅仅会出现在远程仓库的commits里。

其次,按正常操作来说,你应该配置你的真实用户名和邮箱,这样一来在远程仓库的commits里可以看到哪个操作是你所为。

最后,这个用户名和邮箱是可以随便配置的(不提倡),如果你配置的邮箱是github里真实存在的邮箱,则commits里显示的是这个邮箱对应的账号;如果配置的邮箱是一个在github里不存在的邮箱,则commits里显示的是你配置的用户名。

Git初始化

使用命令 git init初始化(建议创建空目录初始化,当然非空项目也可以),初始化完成之后,会有一个 .git 的文件夹,该文件是一个隐藏文件,可通过 ls -a查看

Git

Git的目录结构

Git
  • Git分为工作目录,缓存区(暂存区),本地仓库,远程仓库

Git本地操作流程

  1. 创建文件 touch git_test.txt
  2. 把创建的文件添加到缓存区, git add git_test.txt,如果有多个文件,可以使用 git add .代表所有的文件,如果已经使用 git add添加到暂存区,之后后悔了,可以使用 git reset HEAD <filename></filename>取消,也可以使用 git reset HEAD,这个是整体回到上一次操作
  3. 把缓存区的文件添加到本地仓库 git commit -m "&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x6587;&#x4EF6;git_text.txt" -m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录

其他常见的Git命令

Git

Git

git diff < file >–>查看文件当前的改动,如我新加了一行 hello git

Git

git restore <filename></filename>如果我不想要保存我刚刚新添加的 hello git,可以用这个放弃修改,注意的是,这个只能撤销工作区的修改,如果提交到了暂存区,不能用这个

Git

git checkout -- <filename></filename> 也是撤销修改,作用和上一条一样

git reset --hard HEAD^–>返回上次提交的版本,没啥好说的,注意的是的提交到了本地仓库才算一个版本

git reset --hard < commit id >–>返回你想返回的文件版本

git log --pretty=oneline–>查看commit id

Git

git reflog –>用来记录每一次的命令

Git

git diff HEAD -- <file></file>可以查看工作区和版本库里最新版本的区别

git checkout -- file 可以把工作区的修改全部撤销掉:
两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git reset HEAD file可以把暂存区的修改撤销掉,重新放到工作区中。 HEAD表示最新版本

rm file将工作区文件删掉 #仅删除工作区
git rm file 从版本库将文件删掉,并且需要 git commit #删除工作区,并删除版本库
若是误删,用 git checkout -- file将文件恢复到最新版。仅对 rm有效
删除文件之后,如果用 rm删除,需要 git add ., git commit -m "&#x5220;&#x9664;&#x6587;&#x4EF6;xxx",如果用 git rm filename删除,只需要 git commit -m "&#x5220;&#x9664;&#x6587;&#x4EF6;xxx"就可以了

Git添加远程仓库

  1. 创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
    ssh-keygen -t rsa -C "youremail@example.com"
    你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
    如果一切顺利的话,可以在用户主目录里找到 .ssh目录,里面有 id_rsaid_rsa.pub两个文件,这两个就是 SSH Key的秘钥对, id_rsa是私钥,不能泄露出去, id_rsa.pub是公钥,可以放心地告诉任何人。
  2. 使本地仓库和远程库关联起来:
    git remote add origin git@github.com:githubxxx/xxxx.git
    Origin 是远程库的名字,可以改成别的。 改名命令: git remote rename origin xx

第一次把本地库的所有内容推送到远程库上时的操作:
git push -u origin master
此后每次提交使用: git push origin master

已有远程库,使用命令克隆一个本地库:
git clone git@github.com:xxx/xxxxx.git

分支管理

创建分支: git checkout -b dev (dev为分支的名字,你可以随便起)

git checkout -b dev 表示创建并切换—>相当于—> git branch dev && git checkout dev两条命令

git switch -c dev—>也可以用来创建并切换新的分支

git branch—>可以用来查看当前分支

删除分支:
git branch -d dev

合并分支:合并某分支到当前分支:
git merge < file >

解决冲突:
当主分支和次分支都修改了部分内容,此时将无法快速合并这时可以直接查看,并将冲突修改后方可合并
git log --graph --pretty=oneline --abbrev-commit—>将提交版本整理成图形

分支管理策略:
git merge file 是一种 fast forward合并,这种合并看不出来曾经做过合并

git merge --no-ff -m " xxxx" + dev是一种普通的合并,能看出合并历史。

bug分支:
git stash 将手头进行的工作现场储存下来,之后就可以放心的去修bug了

修bug时,要首先跳到bug所在分支,并在那个分支上创建一个分支用来修bug,修完之后将其合并。

返回原来干活的分支, git stash list查看存放的工作现场。
git stash apply恢复,但 stash内容不删除。
git stash drop来删除
git stash pop在恢复的同时也将 stash内容删除了
若存放了多个现场,用 git stash apply stash@{0}来指定恢复

若主分支和次分支同时存在相同的bug,那么可用 git cherry-pick (&#x5E8F;&#x5217;&#x53F7;)来复制这个bug的修改

feature 分支

开发一个新的feature,最好新建一个分支;如果要丢弃一个没有被合并过的分支可以通过 git branch -D file 强行删除
多人协作

git remote查看远程库信息, git remote -v来显示更详细的信息;

推送分支 git push origin master推送主分支

git push origin dev推其他分支

git clone只能克隆 master分支,要想把其他分支也整到本地则需 git checkout -b dev origin/dev

git pull用来抓取,若 git pull失败请仔细看git给的提示
git branch --set-upstream (branch-name) origin/(branch name)建立关联

rebase
git rebase branch-name操作可以把本地未push的分支提交历史整理成直线

rebase的目的是是我们在 查看历史提交的变化时更容易

标签管理

打标签
git tag <name></name>就可以打一个标签
git tag name commit-id–>对特定的提交打标
git tag 查看标签
git show name查看标签信息
git tag -a name -m "xxxx" commit-id创建带有说明的标签

删除标签
git tag -d name 这能删除本地标签
git push origin :refs/tags/tag-name

推送标签
git push origin <tag-name></tag-name>
一次性推送所有标签: git push origin --tags

Original: https://www.cnblogs.com/ys-wang/p/16562636.html
Author: 森森成长日记
Title: Git

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578638/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 排查线上问题的9种方式

    德国科技管理专家斯坦门茨早年移居美国,他以非凡的才能成为美国企业界的佼佼者。一次,美国著名的福特公司的一组电机发生故障,在束手无策之时,公司请斯坦门茨出马解决问题。 斯坦门茨在电机…

    Linux 2023年6月14日
    095
  • 每天一个 HTTP 状态码 203

    203 ‘Non-Authoritative Informative’ 直译过来是「非权威信息」的意思… 203 Non-Authoritati…

    Linux 2023年6月7日
    0101
  • LVS+keepalived+nginx+tomcat

    一、 环境准备 本次配置基于DR负载均衡模式,设置一个VIP(Virtual IP)为19.50.67.173,用户只需要访问这个IP地址即可获得后端服务 其中,负载均衡主机为19…

    Linux 2023年6月6日
    0127
  • k8s集群中网络实现通信原理

    1)安装Docker时,创建一个名为 docke0 的虚拟网桥,虚拟网桥使用”10.0.0.0 -10.255.255.255 “、”172.1…

    Linux 2023年6月14日
    096
  • Ubuntu Typora安装

    Ubuntn Typora安装 现在好像开始收费了,网上给的方法都是从官网下载的,感觉迟早不能用,因为要钱了 官网好像给的安装方法如下,可是好像不太好用 or run: sudo …

    Linux 2023年6月14日
    098
  • tcpreplay重放报文,tcpdump能抓到包,应用程序收不到包

    现象: 生产环境中有两台服务器A、B,A服务器实时有报文发往B服务器。为了在测试环境测试新功能,故在现网A服务器上tcpdump抓取发往B服务器的报文,然后在测试环境tcprewr…

    Linux 2023年6月14日
    0104
  • Command ‘ifconfig’ not found, but can be installed with: sudo apt install net-tools解决方法

    VMware下安装的Ubuntu 当使用ifconfig命令查看网卡配置信息的时候出错 尝试了很多方法都解决不了,直到输入了下面的内容: 然后自己就更新了很多东西 之后重新输入if…

    Linux 2023年6月7日
    0107
  • 我叫Mongo,收了「查询基础篇」,值得你拥有

    这是mongo第二篇「查询基础篇」,后续会连续更新6篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流。 …

    Linux 2023年6月14日
    0117
  • 脚本小子学习–vulnhub靶机DC8

    @ 前言 一、环境搭建 二、目标和思路 三、实际操作 1.信息收集 2.getshell 总结 前言 通过一些靶机实战练习,学习使用现有的工具来成为脚本小子。 一、环境搭建 靶机:…

    Linux 2023年6月7日
    0128
  • QLabel图片自适应

    故事背景:由于要做终端定制的需求,在服务端上传一张128像素的图片,下发给客户端,适配所有图标(界面左上角、任务栏、快捷方式、托盘等),但是由于每个位置的图标大小不一样,代码要根据…

    Linux 2023年6月13日
    085
  • Java — 反射

    程序在运行中也可以获取类的变量和方法信息,并通过获取到的信息来创建对象。程序不必再编译期就完成确定,在运行期仍然可以扩展。 示例:学生类 public class Student …

    Linux 2023年6月8日
    0136
  • vue指令——day01

    v-cloak:能够解决插值表达式闪烁的问题 <p v-cloak>{{ msg }}</p> v-text:会覆盖元素中原本的内容,但是插值表达式 只会替…

    Linux 2023年6月7日
    0108
  • Linux at命令详解

    大家好,我是良许。 在生活中,我们有太多的场景需要使用闹钟,比如早上7点起床,下午4点开会,晚上8点购物,等等。 [En] In life, we have too many sc…

    Linux 2023年5月27日
    0108
  • 【XML】学习笔记第二章-dtd

    XML-DTD DTD语句 基本声明语句 引用外部DTD DTD元素 四种元素类型 元素定义关键字 修饰符号 DTD中的属性 属性修饰 属性类型 DTD中的实体和符号 符号 坑 X…

    Linux 2023年6月14日
    0119
  • 惊了!修仙=编程??

    大家好,我是良许。 在我记忆中,我们接触到的所有编程书籍都是这样的: [En] As far as I can remember, all the programming book…

    Linux 2023年5月27日
    086
  • Linux快速安装流量监控工具(实用版)

    前言: Linux流量监控工具,在此我推荐两种分别为: 1、nload(推荐)因为个人看着舒服点😂 2、iftop 你可以选择上面两种中的任何一种。下面是这两个版本的简介和安装教程…

    Linux 2023年5月27日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球