Git本地库操作

对本地库的操作很少,我们学习1~6节即可,其他了解下。我们可以在idea中完成对本地库还有远程库的操作,可视化界面用起来更加舒适而且也不会混淆。

1. Git概述

  • Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

  • Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。

  • 本地库已经实现了版本管理,可以切换分支到任意版本下,如果我们是个人开发者,并且不需要与其他人合作开发,那么在本地库进行版本管理可能已经足够了。但要注意本地库无法备份代码,也不能与其他开发者分享代码。如果你需要和其他人协同工作或者希望备份你的代码,那么最好将代码提交到远程仓库中进行版本管理。这样可以确保对代码进行备份并方便代码共享和合作开发。

2. 何为版本控制

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。

版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。我们就像甲方一样,如果改了七版后还想要回第一版,我们就可以使用Git快速方便地切换回第一版。
虽然我们也可以直接通过备份的方式保存各个版本,但是这种方式不仅占用我们的存储空间,当文件较大时还会占用我们的时间。而且各个版本备份只是Git的一个作用,在远程仓库中还可以通过高亮比较各个版本代码的不同。跟他人分享我们的代码、代码备份、与他人协助开发。

3. Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。

➢ 局域网

​ GitLab

互联网

​ GitHub(外网)

​ Gitee 码云(国内网站)

4. Git安装

我安装在D:\ProgramSofts,安装好后右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端。

在这里插入图片描述

在 Git Bash 终端里输入 git --version 查看 git 版本,如图所示,说明 Git 安装成功。

5. Git常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m “日志信息” 文件名提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

6. 设置用户签名

任意位置右键git Bash然后用以下命令设置用户前面:

git config --global user.name zane (回车)
git config --global user.email 2116514824@qq.com

在家目录下我们可以看到新创建了一个文件.gitconfig
在这里插入图片描述

双击打开查看文件内容或通过git Bash方式获取文件内容
在这里插入图片描述

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。

注意: 这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。

7. 初始化本地库

D:\Git-Space创建一个文件夹git-demo1,然后在文件夹下右键git Bash,输入以下命令:

基本语法

git init

案例实操

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1
$ git init
Initialized empty Git repository in D:/Git-Space/git-demo1/.git/ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ ll -a
total 4
drwxr-xr-x 1 ASUS 197121 0 Jul  5 20:22 ./
drwxr-xr-x 1 ASUS 197121 0 Jul  5 20:22 ../
drwxr-xr-x 1 ASUS 197121 0 Jul  5 20:22 .git/ (.git 初始化的效果,生成 git)

结果查看

初始化后在本地库(我们刚刚所新建的文件夹)下有一个.git文件夹
在这里插入图片描述

8. 查看本地库状态

基本语法

git status

案例实操

首次查看(工作区没有任何文件)

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git status
On branch masterNo commits yetnothing to commit (create/copy files and use "git add" to track)

新增文件(hello.txt)

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ vim hello.txt  //编辑文件,若没有则新建一个,输入后进入编辑区,点击i进入插入状态,输入以下内容:hello git!hello lzk! 按esc退出插入模式后,按下yy表示对光标所在行进行复制,p表示粘贴,编辑完毕,按下:wq表示保存文件
--------------------
hello git!hello lzk!
hello git!hello lzk!

再次查看(检测到未追踪的文件)

  • 未追踪文件表示该文件尚未被添加到暂存区
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git status 
On branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed)hello.txtnothing added to commit but untracked files present (use "git add" to track)

9. 添加暂存区

将工作区的文件添加到暂存区

基本语法

git add 文件名

案例实操

  • 执行命令后并未提示该文件是否加入到暂存区中,所以我们需要查看一下状态,可以忽略警告。
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git add hello.txt  
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory-------------------
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git status
On branch masterNo commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file:   hello.txt  (检测到暂存区有新文件)

10. 提交本地库

将暂存区的文件提交到本地库

基本语法

git commit -m "日志信息" 文件名

案例实操

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git commit -m "my first commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
[master (root-commit) 661f746] my first commit1 file changed, 16 insertions(+)create mode 100644 hello.txt再次查看状态(没有文件需要提交)
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git status
On branch master
nothing to commit, working tree clean

11. 修改文件

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ vim hello.txt (修改文件,因为我们在本地库下执行编辑文件命令,一个本地库为一个文件夹,文件夹下没有同名同后缀的文件,所以修改hello.txt就是修改指定的那个)-----修改为以下内容--------
hello git! hello lzk!
22222222222222222222

查看状态

检测到工作区有文件被修改

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   hello.txtno changes added to commit (use "git add" and/or "git commit -a") //此处命令提示我们可以使用git add方式将工作区中的文件添加到暂存区或者使用git commit -a方式提交
--------------------
不add直接commit
两种情况:
- 新建的文件尚未纳入版本控制体系:必须先add纳入版本控制体系后才可以commit
- 已纳入版本控制体系的文件被修改:可以不add直接commit,Git自动执行了add

