git-基本操作-1

2023-11-20

1安装

window上安装git-官网直接下载。

下载完成后需要在git bash命令行中输入:

$ git config --global user.name "yourname"
$ git config --global user.email "youremail"
--global表示这台机器上所有的git仓库都会使用这个配置。

2.创建本地仓库

创建一个空目录

cd 空目录
$ git init//初始化
在当前目录中会出现.git文件夹,其时用来跟踪管理版本库的,不要随便改动。

编写一个文本文件read.txt,提交代码到暂存区。
$ git add read.txt
将暂存区的文件提交到仓库
$ git commit -m "说明文字"
-m后面的说明文字有助于后期管理及阅读。

在这里插入图片描述


注意:git命令必须在仓库目录下执行。提交某个文件时,必须确保当前目录下存在该目录。科使用lsdir确定某目录下的文件列表。

$ `git status` 可以查看仓库的状态。
$ `git diff` 可以查看上次对文件的修改之处。在git add提交到暂存区之后,git diff不再提示
$ `git log` 可以查看提交的commit历史。
$ `git --stat` 在git log基础上输出文件增删改查的统计数据。

3.版本回退

$ git reset --hard HEAD^//回退上一版本。
$ git reset --hard HEAD~100//回退100个版本。
$ git reset --hard "提交id"
$ git reset --hard//回退到放入暂存区之前的版本,commit之后不能回到之前版本,撤销工作区更改。
$ git reset HEAD//回退到放入暂存区之前的版本,工作区需要使用git checkout -- name回退工作区的修改。

在这里插入图片描述

当你回退到某个版本之后,发现还是原来的版本好,但是你已经关闭了电脑,怎么办呢?使用git reflog查看以前执行的操作,并根据id跳转到指定版本。
$ git reflog//查看执行过的命令

在这里插入图片描述

4.撤销修改

$ git checkout --file//撤销对工作区的修改.
在保存到暂存区之后,则不能使用git checkout回到add之前的版本。
总之就是回到最近一次git add或git commit 之后的状态。
7.删除文件
git rm file//此时删除了工作区的文件,可用git reset+git reflog进行撤销。

5.远程仓库

在用户主目录下,命令行输入:

$ssh-keygen -t rsa -C "youremail"//这会生成一个公钥和一个私钥,私钥不可泄漏。
在github中ssh中设置这个公钥,就可以push本地仓库当远程仓库。每台电脑有一个ssh公钥就行了。

6.添加远程库

在GitHub中新建一个 repository,在本地仓库中运行:

$ git remote add origin git@github.com:GitHub账号/仓库的名字.git
//可以在github中查看地址写法。
//例如:git remote add origin git@github.com:dingding/name.git
//origin是远程库的名字,可以自己设置。
$ git push -u origin master
//-u作用是不仅会把本地的master内容推送到远程的master分支,还会把本地的master和远程的master分支关联起来,在以后推送时简化命令。

6.分支管理

每次提交,都会在git里进行记录,而这些记录共同构成了当前的那一条分支,即主分支(master分支),当你的提交次数越来越多,master分支的线也就越来越长。

HEAD的作用就是指向当前分支。

master是指向提交

当我们新创建一个分支dev的时候,git将dev的指针指向和master相同的提交,并将HEAD指向dev,表示当前在dev指针分支上。这样我们就创建了一个dev分支。
注意:此时,对工作区的修改只会反应在dev分支上。


我们创建一个git本地仓库,添加yes.txt文本文件。
在这里插入图片描述
在当前master分支对文本内容进行修改为yes+no。并创建一个dev分支。

git switch -c dev
git add .
git commit -m "dev"
在dev分支下查看yes.txt

在这里插入图片描述
现在切换到master分支。

git switch master

查看yes.txt的内容。

在这里插入图片描述

master分支下的yes.txt的内容并没有改变。因为dev的提交点前进了一步,但是master的提交点并没有改变。
如果想要两个分支下的内容都改变,则需要对分支进行合并。
git merge dev//将dev分支合并到当前分支。
合并之后就可以删除dev分支了。
git branch -d dev

部分命令:
1:git switch -c //git checkout -b//创建并切换分支
2:git switch//git checkout//切换分支
3:git branch//查看分支,当前分支前会有“*”显示
4:git merge // 合并指定分支到当前分支
5:git branch -d //删除分支

7.合并冲突

