Git学习记录

针对各个项目的gitignore文件示例

github/gitignore: A collection of useful .gitignore templates

 忽略文件

文件 .gitignore 的格式规范如下:
• 所有空行或者以 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式可以以( / )开头防止递归。
• 匹配模式可以以( / )结尾指定目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号( ! )取反。

 glob模式是指shell所使用的简化的正则表达式,*表示匹配零个或者多个任意字符,[abc]表示匹配任意一个字符,?表示匹配任意字符,中划线表示范围匹配,[0-9]表示匹配数字,两个**表示匹配任意中间目录,比如a/**/z可以匹配a/z,a/b/c/z,a/b/z登目录。

例子:

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

 查看暂存状态

git status

移除文件

git rm filename

从暂存区删除

 git rm --cached README

 重命名

git mv README.MD README
git status

相当于执行了如下三个命令:

mv README.MD README
git rm README.MD
git add README

重新提交

git commit --amend
这个命令会将暂存区中的文件提交。如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。
你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
git commit -m "initial commit"
git add forgotten_file
git commit --amend

 最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。

取消暂存的文件

git reset HEAD <file>... 来取消暂存

撤消对文件的修改

git checkout -- <file>

从远程仓库中抓取与拉取

git fetch remote-name
这个命令会访问远程仓库,从中拉取所有你还没有的数据。执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。 必须注意 git fetch 命令会将 数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。当准备好时你必须手动将其合并入你的工 作。

远程仓库的移除与重命名

pb 重命名为 paul
 git remote rename pb paul

列出标签

 git tag
$ git tag -l 'v1.8.5*'
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5

附注标签

git tag -a v1.4 -m 'my version 1.4'

-m 选项指定了一条将会存储在标签中的信息。如果没有为附注标签指定一条信息,Git 会运行编辑器要求你输入信息。

轻量标签

轻量标签本质上是将提交校验和存储到一个文件中 - 没有保存任何其他信息。创建轻量标签,不需要使用 -a -s -m 选项,只需要提供标签名字:
 git tag v1.4-lw

后期打标签

 git tag -a v1.2 9fceb02

 共享标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。

 git push origin [tagname]
一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。这将会把所有不在远程仓库
服务器上的标签全部传送到那里。
 git push origin --tags

 检出标签

使用 git checkout -b [branchname] [tagname] 在特定的标签上创建一个 新分支

 Git 别名

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.unstage 'reset HEAD --'

分支切换

$ git checkout testing

 查看分叉历史

git log --oneline --decorate --graph --all

创建分支的同时切换分支

$ git checkout -b iss53

查看每一个分支的最后一次提交

 git branch -v

查看哪些分支已经合并到当前分支

git branch --merged

查看所有包含未合并工作的分支

git branch --no-merged

设置上游分支

git checkout localfix
git branch -u origin/serverfix

执行这条命令后,当你在 localfix 分支上运行 git pull 时,Git 会自动从 origin/serverfix 分支拉取更新。当你运行 git push 时,Git 会将 localfix 分支的更改推送到 origin/serverfix 分支。

检查上游分支

git branch -vv

创建跟踪分支

git checkout --track origin/serverfix

执行这条命令后,你将看到类似如下的输出:

Branch 'serverfix' set up to track remote branch 'serverfix' from 'origin'.
Switched to a new branch 'serverfix'

执行 git checkout --track origin/serverfix 后,Git 会在本地创建一个名为 serverfix 的分支,并将其设置为跟踪 origin/serverfix。这样,新的本地分支 serverfix 会自动与远程的 origin/serverfix 关联。

创建跟踪分支指定本地分支名称

git checkout -b sf origin/serverfix

执行这条命令后,你将看到类似如下的输出:

Switched to a new branch 'sf'
Branch 'sf' set up to track remote branch 'serverfix' from 'origin'.

表示本地分支 sf 已成功创建,其起点为 origin/serverfix,并且你现在已经切换到这个新创建的本地分支 sf

