GitKraken保姆级图文使用指南

前言

写这篇文章的原因是组内的产品和美术同学,开始参与到git工作流中,但是网上又没有找到一个比较详细的使用教程,所以干脆就自己写了一个[doge]。文章的内容比较基础,介绍了Git内的一些基础概念和基本操作,适合零基础的人作为入门指南。

Git常见的一些概念

1.仓库(repository/repo):代码和资源的仓库,Git分为本地仓库和远程仓库,Git在启动和主动拉取的时候会将远程仓库的内容同步到本地。远程仓库是托管在服务器上,仅会有一份,并且时刻保持最新。本地仓库则是可以有多份,每个人的本地仓库是互不影响的,而且可以断网进行修改。

2.克隆(Clone):当远程仓库已经建好,并且没有本地仓库的时候。需要将远程仓库Clone到本地,刚完成克隆的时候,本地仓库与远程是完全相同的。

3.分支(Branch):一个仓库里在初始化提交的时候会生成一个初始的主分支。之后可以在这个主分支上创建其他新的分支。 当你需要做一些操作并且不想影响到其他人时,可以单独创建一个分支,在分支上开发完功能,最后再合并(Merge)到主干上。

分支同样存在本地和远程的区别,远程分支记录的是远程仓库该分支的内容。本地分支则是保存了你本地仓库修改的内容。如果存在远程分支,但是没有对应的本地分支的情况,可以检出(Checkout)获得一个本地分支。

在GitKraken左侧可以看到所有的本地(Local)和远程(Remote)的分支。同时在中间的主面板也可以看到远程和本地分支的情况,远程的分支显示为一个圆形的图标,本地则为一个小电脑的图标

GitKraken界面介绍

主界面

GitKraken的主界面如下,顶部显示为当前的工程。中间为图形化的Git提交记录,可以看到当前项目的提交情况,左侧为本地/远程分支和贮藏等区域。右侧则为文件修改区

Git文件修改区

文件修改区,当有文件产生变化的时候,会出现如下的提示

点击View change会切换到如下界面,处理当前的修改

右侧的文件修改区可以看到几种不同的文件状态

黄色为该文件进行过修改(本地与远程不同)

红色为该文件已经被删除(远程存在,本地不存在)

绿色为该文件为新增文件  (本地存在,远程不存在)

这里需要注意一点如果本地没有任何修改的时候,修改区是不会显示的

左键点击右侧修改区的文件时,进入修改预览界面。可以看到具体文件修改情况。侧边栏有文件修改情况的缩略图,可以拖动后找到对应的修改位置。左侧则是实际的修改情况。查看完毕后可以选择暂存该文件或者关闭预览

GitKranken基础操作