将修改的文件再次添加暂存区

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory

暂存区文件提交本地库

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git commit -m "my second commit" hello.txt
.....

12. 查看历史版本

基本语法

git reflog 	查看版本信息
git log     查看版本详细信息

案例实操

  • 新增一次,提交到本地库,为版本1,修改后提交到本地库,为版本2。此时指针HEAD总是指向最后一次修改。本地库只有一份文件,但是git能存在两个版本信息,很神奇。
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git reflog
5c02310 (HEAD -> master) HEAD@{0}: commit: my second commit
661f746 HEAD@{1}: commit (initial): my first commit

13. 版本穿梭

基本语法

git reset --hard 版本号

案例实操

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
--首先查看当前的历史记录,可以看到当前是在 5c02310 这个版本
$ git reflog
5c02310 (HEAD -> master) HEAD@{0}: commit: my second commit
661f746 HEAD@{1}: commit (initial): my first commitASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
--切换到 661f746 版本,也就是我们第一次提交的版本
$ git reset --hard 661f746
HEAD is now at 661f746 my first commitASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
--切换完毕之后再查看历史记录,当前成功切换到了 661f746 版本
$ git reflog
661f746 (HEAD -> master) HEAD@{0}: reset: moving to 661f746
5c02310 HEAD@{1}: commit: my second commit
661f746 (HEAD -> master) HEAD@{2}: commit (initial): my first commit

14. Git分支操作

什么是分支

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

master为开发主线,其余为分支,分支为主线分支进行功能开发,开发好后将功能合并到master上。

分支的好处

  • 同时并行推进多个功能开发,提高开发效率。

  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

分支的操作命令

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

查看分支

基本语法
git branch -v
案例实操
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git branch -v
* master 661f746 my first commit   (*代表当前所在的分区)

创建分支

基本语法
git branch 分支名
案例实操
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git branch hot-fix  (创建分支hot-fix)ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git branch -vhot-fix 661f746 my first commit (刚创建的新的分支,并将主分支 master
的内容复制了一份给它)
* master  661f746 my first commit  (当前分支仍为master)

修改分支

--在 maste 分支上做修改
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ vim hello.txt
--添加暂存区
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git add hello.txt
--提交本地库
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git commit -m "my third commit" hello.txt
[master 1eec0ee] my third commit1 file changed, 1 insertion(+), 5 deletions(-)--查看分支
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git branch -vhot-fix 661f746 my first commit (hot-fix 分支并未做任何改变)
* master  1eec0ee my third commit (当前 master 分支已更新为最新一次提交
的版本)
所以修改一个分支上的内容并不会对另一个分支内容产生影响。
--查看分支内容
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ cat hello.txt
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
lzk first commit master!
切换分支
基本语法
git checkout 分支名
案例实操
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'
--发现当先分支已由 master 改为 hot-fix
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (hot-fix)
--修改hot-fix分支为以下的内容
$ vim hello.txt
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
lzk second commit hot-fix!
hello git!hello lzk!--添加暂存区
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (hot-fix)
$ git add hello.txt--提交本地库
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (hot-fix)
$ git commit -m "hot-fix commit" hello.txt
[hot-fix 5219180] hot-fix commit1 file changed, 1 insertion(+), 5 deletions(-)

合并分支

基本语法
git merge 分支名
案例实操

在master分支上合并hot-fix分支

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (hot-fix)
$ git checkout master
Switched to branch 'master'ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)
$ git merge hot-fix
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt (产生冲突)
Automatic merge failed; fix conflicts and then commit the result.
--冲突产生的表现:后面状态为 MERGING
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master|MERGING)
冲突产生的原因:

合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。

由于master分支上的hello.txt文件(总12行)后两行与要合并的分支hot-fix的hello.txt文件(总12行)后两行的内容不同,所以Git不知道谁覆盖谁,所以合并失败!

查看状态

检测到文件有两处修改

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master|MERGING)
$ git status
On branch master
You have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified:   hello.txtno changes added to commit (use "git add" and/or "git commit -a")
解决冲突

编辑有冲突的文件,删除特殊符号,决定要使用的内容

提示:特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix

ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master|MERGING)
$ cat hello.txt
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
<<<<<<< HEAD
hello git!hello lzk!
lzk first commit master!
=======
lzk second commit hot-fix!
hello git!hello lzk!
>>>>>>> hot-fixASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master|MERGING)
$ vim hello.txt
按上面的提示进行修改操作--修改完再次查看
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master|MERGING)
$ cat hello.txt
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
hello git!hello lzk!
lzk first commit master!
lzk second commit hot-fix!--添加到暂存区
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master|MERGING)
$ git add hello.txt--执行提交
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master|MERGING)
$ git commit -m "merge hot-fix"
[master 651389c] merge hot-fix--发现后面 MERGING 消失,变为正常
ASUS@LAPTOP-L64DOQDG MINGW64 /d/Git-Space/git-demo1 (master)