删除远程分支

git push origin --delete serverfix

删除本地分支

git branch -d serverfix

指定分支的变基操作

git rebase --onto master server client

详细解释

  • git rebase: 重新应用提交的命令,用于改变提交历史。
  • --onto master: 指定新的基础分支(即目标分支),这里是 master
  • server: 基线分支,表示从这个分支开始的更改将被重新应用。
  • client: 当前分支,表示将 client 分支上从 server 分支开始的所有更改重新应用到 master 上。
以上命令的意思是:“取出 client 分支,找出处于 client 分支和 server 分支的共同祖先之后的修改,然后把它们在 master 分支上重演一遍”。
快进合并 master 分支
$ git checkout master
$ git merge client

接下来你决定将 server 分支中的修改也整合进来。使用 git rebase [basebranch] [topicbranch]
令可以直接将特性分支(即本例中的 server )变基到目标分支(即 master )上。这样做能省去你先切换到 server 分支,再对其执行变基命令的多个步骤。
$ git rebase master server

 然后就可以快进合并主分支 master 了:

$ git checkout master
$ git merge server
至此, client server 分支中的修改都已经整合到主分支里去了,你可以删除这两个分支,最终提交历史会变成图 最终的提交历史 中的样子:
$ git branch -d client
$ git branch -d server

 git pull --rebase

详细解释

  • git pull: 从远程仓库拉取更改并合并到当前分支。
  • --rebase: 选项表示在拉取远程更改之后使用 rebase 而不是 merge。具体来说,它会将本地的更改(即当前分支的提交)暂时摘下,应用远程分支的更改,然后再将本地的更改重新应用到这些新拉取的更改之上。

假设你有如下的提交历史:

远程仓库: A---B---C---D (origin/master)
本地仓库: A---B---C---E---F (master)

当你运行 git pull --rebase 时,以下步骤会发生:

  1. 拉取远程更改: Git 从远程仓库拉取提交 D

  2. 暂存本地更改: Git 暂时将本地的提交 EF 摘下。

  3. 应用远程更改: Git 将远程的提交 D 应用到本地仓库。

  4. 重新应用本地更改: Git 将本地的提交 EF 重新应用到 D 之后。

最终的历史将变成:

A---B---C---D---E---F (master)

笔记转录:

git reset --soft HEAD^   # 命令的作用就是将最近的一次提交撤销,但是保留已经改动的文件
git branch -a            # 查看所有分支
git branch -r            # 查看远端分支
git stash                # 暂存当前更改
git stash pop            # 应用并删除stash
git remote -v            # 查看远程仓库地址
git remote set-url origin https://github.com/你的用户名/你的仓库名.git # 修改远程仓库地址
git stash list           # 查看stash列表
git stash clear          # 清楚stash缓存git log --graph --decorate --oneline --all                         # 查看提交树
git log --graph --abbrev-commit --decorate --date=relative --all   # 查看提交树如果拉取远程master分支之后,本地的未提交的代码不想再POP到dev_xxxxxx分支,而是想新建一个分支并且POP到新的分支上,如何操作,当前在dev_xxxxxx分支上
git stash
git checkout master
git pull origin master
git checkout dev_invoice_mailing
git checkout -b new_feature_branch
git stash pop删除本地分支:
git checkout master # 切换到其他分支如master
git branch -d dev_xxxxx # 删除分支,有可能提示如下错误
error: The branch 'dev_xxxxx' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev_xxxxx'.使用-D强制删除
git branch -D dev_xxxxx已经将分支推送到远程仓库
git push origin --delete dev_xxxxx
或者
git push origin :dev_xxxxx# git diff 可以使用 -w 忽略空白变更,或者使用 --color-words 来一词一词地显示变更
# 查看文件变更内容
git diff file-path
# 比较两次提交之间的差异
git diff commit-id1 commit-id2
# 查看工作目录中未暂存的变更
git diff # 命令会显示自上次提交以来,你在工作目录中对文件所做的更改,但尚未使用 git add 暂存的更改
# 查看已暂存的变更
git diff --staged
git diff --cached
# 查看两个分支的差异
git diff branch-1 branch-2
# 查看某次提交的变更
git diff <commit-id>^! # 使用 ^! 来查看某次提交相对于它的父提交的变更
# 查看暂存区域与某个提交的差异
git diff --cached <commit>
# 查看工作目录与某个提交的差异
git diff <commit># 删除旧文件
git rm file