假如当你在master分支中修改了工作区的内容,并且提交到了仓库。然后又创建了一个dev仓库,并且也修改了工作区的内容并且完成了提交到仓库。此时,如果进行合并,就会出现“合并冲突”。

在这里插入图片描述


冲突后打开yes.txt文件:
在这里插入图片描述
解决冲突的方法就是手动的更改文件中的内容,将文件中的内容更改为我们想要的内容,然后再提交。

8分支管理

在合并通知时,默认是fast-forward模式,在这种模式下,删除分支后,会丢失分支信息。如果强制禁用fast-forward模式,git会在merge时生成一个新的commit,从而可以在分支历史上看出分支信息。
git merge --no-ff -m "no-ff"//使用--no-ff的意义在于其某分支删除后可以在分支历史上看到分支信息

分支策略原则:master分支应该保证稳定,不能在master上干活。

9Bug分支

在git中,bug的修改通过临时分支实现。 假如你在dev分支工作时接到修复bug的任务,但是dev的任务还没完成,不能提交。这时请使用git stash命令保存当前dev分支的工作内容。
git stash //保存当前分支的工作状态。

使用git stash list 可以查看这个stash中保存的状态。
在master中对bug进行修复时,创建修复bug的临时分支。

git switch master
git switch -c bug01

修复完成之后,回到master分支将bug01合并到master,

git merge --no-ff -m "bug submit" bug01

此时,bug在master分支中已经被修改,但是dev分支是早期在master分支中分出来的,那么dev分支也应该执行bug修复。git提供cherry-pick命令来复制特定的提交到当前分支。

git cherry-pick bugcommit的id// 这个id在bug提交的时候可以看到,请复制粘贴。

现在,dev分支的bug也被 “重蹈覆辙” 了。
最后,请恢复dev分支之前保存的状态。

git stash apply//恢复后,stash的内容仍然存在,使用git stash list可以查看。
git stash pop//恢复后,stash里的内容会被删除。

你也可以恢复到指定的stash

git stash apply stash@{0}

9.分支推送

当你从远程仓库克隆时,远程仓库的默认名称是origin,当然你也可以自己设置。
查看远程仓库的信息:

git remote或 git remote -v
git push origin master//将master分支推送到远程仓库origin。

