一份工作 6 年前端的 Git 备忘录

news2024/12/25 9:13:04

前言

熟练的使用 git 指令,是一个程序员的基本功,本文记录了我这些年常用的一些 git 操作。

进入新团队需要做的一系列 git 操作

高频使用的指令

1. 注册内网 gitLab 账户
2. 项目管理员拉我进项目
3. 有了权限后,git clone 'url' 项目到本地
4. 自己创建新的项目分支 git branch '分支名'
5. 开始编码吧...
6. git clone 默认是下载了所有分支的代码
7. git branch -a 查看项目所有分支
8. git branch -r 查看项目所有远程分支
9. git checkout '分支名' 切换分支
10. git branch 打印出来所有的分支,以及当前所在分支
11. git log 查看提交记录,退出 英文状态下 Q
12. git reflog 可查看修改记录(包括git reset 的回退记录)
13. git reset --hard {commit id} 回退版本
14. git stash //代码放进暂存区(未被commit的代码)
15. git stash apply 还原
16. git stash drop 清除最近一次的stash记录
17. git stash pop 还原并清除最近一次 stash
18. git stash list 查看暂存列表
19. git stash clear 清空所有 stash 的记录
20. git remote -v 显示所有远程仓库
21. git remote add url 添加一个远程仓库
22. git remote rm name # 删除远程仓库
23. git remote rename old_name new_name # 修改仓库名

git 文件名大小写问题

踩了git的坑!!

在 windows下,一开始提交了一个 login.less文件,后来把它重命名为 Login.less,居然提交不了,git 提示没有改动,后来才知道,原来git默认对文件名的大小写不敏感。

如何解决git文件名大小写问题?

方案1,配置 git

首先可以通过配置git来达到识别文件名大小写的问题。命令如下:

git config core.ignorecase false

缺点是每个仓库都需要修改。

方案2,手动修改

  1. 首先删除存储在git本地仓库的目标文件,以 Login.less 为例:
git rm Login.less 或者
git rm -f Login.less -f 表示强制删除。
  1. 修改文件名

  2. 添加文件到本地仓库 git add .

  3. 提交到本地仓库及远程仓库

    git commit -m 'rename file'; 
    git push
    

git merge 冲突后恢复到合并前状态

git merge --abort // 回滚到合并之前

第二种方案:

git stash
git stash clear

修改 git 仓库的提交用户名和邮箱地址

// 查看
git config user.name
git config user.email

// 全局仓库
git config --global user.name "yourName"
git config --glocal uer.email "yourEmail"

// 单个仓库
git config user.name "yourName"
git config user.email "yourEmail"

取消 Git 对某文件的跟踪 (示: development.env.js)

git update-index --assume-unchanged config/development.env.js  可以忽略文件

git checkout .\config\development.env.js

git update-index --no-assume-unchanged .\config\development.env.js 可以取消忽略文件 

版本回退

解决方法

1、运行git reflog 命令查看你的历史变更记录,如下:

fdb70fe HEAD@{0}: pull origin newpbft: Fast-forward
40a9a83 HEAD@{1}: checkout: moving from guan to master
b3fa4c3 HEAD@{2}: commit: copy from newpbft, first init
71bf0ec HEAD@{3}: checkout: moving from newpbft to guan
71bf0ec HEAD@{4}: commit: 1. add moveStore() to clean up certStore and blockStore.
1006d67 HEAD@{5}: commit: 1. Add PBFT branch to Puppeth.
fa3fb56 HEAD@{6}: commit: 1. change some errors about packages and vars
5f40fdc HEAD@{7}: checkout: moving from master to newpbft
40a9a83 HEAD@{8}: clone: from https://github.com/yeongchingtarn/geth-pbft.git

2、然后用 git reset --hard HEAD@{n},(n是你要回退到的引用位置)回退;比如上图可运行 git reset --hard 40a9a83

git reset 与 git revert 的区别?

git reset --hard {commitHashId} // 回退到某一个版本
git revert -n {commitHashId} // 回退某一个 commit, 会生成一个新的版本,反转覆盖掉原来的提交代码

注意:关于版本回退记录!!