本地创建一个与远程分支 dev_ffffff关联的分支

步骤 1:获取远程分支信息
首先,确保你的本地仓库是最新的,并获取所有远程分支的信息。
git fetch // 这将更新所有远程追踪分支的信息,包括 dev_ffffff。步骤 2:创建并切换到本地分支
使用以下命令从远程分支 dev_ffffff 创建一个对应的本地分支,并切换到该分支:
git checkout -b dev_ffffff origin/dev_ffffff checkout -b:用于创建一个新的本地分支。
dev_ffffff:是新创建的本地分支的名称。
origin/dev_ffffff:指定要基于的远程分支。步骤 3:验证操作
切换成功后,你可以查看当前所在的分支来确认操作是否正确:
git branch

协作开发时可能遇到的问题

上面已经讲了基于远程分支新建本地分之,但是在提交代码时,有可能别人已经有了提价的代码,
基于自己的开发分支上,先拉取别人的最新代码:
git stash  保存本地分支的修改内容
git fetch origin   获取远程仓库的更新
git merge origin/dev_fffff  合并更新到本地
有可能有冲突,解决冲突,解决冲突之后,标记冲突已解决并提交
git add <conflicted-file>
git commit -m "Merged remote dev_fffff and resolved conflicts"偶尔会出现解决完冲突之后,有些更改会自动放到暂存区,但是这些更改并不是我想提交的代码,需手动将这些更改从暂存区中取消
使用 git status 来检查哪些文件还有冲突
可能会发现暂存区有不想提交的内容
Changes to be committed:(use “git restore --staged <file>…” to unstage)modified: conf_offline/xxxx/xxxx/xxxxxx.confmodified: controllers/xxxxxxxxxx.php
挑选出不想提交的文件
git restore --staged conf_offline/xxxx/xxxx/xxxxxx.conf
git restore --staged controllers/xxxxxxxxxx.php回退到指定的提交,并保存更改
git log 查看提交的ID
git reset --mixed abc1234 暂存区内容将回到工作目录,默认行为

要整理提交记录并删除不需要的提交(49db0fa746137e2414b03),你可以使用 Git 的交互式 rebase 功能

# 检查当前分支状态
git status
# 如果有未提交的更改,则暂存
git stash
# 启动交互式 rebase
git rebase -i 0db54d8    
# 编辑 rebase 计划:
# 这个命令会打开一个文本编辑器,显示从基准提交到最新提交之间的所有提交记录。你会看到类似下面的内容:
pick 0db54d8 18558 [Task] messge1
pick 746137e 18558 [Task] messge2
pick 49db0fa 18558 [Task] messge3
pick 2414b03 18558 [Task] messge4# 你需要将不需要的提交前面的pick改为drop,例如
pick 0db54d8 b2b-acg-18558 [Task] [RD]数电票普票升级 修改finance.sql
drop 746137e 18558 [Task] messge2
drop 49db0fa 18558 [Task] messge3
drop 2414b03 18558 [Task] messge4# 保存并退出编辑器:
# 保存文件并退出编辑器。Git 会自动执行你所指定的操作,即删除不需要的提交。# 解决冲突(如果有):
# 如果 rebase 过程中出现冲突,Git 会提示你解决冲突。解决冲突后,使用下面的命令继续 rebase:
git rebase --continue# 完成 rebase:
# 一旦所有冲突都解决,rebase 过程将会完成。# 验证提交记录:
使用git log或git log --graph --oneline --all来验证提交记录是否如你所期望的那样被整理好了。
git log --graph --oneline --all

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

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