丢弃修改(Discard

如果不想要本地的修改了,可以选择将本地修改丢弃,具体操作如下

(1)丢弃单个修改

在修改区内,如果想要某个修改,可以右键点击该文件,选择Discard changeds

之后顶部会出现一个确认弹窗,点击Discard Unstaged changeds按钮,即可还原到修改前的状态

修改和删除的文件都可以进行Discard操作。如果是新增的文件,想要还原,需要右键点击Delete file。

(2)丢弃文件夹内修改

想要丢弃某个文件内的所有修改,需要先将修改区切换成Tree模式,这样修改区的文件就会以树状结构出现

然后右键选择需要丢弃的文件夹,点击Discard all changes in folder

然后点击顶部弹窗的Reset Files

(3)丢弃所有修改

如果想要忽略所有修改,则可以点击左上角的垃圾桶

之后顶部会出现一个弹窗,点击Reset All即可清空整个修改区

贮藏(Stash

点击顶部的Stash会将当前修改区内所有的修改贮藏起来。

对应的修改会放在下图中的一个小抽屉里。并且会自动按照分支对该Stash进行命名。在develop上贮藏的message就会自动命名为WIP on develop

如果想要修改Stash的名字,可以点击这个小抽屉,点击右侧Stash Message框,修改这个Message

后续如果想要恢复这个Stash内的修改,可以右键点击小抽屉所在的那一行记录,然后选择Pop Stash即可

提交修改(Commit

Git可以完成离线的开发工作,所有的提交内容可以先提交(Commit)到本地的分支中,此时并不影响远程分支。

具体操作是鼠标移动到修改的文件处,点击右侧的StageFile,即可暂存(Stage)该文件

可以看到文件移动到了下方的Staged Files区域

如果想要暂存所有文件可以点击右上角的Stage all changes

按文件夹暂存则是右键文件夹,然后选择Stage folder

所有需要暂存的文件都放入暂存区后,在Commit Message填写修改日志,点击Commit changes就可以将修改提交到本地仓库

提交修改之后,可以看到主界面会有一条对应日志的提交记录。

拉取(Pull)

当有其他人提交一些更改到远程分支时,需要通过Pull操作将其他人的修改同步到本地。Pull的操作十分简单,只需要点击顶部的Pull按钮即可

在进行Pull之前,有两类本地分支的状态:

第一类最简单,本地和远程都处在同一条线上。代表本地未commit任何文件,但是其他人Push了一些修改到远程分支

此时进行Pull操作之后,远程和本地分支的标识都在同一个地方,说明Pull成功,本地和远程的分支完全一致。

第二类情况是,本地进行修改并且Commit之后,没有推送到远端。

此时本地和远程两条分支在两条线上并且本地和远程分支没有汇合到一起。当远程分支的修改时间在本地Commit之后,远程分支显示在本地分支上方

反之远程分支显示在本地分支下方

直接点击Pull即可进行拉取。Pull完成后,可以看到虽然远程代码和本地依然是在两条线上,但是远程分支汇聚到了本地分支上,代表Pull成功。

推送(Push)

当需要将本地分支的修改推送到远程分支时,就需要进行推送(Push)操作,需要注意的时,在Push之前需要先进行Pull操作,将远程分支的内容同步到本地才可以进行Push。

Push操作也十分简单,点击顶部的Push即可

Push成功之后,可以看到小圆点和小电脑此时处在同一行。说明Push 成功,本地和远程的分支完全一致。

创建分支(Create Branch

右键希望创建分支的位置,选择Create branch here

之后在左侧会出现一个enter branch name的弹窗,输入分支名后,点击Enter即可创建分支

这里输入的分支名为testBranch,可以看到创建后会有一个小电脑的图标,代表本地分支

检出分支(Checkout

当想要从一个分支切换到另外一个分支的时候,可以通过Checkout进行切换,具体操作是右键点击需要切换的分支,选择"Checkout 分支名称"。(该操作也可以化简为直接双击分支)

当切换到该分支时,可以看到分支左侧有一个打钩的图标.

Checkout可以选择切换到本地分支,或者远程分支。如果不存在本地分支,可以直接双击远程分支的所在的圆点。

会自动生成一个本地分支。

如果已经存在本地分支,并且本地分支和远程和分支不在相同的位置,选择Checkout远程分支,会出现以下提示。如果选择Reset Local Here,相当于将本地分支全部重置,并且同步到远程分支所在的位置。(特别注意,该操作会将本地未PushCommit全部丢弃,不要轻易执行该操作)如果不希望重置本地分支,可以选择Cancel取消。大多数情况下,如果存在本地分支,都是先Checkout本地分支,然后Pull更新到最新。

合并分支(Merge

不同的分支之间可以进行Merge操作,比如你在自己分支上进行了一些修改之后,希望将修改同步到主干上时,可以进行Merge操作。同时也可以把主干的修改同步到自己的分支上。

具体的操作是,先切换到目标分支,然后右键点击需要合并的源分支,选择"Merge 源分支 into 目标分支"。这样就可以把来源分支的内容合并的目标分支上。

Merge成功后会自动产生一条合并的日志。并且源分支所代表的那根线也汇聚到目标分支上了

采用提交(Cherry Pick Commit)

有时候你在某个分支上做了多个修改,比如“添加图片”(A),"修改图片参数"(B),“修改代码”(C)。这时候,你想要在另外一个目标分支上应用A修改,但是又不想其他修改也合并到目标分支,这时候就可以通过Cherry pick commit实现该操作。

具体步骤是,右键点击需要采用的提交,然后选择Cherry pick commit

操作完成之后可以看到目标分支上出现了一条跟采用提交相同的日志

恢复提交(Revert Commit)

如果一个已经提交的修改,希望将它恢复到提交之前的状态,就可以使用Revert Commit操作。只需要右键点击需要恢复的提交,选择Revert commit即可

操作完成之后会自动生成一个Revert日志

处理冲突(Resolve Conflict)

处理冲突是git工作流中最为麻烦的。一般原因是两个分支同时对一个文件进行了修改。下面举一个简单的例子,来模拟这样一个情况。分支BranchA和分支BranchB都有个文件TestScript.cs,里面的内容就是声明了一个变量a,一开始a的值是0。

XML
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    int a = 0;
}

然后在BranchA把a的值改成100,在BranchB的值改成50。然后尝试将BranchB Merge到BranchA上。

可以看到左下角会弹出一个Merge Failed的提示

并且顶部同样会有一个黄色的提示,文件修改区的Conflicted Files会显示哪个文件出现冲突。

点击冲突区的文件,会进入处理冲突的界面。可以看到冲突界面有三块区域

左上角为BranchA的内容

右上角为BranchB的内容

底部为输出区域的内容

这时候如果想要采用BranchA的提交可以点击出现冲突那一行左侧的勾选框

可以看到下方的输出区域的内容也跟着变成跟BranchA相同的修改

这时候冲突便解决完毕了。可以点击右上角的Save按钮,退出处理冲突界面。

此时可以看到TestScript.cs从冲突区,移动到了下方的暂存区。并且自动填入了Commit Message。如果确定采用这次的冲突处理,可以点击左侧的Commit and Merge就完成了整个合并冲突的流程

主界面上也会出现这条Merge成功的Commit信息

实际在操作的过程中会发生单个文件会有多个冲突出现的情况。可以看到输出区域Output,会显示conflict n of m。n代表当前查看的是第n个冲突,m代表一共有几个冲突。可以点击右侧的箭头在不同的冲突之间切换。

有时候会出现单个文件的冲突特别多的情况。或者由于修改prefab或者场景导致不知道如何去一条一条地处理冲突。这时候可以直接点击顶部两个勾选框,选择直接采用哪个分支的文件。比如点击左侧A的勾选框,代表直接采用BranchA上的文件,完全忽略BranchB上的修改。后续可以等待冲突处理完之后再手动将BranchB上的修改添加回来。

在处理冲突直接采用哪个文件时,建议大家按照以下的原则进行选择

(1)、优先采用其他人修改的文件

(2)、优先采用远程分支的文件

(3)、优先采用修改较多的文件

在处理冲突的时候还有一种简单粗暴的处理方式,就是在Conflicted Files选择Mark all resolved

这样GitKranken会把所有冲突标记为已经解决。但是实际上文件的内容并不是正确的,比如前面那个修改a值的例子,选择Mark all resolved的输出内容是下图这个样子。同时把两个分支的内容都填进去了,并且还有

Git自动输出的提示“<<< Head  ===  >>> branchA”,最后还是需要手动地去解决。

GitKranken操作流程

1.清空修改区

在进行Pull或者切换分支的操作之前,需要先清空修改区。

清空有几种方式:

(1)丢弃修改(Discard)

(2)贮藏(Stash)

(3)提交修改(Commit)

具体操作可以查看上一个章节中对应基本操作

2.确定分支

清空完修改区后,需要确定是在哪个分支上进行操作。之后需要切换到对应分支。可以先查看本地是否有该分支。(左侧Local栏),如果存在。直接双击该分支即可切换到该分支上。如果该分支本地仓库不存在,可以直接双击远程分支,这样就可以在本地Checkout了一个对应的分支,并完成切换。

3.同步远程分支

切换到对应分支后需要进行Pull的操作,将远程仓库的修改同步到本地。点击Pull按钮,可以完成Pull操作

4.本地进行修改

在进行本地修改的时候,可以自由地创建本地分支,贮藏,或者提交到本地。

点击完贮藏按钮后可以看到顶部出现一个小抽屉的图标,本地所有的修改都临时保存在这个贮藏中

之后再次拉取最新的分支,验证最终效果。

如果发现仍有需要修改的情况,可以直接在最新的分支上修改。也可以根据情况恢复贮藏的内容,右键刚刚贮藏的小抽屉,选择Pop Stash,恢复修改。

常见问题处理

1.文件被其他程序使用

在进行文件操作的时候,(比如Stash,Discard等)可能会出现如下弹窗,导致无法进行操作。原因是,有文件被其他程序使用了,比如播放器,图片浏览器等。这时候,需要把占用该文件的程序关闭,即可顺利进行操作。(如果实在找不到是哪个程序,可以重启电脑)

2.切换分支失败Checkout Failed

在进行分支切换的时候,有时会因为修改区未清空出现如下报错。清空修改区后再切换分支即可。

创作不易,如果觉得这篇文章对你有所帮助,可以动动小手,点个赞哈,ღ( ´・ᴗ・` )比心

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

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

相关文章

CSS变形与动画(三):animation帧动画详解(用法 + 四个例子)

文章目录 animation 帧动画使用定义例子1 字母例子2 水滴例子3 会动的边框例子4 旋转木马 animation 帧动画 定义好后作用于需要变化的标签上。 使用 animation-name 设置动画名称 animation-duration: 设置动画的持续时间 animation-timing-function 设置动画渐变速度 anim…

做好需求分析的4大关键认知

探索如何正确的需求分析&#xff1f;本文详细介绍了4大关键点&#xff0c;帮助您明确用户与产品需求、深入挖掘用户动机&#xff0c;并为产品经理提供筛选需求的实用建议。 一、什么是需求分析以及重要性 需求分析指的是在建立一个新的或改变一个现存的产品时&#xff0c;确定新…

docker run 命令30个常用参数详解

文章目录 0.前言docker run 命令示例 2.Docker run 多种用法知其然知其所以然1. 基本用法2. 启动交互式容器3. 映射端口4. 挂载文件/目录5. 设置环境变量6. 指定容器名称7. 后台运行容器8. 重启策略9. 其他参数 2. docker run 命令参数详解1. -d&#xff1a;以后台模式&#xf…

【云原生,k8s】基于Helm管理Kubernetes应用

第四阶段 时 间&#xff1a;2023年8月18日 参加人&#xff1a;全班人员 内 容&#xff1a; 基于Helm管理Kubernetes应用 目录 一、Kubernetes部署方式 &#xff08;一&#xff09;minikube &#xff08;二&#xff09;二进制包 &#xff08;三&#xff09;Kubeadm …

(白帽黑客)自学笔记

一、前言&#xff1a; 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以…

Unity自定义脚本的 初始模版

参考博主&#xff1a;Unity修改创建的脚本模板&#xff0c;Unity脚本模板路径_unity hub 怎么改脚本模板_先生沉默先的博客-CSDN博客 【100个 Unity实用技能】 ☀️ | Unity自定义脚本的初始模版_unity 模板脚本_呆呆敲代码的小Y的博客-CSDN博客 一&#xff0c;将脚本放到Ed…

【java毕业设计】基于Spring Boot+Vue+mysql的论坛管理系统设计与实现(程序源码)-论坛管理系统

基于Spring BootVuemysql的论坛管理系统设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于Spring BootVuemysql的论坛管理系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及论文的获取…

利用Python隧道爬虫ip轻松构建全局爬虫网络

嘿&#xff0c;爬虫程序员们&#xff01;你们有没有碰到过需要大规模数据爬取的情况&#xff1f;也许你们之前遇到过网站的反爬措施&#xff0c;卡住你们的进度。别担心&#xff0c;今天我来分享一个利用Python隧道爬虫ip实现的方法&#xff0c;帮助你们轻松搭建全局爬虫ip网络…

2.SpringMvc中Model、ModelMap和ModelAndView使用详解

1.前言 最近SSM框架开发web项目&#xff0c;用得比较火热。spring-MVC肯定用过&#xff0c;在请求处理方法可出现和返回的参数类型中&#xff0c;最重要就是Model和ModelAndView了&#xff0c;对于MVC框架&#xff0c;控制器Controller执行业务逻辑&#xff0c;用于产生模型数据…

OJ练习第150题——分割回文串

分割回文串 力扣链接&#xff1a;131. 分割回文串 题目 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 Java代码 class Solution {List<List…

C++ STL list

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C之 STL list介绍和模拟实现 ☂️<3>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;上次我们详细的介绍了vector&#xff0c;今天我们继续来介绍…

卷积操作后特征图尺寸,感受野,参数量的计算

文章目录 1、输出特征图的尺寸大小2、感受野的计算3、卷积核的参数量 1、输出特征图的尺寸大小 如果包含空洞卷积&#xff0c;即扩张率dilation rate不为1时&#xff1a; 2、感受野的计算 例如&#xff0c;图像经过两个3*3&#xff0c;步长为2的卷积后感受野为&#xff1a; co…

Docker数据卷容器

1.数据卷容器介绍 即使数据卷容器c3挂掉也不会影响c1和c2通信。 2.配置数据卷容器 创建启动c3数据卷容器&#xff0c;使用-v参数设置数据卷。volume为目录&#xff0c;这种方式数据卷目录就不用写了&#xff0c;直接写宿主机目录。 创建c1、c2容器&#xff0c;使用–volum…

nginx反向代理流程

一、nginx反向代理流程 反向代理&#xff1a;使用代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络中的上游服务器&#xff0c;并将上游服务器得到的结果返回给请求连接的客户端&#xff0c;代理服务器对外表现就是一个web服务器。Nginx就经常拿来做…

ByteBuffer 使用

ByteBuffer 使用 1 java.nio包中的类定义的缓冲区类型2 缓冲区常用属性2.1缓冲区的容量(capacity)2.2 缓冲区的位置(position)2.3 缓冲区的限制(limit)2.4 缓冲区的标记(mark)2.5 剩余容量 remaining/hasRemaining 3 缓冲区常用方法3.1 创建缓冲区3.1.1 allocate方法3.1.2 wrap…

87-基于stm32单片机粮仓仓库环境温湿度烟雾监测报警系统Proteus仿真+源码

资料编号&#xff1a;087 一&#xff1a;功能介绍&#xff1a; 1、采用stm32单片机OLED显示屏烟雾浓度检测DHT11温湿度电机按键蜂鸣器&#xff0c;制作一个温湿度采集、烟雾浓度采集&#xff0c;OLED显示相关数据&#xff0c; 2、通过按键设置温度上限、烟雾浓度上限&#xff0…

JVM虚拟机:初始化的介绍

本文重点 我们前面学习了三个步骤: 装载 连接 初始化 初始化 初始化的时候,会为静态成员变量赋值初始值,它有两种方式: ①声明类变量是指定初始值 ②使用静态代码块为类变量指定初始值 例子 最后输出的结果为3,它的过程是这样的: main方法中输出T.count,由于count是…

爬虫的代理IP池写哪里了?

亲爱的程序员小伙伴们&#xff0c;想要提高爬虫效率和稳定性&#xff0c;组建一个强大的代理IP池是非常重要的一步&#xff01;今天我就来和你分享一下&#xff0c;代理IP池到底应该写在哪里&#xff0c;以及如何打造一个令人瞩目的代理IP池&#xff01;准备好了吗&#xff1f;…

学习笔记整理-面向对象-03-构造函数

一、构造函数 1. 用new调用函数的四步走 new 函数();JS规定&#xff0c;使用new操作符调用函数会进行"四步走"&#xff1a; 函数体内会自动创建出一个空白对象函数的上下文(this)会指向这个对象函数体内的语句会执行函数会自动返回上下文对象&#xff0c;即使函数没…

STM32单片机SPI通信实战:示例代码详解与应用案例

引言&#xff1a; 单片机SPI&#xff08;串行外设接口&#xff09;通信是一种常用的串行同步通信协议&#xff0c;用于单片机与外设之间的高速数据传输。SPI通信具有简单、高效、可靠等特点&#xff0c;在各种嵌入式系统中被广泛应用。本文将介绍单片机SPI通信的原理、配置和性…