Git学习笔记——超详细

news2024/11/18 3:36:56

Git笔记

安装git:

apt install git

创建版本库:

git init

添加文件到版本库:

git add 文件

提交文件到仓库:

git commit -m “注释”

查看仓库当前的状态信息

git status

查看修改内容和之前版本的区别,在git add之前可以看到

git diff 文件

查看提交的历史记录

git log 加上 --pretty=oneline 一行输出

版本回退:往前回退多个版本用HEAD^^ 100的话使用HEAD~100

git reset --hard HEAD^

回到指定版本

git reset --hard 版本号的前几位

查询之前执行的命令:历史命令,帮助回到之前的版本

git reflog

git add 文件到暂存区 git commit 提交到工作区,commit的是已经在暂存区的内容,将暂存区里的所有内容提交

**场景1:**当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

**场景2:**当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

git当删除工作区的文件text.txt后第一个场景,删除版本库中的该文件,git rm test.txt 然后 git commit -m "remove test.txt " ;第二个场景,恢复工作区的文件从版本库,执行 git checkout – test.txt

创建新的ssh密钥添加到github:

以下是重新生成 SSH 密钥并将其添加到 GitHub 帐户的步骤:

1. 打开终端并输入以下命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
2. 按 Enter 键三次,接受默认文件名和位置。

3. 输入以下命令将新生成的 SSH 密钥添加到 ssh-agent:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
4. 复制新生成的 SSH 公钥。您可以使用以下命令将其复制到剪贴板:
pbcopy < ~/.ssh/id_rsa.pub
5. 转到您的 GitHub 帐户设置页面,选择“SSH 和 GPG 密钥”,然后单击“新 SSH 密钥”按钮。

6. 在“标题”字段中输入一个描述性标题,然后将剪贴板中的 SSH 公钥粘贴到“密钥”字段中。

7. 单击“添加 SSH 密钥”按钮。

现在,您应该能够使用新生成的 SSH 密钥访问您的 GitHub 存储库。

添加远程仓库:

$ git remote add origin git@github.com:github账户名/仓库名.git              origin:远程库的名字

推送本地库的内容到远程库:

 git push -u origin master   #第一次推送master所有的内容,加上-u,保证本地和远程的分支关联起来
$ git push origin master         #之后提交

删除远程库:

git remote rm origin

删除远程库之前建议使用git remote -v查看远程库信息:

$ git remote -v
origin  git@github.com:github账户名/learn-git.git (fetch)
origin  git@github.com:github账户名/learn-git.git (push)

克隆远程仓库:

git clone git@github.com:github账户名/仓库名.git

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>或者git switch <name>

创建+切换分支:git checkout -b <name>或者git switch -c <name>

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

删除分支:git branch -d <name>

解决冲突:

准备新的feature1分支,继续我们的新分支开发:

$ git switch -c feature1
Switched to a new branch 'feature1'

修改readme.txt最后一行,改为:

Creating a new branch is quick AND simple.

feature1分支上提交:

$ git add readme.txt

$ git commit -m "AND simple"
[feature1 14096d0] AND simple
 1 file changed, 1 insertion(+), 1 deletion(-)

切换到master分支:

$ git switch master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。

master分支上把readme.txt文件的最后一行改为:

Creating a new branch is quick & simple.

提交:

$ git add readme.txt 
$ git commit -m "& simple"
[master 5dc6824] & simple
 1 file changed, 1 insertion(+), 1 deletion(-)

现在,master分支和feature1分支各自都分别有新的提交,变成了这样:

                            HEAD
                              │
                              │
                              ▼
                           master
                              │
                              │
                              ▼
                            ┌───┐
                         ┌─▶│   │
┌───┐    ┌───┐    ┌───┐  │  └───┘
│   │───▶│   │───▶│   │──┤
└───┘    └───┘    └───┘  │  ┌───┐
                         └─▶│   │
                            └───┘
                              ▲
                              │
                              │
                          feature1

这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

果然冲突了!Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

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:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

我们可以直接查看readme.txt的内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改如下后保存:

Creating a new branch is quick and simple.

再提交:

$ git add readme.txt 
$ git commit -m "conflict fixed"
[master cf810e4] conflict fixed

现在,master分支和feature1分支变成了下图所示:

                                     HEAD
                                       │
                                       │
                                       ▼
                                    master
                                       │
                                       │
                                       ▼
                            ┌───┐    ┌───┐
                         ┌─▶│   │───▶│   │
┌───┐    ┌───┐    ┌───┐  │  └───┘    └───┘
│   │───▶│   │───▶│   │──┤             ▲
└───┘    └───┘    └───┘  │  ┌───┐      │
                         └─▶│   │──────┘
                            └───┘
                              ▲
                              │
                              │
                          feature1

用带参数的git log也可以看到分支的合并情况:

$ git log --graph --pretty=oneline --abbrev-commit   #查看分支合并图
*   cf810e4 (HEAD -> master) conflict fixed
|\  
| * 14096d0 (feature1) AND simple
* | 5dc6824 & simple
|/  
* b17d20e branch test
* d46f35e (origin/master) remove test.txt
* b84166e add test.txt
* 519219b git tracks changes
* e43a48b understand how stage works
* 1094adb append GPL
* e475afc add distributed
* eaadf4e wrote a readme file

最后,删除feature1分支:

$ git branch -d feature1
Deleted branch feature1 (was 14096d0).

合并分支时,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

首先,仍然创建并切换dev分支:

$ git switch -c dev
Switched to a new branch 'dev'

修改readme.txt文件,并提交一个新的commit:

$ git add readme.txt 
$ git commit -m "add merge"
[dev f52c633] add merge
 1 file changed, 1 insertion(+)

现在,我们切换回master

$ git switch master
Switched to branch 'master'

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

合并后,我们用git log看看分支历史:

$ git log --graph --pretty=oneline --abbrev-commit
*   e1e9c68 (HEAD -> master) merge with no-ff
|\  
| * f52c633 (dev) add merge
|/  
*   cf810e4 conflict fixed
...

可以看到,不使用Fast forward模式,merge后就像这样:

git-no-ff-mode

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动,但是需要git stash命令保存现场,再git cherry-pick ,最后再 git stash pop,此时可能会有冲突,需要处理冲突;

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

多人协作

  • 查看远程库信息,使用git remote -v

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

rebase

  • rebase操作可以把本地未push的分叉提交历史整理成直线;git rebase
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

tag

  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

  • 命令git tag可以查看所有标签。

  • git show <tagname> 查看标签详细信息

  • 命令git push origin <tagname>可以推送一个本地标签;

  • 命令git push origin --tags可以推送全部未推送过的本地标签;

  • 命令git tag -d <tagname>可以删除一个本地标签;

  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

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

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

相关文章

抖音热搜榜:探索热门话题,引领潮流新风尚

在信息爆炸的时代&#xff0c;我们每天都在接收大量的新鲜资讯。而作为短视频领域的佼佼者&#xff0c;抖音已经成为了众多网友获取信息、娱乐休闲的重要平台。抖音热搜榜更是凭借其独特的魅力&#xff0c;吸引了无数用户的关注。本文将为您深度解析抖音热搜榜&#xff0c;带您…

vue2 element手术麻醉信息系统源码,手术预约、手术安排、排班查询、手术麻醉监测、麻醉记录单

手术麻醉临床信息系统有着完善的临床业务功能&#xff0c;能够涵盖整个围术期的工作&#xff0c;能够采集、汇总、存储、处理、展现所有的临床诊疗资料。通过该系统的实施&#xff0c;能够规范麻醉科的工作流程&#xff0c;实现麻醉手术过程的信息数字化&#xff0c;自动生成麻…

顺应趋势,用大数据精准营销抓住大数据时代的机遇

想先问大家一个问题&#xff1a;“你觉得现在的营销好做吗&#xff1f;”想必大多数人在说到自己如何营销这一点上&#xff0c;都有道不完的“苦水”。“现在找客户难&#xff0c;投了几十万的广告费&#xff0c;真正来的客户却少得可怜&#xff0c;平均获客成本高得吓人”一位…

AD9371 官方例程HDL详解(一)

文章目录 前言一、AD9371 ----> FMC_DP二、FMC_DP ----> FPGA_TX/RX三、rx_data_x and tx_data_x must be connected to the same channel四、ADRV9009 前言 axi_ad9371_tx_jesd --> util_ad9371_xcvr接口映射讲解 一、AD9371 ----> FMC_DP AD9371内部原理图 …

[计算机网络基础]数据链路层

相比于网络层,数据链路层的内容多而且很杂,因为同时涉及到一些物理和网络的东西,甚至内容很冗杂.因为一些原因,这篇文章将主要以对比为主,而不是完全树形展开,方便各位看官理解. 这篇我估计要写上整整两天......太多了......各位看官尤其是同学们,来个赞/收藏/关注呗 1.关于数…

StudioOne升级6.5版本,最新功能测评

PreSonus流行的Studio One DAW的最新更新现已发布&#xff0c;标题功能是许多用户一直在等待的&#xff1a;支持包括杜比全景声在内的沉浸式音频格式。该软件的分数编辑器也已更新&#xff0c;以及其他一些一般增强和改进&#xff0c; 集成 Dolby Atmos 的 Studio One 正式发布…

【JavaEE】CAS -- 多线程篇(7)

CAS 1. 什么是 CAS2. CAS 伪代码3. CAS 是怎么实现的4. CAS的应用4.1 实现原子类4.2 实现自旋锁 5. CAS 的 ABA 问题 1. 什么是 CAS CAS: 全称Compare and swap&#xff0c;字面意思:”比较并交换“能够比较和交换 某个寄存器中的值和内存中的值, 看是否相等, 如果相等, 则把另…