相关文章

自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器

使用 Open AI 兼容的 API&#xff0c;可以在 Bytebase SQL 编辑器中使用自然语言查询数据库。 出于数据安全的考虑&#xff0c;私有部署大语言模型是一个较好的选择 – 本文选择功能强大的开源模型 llama3。 由于 OpenAI 默认阻止出站流量&#xff0c;为了简化网络配置&#…

Cookie和Session

会话&#xff1a; 有状态会话&#xff1a; 客户端知道发起请求的是谁 无状态会话&#xff1a; 不知道发起请求的是谁 只知道有请求 http是无状态请求 保存会话信息的两种技术&#xff1a; 可以通过Cookie和Session储存会话信息 cookie&#xff1a;客户端技术 信心存…

ImportError: attempted relative import with no known parent package 报错的解决!

本人在做调用超级鹰API解决点触验证码时&#xff0c;两次出现本报错。研究后解决&#xff0c;步骤如下&#xff1a;&#xff08;注意&#xff1a;如果项目目录结构简单且无中文目录&#xff0c;直接使用绝对路径即可解决&#xff01;&#xff01;&#xff01;&#xff09; 1.项…

介绍下不同语言的异常处理机制

Golang 在Go语言中&#xff0c;有两种用于处于异常的机制&#xff0c;分别是error和panic&#xff1b; panic panic 是 Go 中处理异常情况的机制&#xff0c;用于表示程序遇到了无法恢复的错误&#xff0c;需要终止执行。 使用场景 程序出现严重的不符合预期的问题&#x…

使用gtsam添加OrientedPlane3Factor平面约束因子

在基于地面约束的SLAM优化中&#xff0c;已知的地面信息&#xff08;如 plan.pcd 文件中的地面模型&#xff09;可以用作一个先验约束&#xff0c;以帮助优化位姿估计。具体而言&#xff0c;这个过程涉及将地面模型和每个帧的位姿结合&#xff0c;以创建一个因子模型&#xff0…

Cython全教程2 多种定义方式

—— 本篇文章&#xff0c;主要讲述Cython中的四种定义关键字 全教程2 多种定义方式&#xff1a; 在Cython中&#xff0c;关于定义的关键字有四个&#xff0c;分别是&#xff1a; cdef、def、cpdef、DEF 一、cdef定义关键字 顾名思义&#xff0c;cdef关键字定义的是一个C函数…

WINFORM - DevExpress -> DevExpress总结[安装、案例]

安装devexpress软件 路径尽量不换&#xff0c;后面破解不容易出问题 vs工具箱添加控件例如: ①使用控制台进入DevExpress安装目录: cd C:\Program Files (x86)\DevExpress 20.1\Components\Tools ②添加DevExpress控件&#xff1a; ToolboxCreator.exe/ini:toolboxcreator…

primitive 的 Appearance编写着色器材质

import { nextTick, onMounted, ref } from vue import * as Cesium from cesium import gsap from gsaponMounted(() > { ... })// 1、创建矩形几何体&#xff0c;Cesium.RectangleGeometry&#xff1a;几何体&#xff0c;Rectangle&#xff1a;矩形 let rectGeometry new…

《JavaWeb开发-javascript基础》

文章目录 《JavaWeb开发-javascript基础》1.javascript 引入方式2.JS-基础语法-书写语法2.1 书写语法2.2 输出语句 3.JS-基础语法-变量4.JS-基础语法-数据类型&运算符4.1 数据类型4.2 运算符4.3 数据类型转换 5. JS-函数6. JS-对象-Array数组7. JS-对象-String字符串8. JS-…

从CentOS到龙蜥:企业级Linux迁移实践记录(龙蜥开局)