一个commit对应这一个版本,有一个commit id,40位的16进制数字,通过SHA1计算得到,不同的文件计算出来的SHA1值不同(有很小的几率相同,可忽略),这样每一个提交都有其独特的id。每提交一个新版本,实际上 Git 就会把它们自动串成一条时间线。

在Git中,HEAD 表示当前版本,也就是e620a6ff0940a8dff…,HEAD^ 表示上一个版本,HEAD^^ 表示上上一个版本,往上100个版本可以写成HEAD加连续100个 ^ ,也可以写成:HEAD~100

拉取远程分支

// 拉取远程分支并建立本地分支,但不会自动切换到此本地分支
git fetch origin 远程分支名x:本地分支名x

git checkout -b 本地分支名 origin/远程分支名

分支合并

git merge a 将 a 分支合并到当前分支

注意事项: 
合并分支需要先更新本地分支代码,然后将本地分支1合并到本地分支2,不能直接合并远程分支1到本地分支2

暂存区

当你需要紧急切换到主分支,执行紧急任务的时候,可以使用

git stash // 当前分支代码加入暂存区
git stash list // 查看暂存记录id
git stash apply // 还原
git stash drop 删除最后一条暂存区信息

修改分支名(重命名)

git branch -m oldName newName

删除本地分支和远程分支

1. git branch -d '分支名'
2. git branch -D '分支名' //强制删除
3. git push origin --delete '分支名' // 删除远程分支

新建本地分支及远程分支

  1. git branch '分支名' //本地新建分支
  2. git fetch origin b1:b2 // 从远程拉取分支 b1 的代码到 本地并新建b2分支

查看和修改本地分支和远程分支 关联情况

git remote -v // 查看git对应的远程仓库地址
git remote rm origin // 删除关联对应的远程仓库地址
git remote -v // 查看是否删除成功,如果没有任何返回结果,表示OK
git remote add origin https://github.com/developers-youcong/Metronic_Template.git // 重新关联git远程仓库地址

git cherry-pick (摘樱桃)

使用场景:

  1. 代码 commit 到错误的分支
  2. 转移另一个代码库的提交A

阮一峰的讲解

在当前分支重新复制提交一份改commit 的代码,生成新的 commitHash

-x 配置项
在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的。

git cherry-pick {commitHashId}

git rebase 和 git merge

rebase 翻译为变基,他的作用和 merge 很相似,用于把一个分支的修改合并到当前分支上, 不同于 git rebase的是,git merge 在不是 fast-forward(快速合并)的情况下,会产生一条额外的合并记录,类似Merge branch 'xxx' into 'xxx'的一条提交信息。

取消本地文件修改

1. 未使用 git add 缓存代码时。

可以使用 git checkout -- filepathname (比如: git checkout -- readme.md ,不要忘记中间的 “--” ,不写就成了检出分支了!!)。

放弃所有的文件修改可以使用 git checkout . 命令。

此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件;因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

2. 已经使用了 git add 缓存了代码。

可以使用 git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所以的缓存可以使用 git reset HEAD . 命令。

此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。

3. 已经用 git commit 提交了代码。

可以使用 git reset --hard HEAD^ 来回退到上一次commit的状态。此命令可以用来回退到任意版本:git reset --hard commitid

你可以使用 git log 命令来查看git的提交历史。git log 的输出如下,之一这里可以看到第一行就是 commitid:

commit cf0d692e982d8e372a07aaa6901c395eec73e356 (HEAD -> master)
Author: toyflivver <2440659688@qq.com>
Date:   Thu Sep 28 14:07:14 2017 +0800
    多余的空行
commit 14aa4d7ad4ac6fba59b4b8261d32e478e8cc99ff
Author: toyflivver <2440659688@qq.com>
Date:   Thu Sep 28 14:06:44 2017 +0800
    正常的代码
commit da3a95c84b6a92934ee30b6728e258bcda75f276
Author: toyflivver <2440659688@qq.com>
Date:   Thu Sep 28 13:58:12 2017 +0800
    qbf
commit 267466352079296520320991a75321485224d6c6
Author: toyflivver <2440659688@qq.com>
Date:   Thu Sep 28 13:40:09 2017 +0800
    qbf

