git使用指南(保姆贴)

ops/2025/2/7 14:33:29/

训练软件

  • learnGitBranching:Git 命令可视化学习网站。通过游戏关卡挑战,逐步深入的学习 Git,需要git入门的人,不适合纯小白。
  • Oh My Git:开源的git训练游戏。
  • https://www.w3ccoo.com/git/index.html

存储结构

  • 工作区(Working Directory): 文件所在的目录文件夹,包含项目文件,.git 目录(目录里含有所有的项目内容。如修改但未跟踪(未添加到暂存区)的文件,git add 暂存的文件、git commit 提交后的版本库、当前所处分支等信息。
  • 版本库(Repository): 工作区内 .git 目录,里面存储了 git 运行所需的所有数据,包括暂存区 stage、分支信息、提交信息等。
  • 暂存区 Stage: 本地仓库跟踪的文件和修改后未提交的都在缓存区

常用命令

git commit
git branch
git merge
git rebase

相对引用^ ~
撤销变更

cherry - pick 交互rebase

git tag
git descript

1.基础命令

初始化
#新建.git文件夹及git配置初始化
git init
添加
#将项目添加到暂存区
git add .
#添加指定文件 
git add file.txt  
#添加指定目录 
git add dir/  
#使用通配符 
git add *.txt
撤销

撤销主要有两个命令git resetgit revert
git reset通过回退提交记录来实现撤销,原来指向的记录就像没提交过一样。
git revert用于远程分支.执行后会产生一个新提交记录,而新提交的记录跟上一级的内容是相同的。

#恢复到当前上一级记录, 其中 HEAD 表示最新的提交, HEAD~表示最新提交的上一级
git reset HEAD~  
#移除指定文件 
git reset HEAD file.txt  
#新语法 
git restore --staged file.txt##--hard为硬恢复参数,需格外注意,会删除当前版本文件
#恢复到上个版本 
git reset --hard HEAD^  
#恢复到上上个版本 
git reset --hard HEAD^^  
#恢复到上 n 个版本 
git reset --hard HEAD~n  
#恢复到指定 commit_id 的版本, commit_id 可以通过 git log 查看
git reset --hard commit_id
提交
#将项目添加到本地仓库
git commit
#撤销提交
git commit --amend
#将项目添加到本地仓库
git commit -m "提交信息"
#添加所有文件到暂存区并提交 (等于自动先执行了 git add .) 
git commit -am "message"`#连接到远程仓库位置
git remote add origin 远程仓库地址
#推送到远程仓库
git push
#指定推送分支
git push -u origin main
查看提交记录
#查看最近记录
git log
#查看所有的记录
git reflog

2.高级命令

全局配置和单个仓库的用户名邮箱配置
#配置全局用户名(参数 --global)
git config --global user.name “github’s Name”
#配置用户邮箱
git config --global user.email “github@xx.com”
#查看配置列表
git config --list#配置当前项目的用户名
git config user.name “gitlab’s Name”
#配置当前项目的邮箱
git config user.email “gitlab@xx.com”
#查看配置列表,显示全局配置+当前项目配置,优先使用当前配置
git config --list
分支
# 查看本地当前在那个分支
git branch
# 创建分支
#在当前位置创建分支,不改变HEAD位置
git branch branch_name
#在当前位置创建分支,并移动HEAD到新建分支
git checkout -b  branch_name
# 查看远程分支
git branch -r
# 查看所有分支
git branch -a#强制移动分支,将main移动到bug的位置
git branch -f main bug# 创建并切换到指定分支,若不指定则代表创建本地分支
git checkout -b  本地分支名  远程分支名 
git switch -c branch_name
# 或者切换分支
git checkout 分支名字
# 如:切换到origin/tools分支命令本地分支为”tools”
git checkout -b tools origin/tools# 删除分支
git branch -d branch_name  
# 如果分支未合并,则上面的命令会删除失败,需使用 -D 参数强制删除 
git branch -D branch_name# 修改当前所在分支名 
git branch -m new_branch_name  
# 修改指定分支名 
git branch -m old_branch_name new_branch_name
相对引用

可以通过提交记录上的哈希值来指定某一个提交记录。一般常用的哈希值有40多位(通过git log来查看),调用的时候可以只用前4位即可,不用全部输入。
git checkout c8c9c7
也可以采用相对引用来调用。
相对引用操作符号有^~
^跟在分支后面表示往上移动一级(比如Bug);`^`后跟着数字则表示往上移动的分支为第几分支(比如Bug2),不写数字则代表着主线的父级分支
~操作符后面跟着数字则代表往上移动几级(比如Bug~3,往上移动3级)

比较差异
# 工作区与暂存区比较 
git diff file   
# 暂存区与版本库比较, 也可以用 --staged, 效果是一样的 
git diff --cached file  
# 工作区与版本库比较 
git diff HEAD file  
# 工作区和某次提交比较 
git diff commit_id file  
# 比较两次提交 
git diff commit_id1 commit_id2
合并分支

合并分支有两种方法,
一种是用git merge,合并时会产生一个特殊的提交记录,并将两个节点所有父级节点内容都包含进来,包括调试信息等等。
第二种是用git rebase。复制提交记录,并在另一个地方逐个放下去。可以创造更线性的提交历史。rebase翻译过来也叫变基,总的来说就是将该分支换个父级基底。
git rebase还有一个交互参数-i,可以通过UI界面来重新排列或者选择某些提交记录。

# 将指定分支代码合并到主分支中
git merge branch_name
# 合并模式有fast forwar(默认),所有测试数据均合并进main。 --no-ff(普通模式),创建分支合并
git merge --no-ff -m "merge branch xxx" branch_name# 将指定分支代码合并到主分支中
git rebase main branch_name
# 通过UI界面,将main上面3个提交记录重排。
git rebase -i main~3
合并冲突提示

当合并分支时,如果有冲突,会提示:
Auto-merging file.txt CONFLICT (content): Merge conflict in file.txt Automatic merge failed; fix conflicts and then commit the result.

执行 git status 会显示冲突的文件:

On branch main 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: file.txt no changes added to commit (use "git add" and/or "git commit -a")

合并冲突解决

这时有两个选择:动解决冲突或放弃合并
1.放弃冲突,恢复合并前的状态:
git merge --abort
2.手动合并,需要手动解决冲突,编辑后再提交。

git_stash__230">git stash 高级技巧

如果当前正在进行版本功能开发,功能未开发完,无法提交。但主分支需要有bug修复。
可以暂存当前工作区,修复完再恢复。
# 暂存当前工作区 git stash

修复 bug 后,回到开发分支后可以通过 git stash list 查看暂存的内容:
stash@{0}: WIP on main: 1385314 merge bug branch

stash@{n} 表示最新m次暂存的内容,
WIP 表示工作区(Working Directory)的意思,
main 表示当前分支,1385314 表示提交的 commit_id,merge bug branch 表示提交的消息。

#恢复最近暂存的内容(恢复栈顶,恢复后未删除,需手动删除)
git stash apply
#删除栈顶的内容
git stash drop
#恢复并删除栈顶的内容。
git stash pop
#恢复指定的内容。
git stash apply stash@{n}`

命令集:

命令说明
git stash list查看暂存列表
git stash apply stash@{n}恢复暂存内容
git stash drop stash@{n}删除暂存内容
git stash pop stash@{n}恢复并删除暂存内容
git stash show stash@{n}查看暂存的内容(修改的文件)
git stash branch branch_name stash@{n}从暂存创建新分支
git stash save "message"暂存并添加消息
git stash create创建一个暂存,但不应用
git stash clear清空暂存列表
cherry-pick 挑选提交

cherry-pick c1 c2 c3 抓取提交记录c1 c2 c3到当前分支。

场景
假设两个分支 master, dev, 你正在 dev 分支开发,使用了 stash 功能你为了修复紧急问题创建了个 bug 分支,修复后合并到 master 分支。

但是你正在开发的 dev 分支也需要这个修复,这时可以使用 cherry-pick 命令将 master 分支的修复 “复制”dev 分支。

git_tag__277">git tag 打标签

标签跟分支名有本质上的区别,不会随着提交而移动位置,相当于分支上的一个锚点。

#建立一个标签指向分支bug
git tag v1.0 bug
git_describe__287">git describe 描述内容
git describe <ref>
<ref> 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会使用你目前所在的位置(HEAD)。它输出的结果是这样的:
<tag>_<numCommits>_g<hash>tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。当 ref 提交记录上有某个标签时,则只输出标签名称

远程仓库

远程分支在本地显示为<remote name>/<branch name>,如果切换为origin/main后,再通过git commit提交会产生git HEAD分离的情况。只有远程更新了,本地的远程分支才会更新,要特别注意。

远程下拉
#克隆远程仓库的主分支
git clone
#从远程仓库下载本地仓库中缺失的提交记录,并更新远程分支指针
git fetch#抓取更新再合并到本地分支,相当于先执行了`git fetch` 然后又执行了` git merge origin/main`git pull#如果本地已经再做开发,而远端有团队已经提交内容,此时本地是无法提交的。可以通过--rebase的参数来将本地更新,然后再提交
git pull --rebase

远程上传
#推本地新分支送到远程仓库,如果远程仓库没有这个分支,会自动创建。
git push -u origin 分支名字不过这样你每次推送都需要指定 `origin branch_name`,可以通过 `git push -u origin branch_name` 一次性推送并关联远程分支,以后推送就可以直接 `git push` 了。如果你忘记加 `-u` 参数,可以通过 `git branch --set-upstream-to=origin/branch_name branch_name` 关联远程分支。你可以通过 `git branch -vv` 查看本地分支关联的远程分支。
远程其他命令
#远程跟踪分支#新建本地分支dev,并和远程分支main相关联git checkout - b dev origin/maingit branch -u origin/main dev

http://www.ppmy.cn/ops/156458.html

相关文章

机器学习day8

自定义数据集 &#xff0c;使用朴素贝叶斯对其进行分类 代码 import numpy as np import matplotlib.pyplot as pltclass1_points np.array([[2.1, 2.2], [2.4, 2.5], [2.2, 2.0], [2.0, 2.1], [2.3, 2.3], [2.6, 2.4], [2.5, 2.1]]) class2_points np.array([[4.0, 3.5], …

配置@别名路径,把@/ 解析为 src/

路径解析配置 webpack 安装 craco npm i -D craco/craco 项目根目录下创建文件 craco.config.js &#xff0c;内容如下 const path require(path) module.exports {webpack: {// 配置别名alias: {// 约定&#xff1a; 使用 表示src文件所在路径: path.resolve(__dirname,src)…

不同数据库与 WebGL 集成

一、引言 在当今数字化时代&#xff0c;数据可视化是一个关键需求&#xff0c;而 WebGL&#xff08;Web Graphics Library&#xff09;为在网页上实现高性能 3D 图形渲染提供了强大的工具。然而&#xff0c;WebGL 本身无法直接与数据库进行交互&#xff0c;为了将数据库中的数…

Ubuntu安装OpenSSF Scorecard

OpenSSF Scorecard 是用于评估开源项目安全状况的工具。在 Ubuntu 18.04.6 LTS 系统上安装 OpenSSF Scorecard&#xff0c;可按以下步骤进行&#xff1a; 1. 安装依赖软件 在安装 Scorecard 之前&#xff0c;需要确保系统已经安装了一些必要的依赖项&#xff0c;包括 git、cu…

绿联NAS安装cpolar内网穿透工具实现无公网IP远程访问教程

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 本文主要介绍如何在绿联NAS中使用ssh远程连接后&#xff0c;使用一行代码快速安装cpolar内网穿透工具&#xff0c;轻松实现随时随地远程访问本地内网中的绿联NAS&#xff0c;无需公网…

IEC60825测试流程与报告测试什么内容IEC60825怎么判定是否合格呢?

IEC60825就是激光产品的测试标准&#xff0c;国际标准的测试报告&#xff0c;有CNAS资质的哦 IEC60825-12014版本 激光模块的测试比较简单&#xff0c;基本的是激光等级符合要求。 激光模块做IEC60825需要的样品每个型号2PCS带一个驱动电源 IEC60825-12014关联的关键词&…

DeepSeek-R1 本地电脑部署 Windows系统 【轻松简易】

本文分享在自己的本地电脑部署 DeepSeek&#xff0c;而且轻松简易&#xff0c;快速上手。 这里借助Ollama工具&#xff0c;在Windows系统中进行大模型部署~ 1、安装Ollama 来到官网地址&#xff1a;Download Ollama on macOS 点击“Download for Windows”下载安装包&#x…

UE5 蓝图学习计划 - Day 12:存储与加载

在游戏开发中&#xff0c;存储&#xff08;Save&#xff09;与加载&#xff08;Load&#xff09; 系统至关重要&#xff0c;玩家需要能够保存游戏进度、角色状态、道具数据等信息&#xff0c;并在下次启动游戏时恢复它们。UE5 提供了 SaveGame 蓝图类&#xff0c;帮助开发者快速…