引言&#xff1a; 在我们之前的文章中&#xff0c;我们详细探讨了从CentOS迁移到龙蜥操作系统的基本过程和考虑因素。今天&#xff0c;我们将继续这个系列&#xff0c;重点关注龙蜥系统的实际应用——特别是常用软件的安装和配置。 龙蜥操作系统&#xff08;OpenAnolis&#…

【python基础——异常BUG】

什么是异常(BUG) 检测到错误,py编译器无法继续执行,反而出现错误提示 如果遇到错误能继续执行,那么就捕获(try) 1.得到异常:try的执行,try内只可以捕获一个异常 2.预案执行:except后面的语句 3.传入异常:except … as uestcprint(uestc) 4.没有异常:else… 5.鉴定完毕,收尾的语…

MySQL的安装

MySQL典型的关系型数据库&#xff08;RDBMS&#xff09;&#xff1a;oracle、MySQL、SqlServer MySQL的版本 5.5~5.7、8.0 MySQL的安装和配置 下载地址&#xff1a; https://downloads.mysql.com/archives/community/ 安装包 (x86, 64-bit), MSI Installer 执行下一步即…

跨境电商领域云手机之选:亚矩阵云手机的卓越优势

在跨境电商蓬勃发展的当下&#xff0c;云手机已成为众多企业拓展海外市场的得力助手。亚矩阵云手机凭借其独特优势&#xff0c;在竞争激烈的云手机市场中崭露头角。不过&#xff0c;鉴于市场上云手机服务供应商繁多&#xff0c;企业在抉择时需对诸多要素予以审慎考量。 跨境电商…

【论文阅读】MAMBA系列学习

Mamba code&#xff1a;state-spaces/mamba: Mamba SSM architecture paper&#xff1a;https://arxiv.org/abs/2312.00752 背景 研究问题&#xff1a;如何在保持线性时间复杂度的同时&#xff0c;提升序列建模的性能&#xff0c;特别是在处理长序列和密集数据&#xff08;如…

Java100道面试题

1.JVM内存结构 1. 方法区&#xff08;Method Area&#xff09; 方法区是JVM内存结构的一部分&#xff0c;用于存放类的相关信息&#xff0c;包括&#xff1a; 类的结构&#xff08;字段、方法、常量池等&#xff09;。字段和方法的描述&#xff0c;如名称、类型、访问修饰符…

【华为云开发者学堂】基于华为云 CodeArts CCE 开发微服务电商平台

实验目的 通过完成本实验&#xff0c;在 CodeArts 平台完成基于微服务的应用开发&#xff0c;构建和部署。 ● 理解微服务应用架构和微服务模块组件 ● 掌握 CCE 平台创建基于公共镜像的应用的操作 ● 掌握 CodeArts 平台编译构建微服务应用的操作 ● 掌握 CodeArts 平台部署微…

C#学习笔记 --- 简单应用

1.operator 运算符重载&#xff1a;使自定义类可以当做操作数一样进行使用。规则自己定。 2.partial 分部类&#xff1a; 同名方法写在不同位置&#xff0c;可以当成一个类使用。 3.索引器&#xff1a;使自定义类可以像数组一样通过索引值 访问到对应的数据。 4.params 数…

用python编写一个放烟花的小程序

import pygame import random # 代码解释及使用说明&#xff1a; # 首先&#xff0c;导入 pygame 和 random 库。pygame 用于创建游戏窗口和图形绘制&#xff0c;random 用于生成随机数。 # 初始化 pygame&#xff0c;并设置屏幕尺寸为 800x600 像素&#xff0c;设置窗口标题为…

栈 (算法十二)

1.删除字符串中的所有相邻项 link:1047. 删除字符串中的所有相邻重复项 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 栈&#xff0b;模拟 code class Solution { public:string removeDuplicates(string s) {// 栈来模拟即可// string代替栈string ans;for(…

特制一个自己的UI库,只用CSS、图标、emoji图 第二版

图&#xff1a; 代码&#xff1a; index.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>M…