push注意:master分支是主分支,应保持其与远程master同步。dev是开发分支,团队的成员都在上面工作,所以也必须保持同步。bug分支只用于本地修复bug,可以不用推送。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git-基本操作-1 的相关文章

  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t
  • 显示 master 之前/之后有多少提交分支的别名

    新的 Bitbucket Branches 页面非常棒 它显示每个分支领先 落后于 master 的提交数量 是否有显示相同信息的 Git 别名 信息应显示 分店名称 上次更新是什么时候 其背后有多少提交 有多少提交领先于 master 看
  • 如何在不在存储库中的情况下执行 Git 命令?

    有没有一种方法可以在不位于存储库的情况下对存储库执行 Git 命令 例如这样的事情 git home repo log 请不要告诉我cd到它 我正在通过一个exec call Use C作为 git 的第一个参数 git C home re
  • Git 的企业采用率?

    最近一些同事之间进行了一场讨论 在当今的软件行业中 如何存在两个不同的世界 面向自由软件 公司的 Question Git 在企业环境中的使用情况如何 您在企业环境中使用 Git 的体验如何 无论如何 我们在工作场所使用 git 每个人都对
  • git merge 冲突的不同场景

    我试图了解 git 合并后可能发生 git 冲突的情况以及如何避免它们 我创建了一个 git 存储库并向其中添加了一个文本文件 我已将 1 添加到文本文件中并将其提交给 master 我已经从 master 创建了一个新分支 分支 2 并将
  • Phonegap使用命令行工具添加插件

    我是phonegap的新手 我按照phonegap官方网站中定义的步骤使用命令行工具创建项目 nodejs 我成功创建项目并添加平台 但是 当我尝试添加插件时出现以下错误 命令 cordova plugin add https git wi
  • MSysGit 与 Windows 版 Git

    我无法确定MSysGit 和 Windows 版 Git 之间的区别 http msysgit github com 它们有何不同 为什么我会选择其中之一而不是另一个 它们不是同一个东西吗 On http msysgit github co
  • 是否可以检测 http git 远程是智能还是愚蠢?

    我正在我的应用程序中实现一个选项来使用 depth 1制作 git repo 的最小功能克隆 我刚刚意识到愚蠢的 http 传输不支持 depth 我想自动检测 http 远程是愚蠢的还是聪明的 这样我就可以省略 depth与哑 http
  • 从 GitHub 读取代码作为网页中的文本(原始)

    我正在尝试从我的 GitHub 存储库读取一些源代码 C 语言 以在我的网页中显示为文本 我可以通过以下方式访问原始模式下的代码https raw github com https raw github com 我正在使用 jQuery G
  • git 推送到 github 失败并显示“错误:pack-objects 因信号 967 死亡”

    我触发了这个命令 git push origin master 我得到这个结果 Counting objects 15626 done Delta compression using up to 4 threads error pack o
  • 如何创建名称中带有正斜杠的标签

    当我已经有了类似的标签时 有什么方法可以创建名称中带有正斜杠的 git 标签吗 假设我有 1 16 0 标签 并且我想创建 1 16 0 1 0 0 标签 git tag 1 16 0 1 0 0 error refs tags 1 16
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7
  • Gitolite git 克隆错误

    我正在尝试在我的服务器 Macos 服务器 上设置 gitolite 我按照此处找到的安装文档中的说明进行操作 http sitaramc github com gitolite doc 1 INSTALL html http sitara
  • 我可以直接在 Maven 中使用 GitHub 项目吗?

    我有兴趣使用GitHub 上的项目 https github com toelen spymemcached jcache作为我的项目中的依赖项 GitHub 项目有一个pom文件 我可以修改我的pom文件来使用这个项目 如果是这样 怎么办
  • npm install 的问题(Angular)

    今天我尝试创建一个新项目 所以我使用这个命令 ng new NAME style less 并在我的cmder中弹出错误和警告 所以我卸载了 Roaming npm 和 npm cache 中的节点和文件 然后我安装了node并再次下载cm
  • 仅使用 git 存储未暂存的更改(不是 --keep-index)

    首先 我确实知道 keep index 这不是我想要的 因为它仍然隐藏着all更改 但将暂存的更改保留在工作树中 如果可能的话 我只想存储未暂存的文件 而无需再次添加所有更改git stash patch 如果您想存储索引 已暂存的内容 和
  • 在 Windows 下克隆 git repo 时,出现“错误:无法创建文件 <文件>...(是目录)”

    Z gt git clone git github com kennethreitz httpbin git Cloning into httpbin remote Counting objects 1073 done remote Com
  • 在git的远程存储库上创建私有分支

    我想在我们公司的 git 上构建特定的流程 开发人员在他的本地计算机上创建一个分支并在那里提交一些文件 dev 将此分支推送到远程仓库 其他开发者无法访问该分支 经过几轮推动开发人员决定发布他的更改 将他的私人分支合并到公共分支 推动该公共
  • 使用 git 合并两个截然不同的分支?

    我有我的master分支和我的verydifferentbranch它们有相同的祖先 大约 300 次提交前 现在verydifferentbranch功能完整我想把它放在master下面branch 进行变基会导致每个补丁都有很多合并冲突
  • Gitlab 备份错误:包对象因信号 9 死亡

    我有一个存储库 有 2 个分支 大小为 3 5GB 每个分支大约 1 5GB git 本身就有 700MB 这是错误 备份失败 失败的 失败 opt gitlab embedded bin git git dir mountdata git