可以看出现在的状态在 commitid 为 cf0d692e982d8e372a07aaa6901c395eec73e356 的提交上(有 HEAD -> master 标记)。

Please enter a commit message to explain why this merge is necessary.

请输入提交消息来解释为什么这种合并是必要的

git 在pull或者合并分支的时候有时会遇到这个界面,可以不管(直接下面3,4步),如果要输入解释的话就需要:

1. 按键盘字母 i 进入insert模式

2. 修改最上面那行黄色合并信息,可以不修改

3. 按键盘左上角"Esc"

4. 输入":wq",注意是冒号+wq,按回车键即可

git commit 提交规范

image.png

修改请求源为内网

clipboard.png

Git 打标签发布

一般项目发布都有版本号,打标签就是为了记录此时版本下的代码,每次项目发布前给当前代码打上对应标签号,以后可以根据标签号找到任一版本的代码。

相关指令:

1. 获取远程标签

git fetch --tags // 拉取远程标签
git tag // 查看标签
git fetch origin tag 2.4.10 // 用于精确的拉取指定的某个版本,适合运维同学部署指定版本

2. 新建标签

git tag 2.4.10 //简单方法1
git tag -a 2.4.10 -m 'voc-web version 2.4.10' // 带备注的(常用)

3. 推送到远程

git push origin --tags

4. 删除标签

git tag -d 2.4.10 //删除了本地的2.4.10标签
git push origin :refs/tags/2.4.10 //删除了远程的2.4.10标签

其他

npm 常用操作

rm -rf node_modules 删除 node_modules目录

rm -rf package-lock.json 删除package-lock.json

npm set registry http://registry.npm.taobao.org 修改 下载仓库为淘宝镜像

npm config set disturl https://npm.taobao.org/dist

npm config set chromedriver_cdnurl
http://cdn.npm.taobao.org/dist/chromedriver

npm set phantomjs_cdnurl http://cdn.npm.taobao.org/dist/phantomjs

npm cache verify 清除 npm 缓存

npm install

删除 .DS_Store 文件

.DS_Store 是 Finder 用来存储这个文件夹的显示属性的:比如文件图标的摆放位置。虽然有办法可以禁止 .DS_Store 文件的生成,但是没有必要,只需要在 Git 中忽略 .DS_Store 文件即可。

如果你的项目中还没有自动生成的 .DS_Store 文件,那么直接将 .DS_Store 加入到 .gitignore 文件就可以了。如果你的项目中已经存在 .DS_Store 文件,那就需要先从项目中将其删除,再将它加入到 .gitignore。

git rm -r --cached .DS_Store

git commit -m 'delete .DS_Store' 

发现远程库的 .DS_Store 已经没了。

然后在 gitignore 中忽略即可

删除 MERGE_MSG.swp 文件

.swp 文件和 git 无关,在使用 VIM 开始编辑某文件时,都会产生该文件对应的 .swp 文件。正常的退出,VIM 会自动删除此类型文件,非正常退出情况下, VIM 不会删除 ,.swp 文件会作为文件编辑状态的内容备份。

其实多次打开多次不正常关闭,会一直产生 .sw* 文件

第一步:回到合并前状态

 git merge --abort  // 中止合并
 rm .git/.MERGE_MSG.sw* //删除 vim 非正常关闭产生的文件

第二步:重新合并 合并提交信息页面,使用 :wq! 或者 :q! 正常退出 VIM ,就能正常合并啦。

oh-my-zsh 插件

强烈推荐这个插件, 内置了一套简洁的 git 操作快捷指令,使我们操作 git 更快;基于zsh 终端环境,所以需要 mac 系统和 linux 系统。

其内置对快捷指令如下:

g - git
gst - git status
gl - git pull
gup - git pull --rebase
gp - git push
gd - git diff
gdc - git diff --cached
gdv - git diff -w "$@" | view
gc - git commit -v
gc! - git commit -v --amend
gca - git commit -v -a
gca! - git commit -v -a --amend
gcmsg - git commit -m
gco - git checkout
gcm - git checkout master
gr - git remote
grv - git remote -v
grmv - git remote rename
grrm - git remote remove
gsetr - git remote set-url
grup - git remote update
grbi - git rebase -i
grbc - git rebase --continue
grba - git rebase --abort
gb - git branch
gba - git branch -a
gcount - git shortlog -sn
gcl - git config --list
gcp - git cherry-pick
glg - git log --stat --max-count=10
glgg - git log --graph --max-count=10
glgga - git log --graph --decorate --all
glo - git log --oneline --decorate --color
glog - git log --oneline --decorate --color --graph
gss - git status -s
ga - git add
gm - git merge
grh - git reset HEAD
grhh - git reset HEAD --hard
gclean - git reset --hard && git clean -dfx
gwc - git whatchanged -p --abbrev-commit --pretty=medium
gsts - git stash show --text
gsta - git stash
gstp - git stash pop
gstd - git stash drop
ggpull - git pull origin $(current_branch)
ggpur - git pull --rebase origin $(current_branch)
ggpush - git push origin $(current_branch)
ggpnp - git pull origin $(current_branch) && git push origin $(current_branch)
glp - _git_log_prettily

未完待续!!!


技术交流咨询 v: 1032151090

博客首发地址: Ethan_Zhou 的个人主页

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

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

相关文章

顺序表经典算法

顺序表经典算法 1.移除元素 题目&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的…