实际应用:将项目A同时安排给B,C去完成,每人负责不同的模块,项目A此时就是主线分支master,而B,C需要在其他分支上进行工作,完成各自模块后自身分支合并到主线分支上去。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞翔的小鸟小游戏

主类 package APP;import 框架.GameFrame;public class GameApp {public static void main(String[] args) {//游戏的入口new GameFrame();} }场景实物 package 框架;import 图导.Constant; import 图导.GameUtil;import java.awt.*; import java.awt.image.BufferedImage; …

【腾讯云云上实验室-向量数据库】Tencent Cloud VectorDB在实战项目中替换Milvus测试

为什么尝试使用Tencent Cloud VectorDB替换Milvus向量库&#xff1f; 亮点&#xff1a;Tencent Cloud VectorDB支持Embedding&#xff0c;免去自己搭建模型的负担&#xff08;搭建一个生产环境的模型实在耗费精力和体力&#xff09;。 腾讯云向量数据库是什么&#xff1f; 腾…

C++的new / delete 与 C语言的malloc/realloc/calloc / free 的讲解

在C语言中我们通常会使用malloc/realloc/calloc来动态开辟的空间&#xff0c;malloc是只会开辟你提供的空间大小&#xff0c;并不会初始化内容&#xff1b;calloc不但会开辟空间&#xff0c;还会初始化&#xff1b;realloc是专门来扩容的&#xff0c;当你第一次开辟的空间不够用…

Javascript每天一道算法题(十四)——合并数组区间_中等

文章目录 1、问题2、示例3、解决方法&#xff08;0&#xff09;方法0——双指针&#xff08;错误思路&#xff09;&#xff08;1&#xff09;方法1——双指针&#xff08;正确&#xff09; 总结 1、问题 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 inte…

[点云分割] 基于法线差的分割

效果&#xff1a; 总体思路&#xff1a; 1、计算DoN特征 2、依据曲率进行过滤 3、依据欧式距离进行聚类 计算DoN特征的目的是为了提供准确的曲率信息。 其他&#xff1a; 计算DoN特征&#xff0c;这个算法是一种基于法线差异的尺度滤波器&#xff0c;用于点云数据。对于点…

【uniapp】uniapp开发小程序定制uni-collapse(折叠面板)

需求 最近在做小程序&#xff0c;有一个类似折叠面板的ui控件&#xff0c;效果大概是这样 代码 因为项目使用的是uniapp&#xff0c;所以打算去找uniapp的扩展组件&#xff0c;果然给我找到了这个叫uni-collapse的组件&#xff08;链接&#xff1a;uni-collapse&#xff09…

Unity中Shader的Standard材质解析(一)

文章目录 前言一、在Unity中&#xff0c;按一下步骤准备1、在资源管理面板创建一个 Standard Surface Shader2、因为Standard Surface Shader有很多缺点&#xff0c;所以我们把他转化为顶点片元着色器3、整理只保留主平行光的Shader效果4、精简后的最终代码 前言 在Unity中&am…

Keil Vision5—新建工程project

注意&#xff1a;创建的工程目录必须是纯英文目录 目录 1.开始配置 2.为该路径下新建个文件夹 3.选择器件 4.工程配置 4.右击魔术棒&#xff0c;设置参数 ​编辑 &#xff08;1&#xff09;target配置 &#xff08;2&#xff09;output配置 &#xff08;3&#xff09;c…

Java实现王者荣耀小游戏

主要功能 键盘W,A,S,D键&#xff1a;控制玩家上下左右移动。按钮一&#xff1a;控制英雄发射一个矩形攻击红方小兵。按钮控制英雄发射魅惑技能&#xff0c;伤害小兵并让小兵停止移动。技能三&#xff1a;攻击多个敌人并让小兵停止移动。普攻&#xff1a;对小兵造成基础伤害。小…

软件工程——数据流图(20分把握在自己手里)【言简意赅】

数据流图【DFD -> Data Flow Diagram】 确定外部实体&#xff1a; 在一个对于某系统的描述中&#xff0c;我们需要分辨的是&#xff0c;该系统的使用人员(或外部设备)&#xff0c;以及系统所反馈的人员(或外部设备)是谁&#xff1f; 这就是外部实体&#xff01;与系统内部处…

基于STC12C5A60S2系列1T 8051单片读写掉电保存数据IIC总线器件24C02地址码并显示在液晶显示器LCD1602上应用

基于STC12C5A60S2系列1T 8051单片读写掉电保存数据IIC总线器件24C02地址码并显示在液晶显示器LCD1602上应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器…

【标注数据】labelme的安装与使用

这里写目录标题 下载标数据 下载 标数据 打开自动保存 创建矩形