随机推荐

  • ctfshow web7

    文章目录 题目分析 解题过程 题目分析 打开题目后 有三个文章 随便点一个之后发现网址上有个后缀 id 2 应该是get传参的注入了 在后缀上加 id 1 1 显示全部文章 可能是整形注入 还是盲注 他这个过滤了空格 用 代替 详见web6
  • MySQL 8.0数据库在Win10的位置

    MySQL 8 0的配置文件位置在下面的ini文件中 C ProgramData MySQL MySQL Server 8 0 my ini C ProgramData 一般是隐藏的 修改文件夹选项可见 或者直接输入位置就能打开文件加了 m
  • wifidog浏览器弹窗认证 — 基于OpenWRT路由器

    一 移植 wifidog功能 1 功能介绍 wifidog是一种能够实现让路由器局域网设备 包括wifi连接和网线连接设备 在上网前先进行 portal认证的工具 主要应用于手机端上网认证 手机在连接wifi后会自动打开浏览器并跳转出 lo
  • C++顺序链表

    include
  • Android AutoCompleteTextView实现自动补全

    辛苦堆砌 转载请注明出处 谢谢 最近工作用到了自动补全 这里做一个简单记录 首先上我们的布局
  • 类函数重载

    函数重载必然发生在同一个作用域 重载函数 本事为不同函数 函数名和参数列表决定函数 函数必须发生在同一个作用域中 include
  • IDEA 编写JDBC 第一个示例

    知心惟有雕梁燕 自来相伴 东风不管琵琶怨 落花吹遍 一 新建一个Module 二 在此Module下新建一个包 在包再建一个包 命名为lib 三 导入mysql驱动 四 将mysql驱动添加到项目的库里 五 代码实现 package Con
  • 协同过滤算法代码

    此算法主要用来推荐的 找出ui uj两个用户同时打过分的课程集合 function getPSet uid ujd select 课程编号 from 评分 where 用户编号 ui and 课程编号 in select 课程编号 from
  • linux使用date命令获取系统时间

    转载自Linux系统date命令的参数及获取时间戳的方法 date指令相关用法示例 date 用法 date OPTION FORMAT date u utc universal MMDDhhmm CC YY ss 直接输入date dat
  • 微信小程序开发之——用户登录-登录流程(1)

    一 概述 新建微信小程序自带用户登录简化 小程序登录流程时序 二 新建微信小程序自带用户登录简化 新建的微信小程序默认有用户登录功能 将多余功能去除后 简化如下 2 1 index wxml
  • 文心一言续写太监小说《名侦探世界的巫师》

    名侦探世界的巫师 是我的童年回忆 总是想着续写一下 但是又没有时间和文笔 文心一言出了 由于目前大模型貌似可以联网 可以尝试搞一波 目录 文章1 前六个故事还能看 后面就是在重复 故事2 辣眼睛 毁童年 非请勿看 故事3 流水账 故事4 其
  • JDK介绍

    JDK JRE和JVM之间的关系 JVM是运行环境 JRE是含运行环境和相关的类库 跟node环境是一个意思 JDK目录介绍 目录名称 说明 bin 该路径下存放了JDK的各种工具命令 javac和java就放在这个目录 conf 该路径下
  • C++学习笔记(十六):对vector进行更多的操作——泛型算法

    先强调一下 这里的泛型算法实际不光光是对vector的操作 对于 顺序容器 均可以 但是什么是顺序容器 我们都知道 容器就是一些特定类型对象的集合 而顺序容器为程序员提供了控制元素存储和访问的能力 这种容器的一个显著的特征 就是容器中元素的
  • ES6.x版本单机三节点配置discovery.zen.ping.unicast.hosts 错误

    问题 在同一个机子利用不同端口搭建3个ES节点 单节点正常运行 集群间无法联通 找不到主节点 表现 cluster uuid 一直没有注册成功 curl 0 0 0 0 29200 name es 01 cluster name es te
  • 浏览器地址栏输入url以后发生了什么

    在浏览器输入url后会发生的过程 1 DNS对域名进行解析 2 建立TCP连接 三次握手 3 发送HTTP请求 4 服务器处理请求 5 返回响应结果 6 关闭TCP连接 四次挥手 7 浏览器解析HTML 8 浏览器布局渲染 1 浏览器对输入
  • 华为OD机试 - 需要打开多少监控器(Java & JS & Python)

    题目描述 某长方形停车场 每个车位上方都有对应监控器 当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时 监控器才需要打开 给出某一时刻停车场的停车分布 请统计最少需要打开多少个监控器 输入描述 第一行输入m n表示长宽 满足1
  • 按照 C++ 11 标准,数组,指针,传递问题!

    一 一维数组 静态 int array 100 定义了数组array 并未对数组进行初始化 静态 int array 100 1 2 定义并初始化了数组array 动态 int array new int 100 delete array
  • Java 日历的制作 心得 写给自己

    之前已经跟着老师做过一次这个日历 但是时间一久便又拿出来自己再复习一遍 果然不出所料 已经做不出来了 而且因为在学习的时候使用的是Myeclipse 其中话中操作是由软件自己操作的 每写出一句代码软件也会自动提示哪里有问题 半傻瓜式的操作果
  • HTML5的多个video标签:截取视频源的封面图poster,监听视频播放状态的功能;

    在日常项目中 html5的video标签还是比较常用到的 开发过程中 我们都会使用到 通过监听video标签的播放 暂停 停止等等来使用 我们是否也会遇到过 有些浏览器在显示这标签 兼容不太友好 video标签的封面是一层黑色的 ok 那么
  • git-基本操作-1

    1安装 window上安装git 官网直接下载 下载完成后需要在git bash命令行中输入 git config global user name yourname git config global user email yourema