三、组件与数据交互

一、组件基础 1、单文件组件 第一步&#xff1a;引入组件 import ComponentTest from ./components/ComponentTest.vue 第二步&#xff1a;挂载组件 components: {ComponentTest } 第三步&#xff1a;显示组件 <ComponentTest></ComponentTest><!-- 父组件 --…

python requests爬取税务总局税案通报、税务新闻和政策解读

文章目录 环境配置页面爬取流程税案通报爬取code税务新闻爬取政策解读爬取 环境配置 python&#xff1a;3.7 requests&#xff1a;发出请求&#xff0c;返回页面 beautifulsoup&#xff1a;解析页面 time&#xff1a;及时 warnings&#xff1a;忽视警告 页面 网址&#xff1…

游戏d3dcompiler_43.dll缺失怎么修复,分享5个快速有效的修复方法

最近我遇到了一个特别棘手的问题&#xff1a;当我试图运行一款新的游戏时&#xff0c;我收到一个令人困惑的错误消息&#xff0c;提示“d3dcompiler_43.dll丢失”。这个问题给我的游戏生活带来了很大的困扰&#xff0c;因为我热爱的游戏突然之间变得无法游玩。在这篇文章中&…

Android屏幕刷新机制

基础知识 CPU运行在Android设备上的中央处理器&#xff08;Central Processing Unit&#xff09;是Android设备的核心组件之一&#xff0c;负责执行计算和控制设备的各种操作。 Android设备上的CPU通常采用ARM架构&#xff0c;如ARM Cortex-A系列处理器。这些处理器具有高性能…

C++ Primer笔记002:引用/指针/const

文章目录 1. 引用1.1 引用不是对象或变量1.2 引用必须初始化1.3 不能定义引用的引用1.4 引用类型要适配1.5 非const引用不能绑定字面值 2. 指针2.1 指针和引用的区别2.2 指针的指针2.3 类型一致2.4 指针的引用2.5 void 型指针 3. const3.1 const的基本作用3.2 对const变量的引用…

【VisualStudio 】VisualStudio2022 项目模板

引言 最近写项目已经形成的自己的套路&#xff1a;新建一个prism工程&#xff0c;添加主界面&#xff0c;配置界面&#xff0c;等&#xff0c;很多常用功能已经封装成项目进行复用。如果每次来了一个新的活&#xff0c;重新配置这些都是完全重复的工作&#xff08;大概需要十几…

第三章 Python 机器学习入门之C4.5决策树算法

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 第二章 Python 机器学习入门之逻辑回归 番外 Python 机器学习入门之K近邻算法 番外 Python 机器学习入门之K-Means聚类算法 第三章 Python 机…

C++多态、虚函数、纯虚函数、抽象类

多态的概念 通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 举个简单的例子&#xff1a;抢红包&#xff0c;我们每个人都只需要点击一下红包&#xff0c;就会抢到金额。有些人能…

Windows11突然VM虚拟机无法运行报错与 Device/Credential Guard 不兼容

windows11长时间没用vmware,突然使用时打开报一下错&#xff1a; 解决方案&#xff1a; 以管理员身份运行“Windows Powershell (管理员)”&#xff08;Windows键X键&#xff09;&#xff0c;输入以下命令重启电脑。 bcdedit /set hypervisorlaunchtype off 注意&#xff1a…

有哪些专业的配音APP推荐?

作为当今社交媒体时代的一员&#xff0c;我们经常需要在各种场合中使用配音软件&#xff0c;无论是自制视频内容还是进行个人创作&#xff0c;一款好用且免费的配音软件显得很重要。今天给大家分享一款备受好评的免费配音软件&#xff0c;它不仅功能强大&#xff0c;而且操作简…

2023年【山东省安全员A证】考试内容及山东省安全员A证考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 山东省安全员A证考试内容是安全生产模拟考试一点通生成的&#xff0c;山东省安全员A证证模拟考试题库是根据山东省安全员A证最新版教材汇编出山东省安全员A证仿真模拟考试。2023年【山东省安全员A证】考试内容及山东省…

MS17010(永恒之蓝)漏洞实战

曾因苦难多壮志&#xff0c;不教红尘惑坚心。 工具检测 实战过程 使用搜索命令&#xff0c;搜索ms17_010 search ms17_010 搜索网段中主机漏洞 use auxiliary/scanner/smb/smb_ms17_010 照例&#xff0c;show options 看一下配置 设置网段&#xff0c;run运行就行了 使用攻…

leetcode 310 最小高度树

树是一个无向图&#xff0c;其中任何两个顶点只通过一条路径连接。 换句话说&#xff0c;一个任何没有简单环路的连通图都是一棵树。 给你一棵包含 n 个节点的树&#xff0c;标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表&#xff08;每一个边都是一对…