华为OD机试 - 会议室占用时间段(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

基于SSM+JSP+MYSQL+JAVA的学生后台管理系统

&#x1f49e;文末获取源码联系&#x1f649; &#x1f447;&#x1f3fb; 精选专栏推荐收藏订阅&#x1f447;&#x1f3fb; &#x1f380;《Java精选实战项目-计算机毕业设计题目推荐-期末大作业》&#x1f618;更多实战项目~ https://www.yuque.com/liuyixin-rotwn/ei3euo/d…

CRE-LLM:告别复杂特征工程,直接关系抽取

CRE-LLM&#xff1a;告别复杂特征工程&#xff0c;直接关系抽取 提出背景CRE-LLM 宏观分析CRE-LLM 微观分析1. 构建指令集&#xff08;Instruction Design&#xff09;2. 高效微调大型语言模型&#xff08;Efficient Fine-Tuning on LLMs&#xff09;3. 方法讨论&#xff08;Di…

C语言/数据结构——每日一题(分割链表)

一.前言 今天在LeetCode觉得很不错&#xff0c;想和大家们一起分享这道链表题——分割链表&#xff1a;https://leetcode.cn/problems/partition-list-lcci废话不多说&#xff0c;让我们直接进入正题吧。 二.正文 1.1题目描述 1.2题目分析 大致思路&#xff1a;我们可以通过…

[数据结构]———归并排序

具体代码&#xff1a;在gitee仓库&#xff1a;登录 - Gitee.com 目录 ​编辑 1.基本思想&#xff1a; 2. 代码解析 1.分析 2.逻辑图 3.运行结果 1.基本思想&#xff1a; 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分…

前端工程化05-初始前端工程化Node基本介绍安装配置基础知识

6、初始前端工程化 6.1、工程化概述 虽然前几篇我的目录标题写的前端工程化&#xff0c;但是那些东西并不属于前端工程化的内容&#xff0c;更倾向于是js、jq当中的东西&#xff0c;下面我们将接触真正的前端工程化。 前端工程化开发其实现在是离不开一个东西的&#xff0c;…

【CTF Reverse】XCTF GFSJ0487 game Writeup(反编译+逆向工程)

game 菜鸡最近迷上了玩游戏&#xff0c;但它总是赢不了&#xff0c;你可以帮他获胜吗 解法 放进 exeinfope 中分析。 拖入 IDA 中。shift f12 查看字符串。ctrl f 搜索 flag。 DATA XREF: sub_45E94028↑o Function 中搜索 sub_45E940。 flag 应该是在这里算出来的&#xff…

String的深入时间比较器System/数学相关类

String的深入&时间&比较器&System/数学相关类 文章目录 String的深入&时间&比较器&System/数学相关类前言一、字符串String不可变1.1 String理解&赋值&存储1.2 String构造器&不同类型转换1.3 String常用API1.4 常见的算法题目(反转/字符排…

手机看广告项目2.0,单机版盈利30-50,提现马上到账

项目简介&#xff1a; 这个项目自去年起已经启动&#xff0c;虽然单台手机的日常盈利可能并不高&#xff0c;但通过在多台手机上运行&#xff0c;每天赚取三位数的收入相对容易。 该项目的优势在于可以随时操作&#xff0c;非常适合作为副业。 从项目准备到维护设备&#xf…

Pytorch学习笔记——TensorBoard的初使用

1、TensorBoard介绍 TensorBoard是TensorFlow的可视化工具&#xff0c;但它也可以与PyTorch结合使用。TensorBoard提供了一个Web界面&#xff0c;可以展示你训练过程中的各种信息&#xff0c;如损失值、准确度、权重分布等&#xff0c;更好地帮助开发者理解和调试模型。 Tenso…

css响应式布局左、右上、右中布局

一、布局效果 二、布局代码 <div class"parent"><div class"left">菜单</div><div class"right"><div class"right-top">顶部导航</div><div class"right-content"></div>…

RAG应用全流程

RAG全流程 前提训练一个语义模型&#xff08;高精度&#xff0c;低精度&#xff09;训练一个大模型一个知识库一个精度高知识向量库&#xff08;知识分割后输入高精度语义模型得到&#xff09;一个精度低知识向量库&#xff08;知识分割后输入低精度语义模型得到&#xff09; 应…

粗俗理解多层感知器

一、前言 参考资料和图片均来自以下链接&#xff1a;https://www.youtube.com/watch?vaircAruvnKk&listPLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pihttps://www.youtube.com/watch?vbfmFfD2RIcghttps://www.youtube.com/watch?vKuXjwB4LzSAhttps://www.youtube.com/watch?vIl…

C#知识|事件集中响应,多个按钮关联同一事件(实例练习)

哈喽&#xff0c;你好&#xff0c;我是雷工&#xff01; 本节学习窗体Controls集合、控件事件的统一关联及如何优化重复代码。 01 事件集中响应 原理&#xff1a;就是相同的控件&#xff0c;可以关联同一个事件响应方法。 02 示例演示 2.1、示例功能 该示例实现窗体中选择…

433M无线射频信号控制继电器--第三天

1.先sbit&#xff08;位地址访问p1^1,p1^2,p1^3口&#xff09; 当按下A键时D0输入高电平&#xff0c;继电器IO口导通&#xff0c;则接通电源或者灯亮 当按下C键时D1口输入高电平&#xff0c;继电器IO口为高电平&#xff0c;不导通 2.433m无线模块知识 433m无线模块基础知识 -…

容斥原理以及Nim基础(异或,SG函数)

容斥原理&#xff1a; 容斥的复杂度为O&#xff08;2^m)&#xff0c;所以可以通过&#xff0c;对于实现&#xff0c;一共2^n-1种&#xff0c;我们可以用二进制来实现 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long LL; cons…

奈氏准则和香农定理

一、奈奎斯特和香农 哈里奈奎斯特&#xff08;Harry Nyquist&#xff09;(左) 克劳德艾尔伍德香农&#xff08;Claude Elwood Shannon&#xff09;(右) 我们应该在心里记住他们&#xff0c;记住所有为人类伟大事业做出贡献的人&#xff0c;因为他们我们的生活变得越来越精彩&…

数字旅游以科技创新为核心竞争力:推动旅游服务的智能化、高效化,满足游客日益增长的旅游需求

一、引言 随着科技的飞速发展&#xff0c;数字旅游作为旅游业与信息技术结合的产物&#xff0c;正以其独特的魅力改变着传统旅游业的格局。科技创新作为数字旅游的核心竞争力&#xff0c;不仅推动了旅游服务的智能化、高效化&#xff0c;更满足了游客日益增长的旅游需求。本文…

挑战一周完成Vue3项目Day5:数据大屏+菜单权限+按钮权限

一、数据大屏 国内echarts镜像站&#xff1a;ISQQW.COM x ECharts 文档&#xff08;国内同步镜像&#xff09; - 配置项 echarts图表集&#xff1a;echarts图表集 1.数据大屏适配问题解决 &#xff08;1&#xff09;vw与vh单位解决适配问题 vw/vh&#xff1a;新增单位&…