Git 这样玩 爽翻!!!

2024-04-25 23:58
文章标签 git 爽翻

本文主要是介绍Git 这样玩 爽翻!!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Git架构

在这里插入图片描述

日常8个命令

// 添加文件到工作区
git add 
//显示工作区状态
git status
//提交信息到本地仓库
git commit
//将变更推送至远程仓库
git push
//获取远程分支更新
git pull
//切换或者还原本地更改
git checkout
//克隆远程仓库到本地新目录
git clone
//初始化一个目录为git工作目录
git init 

示例

//克隆远程仓库到本地
git clone https://github.com/a.git
//创建化本地仓库
git init 
//查看当前工作区状态
git status
//将当前工作区的修改添加到暂存区
git add **/*.java
//提交暂存区到本地仓库
git commit -m 'commit message'
//将本地仓库中的文件覆盖到工件区
git reset HEAD~1
//使用当前本地分支新创建一个新分支
git checkout -b feat/1.0
//使用远程指定的分支创建一个新分支
git chekcout -b feat/1.0 origin/feat/1.0
//合建本地仓库文件还原工作区的所有更改
git checkout .
//获取远程仓库的更新
git pull
//将变更推送至远程仓库
git push 
//将本地仓库当前文件推送到远程仓库,交推送分支上的更改
git push --set-upstream origin master
合并 merge
//切换分支至master
git checkout master
//获取master分支上的变更
git pull 
//切换分支到feat/1.0
git checkout feat/1.0
//合并master分支到feat/1.0
git merge master

merge与rebase的分歧
支持使用 merge 的开发者,他们认为仓库的提交历史就是记录实际发生过什么,它是针对于历史的一个文档,本身其实是有价值的,我们不应该随意修改。我们改变历史的话,就相当于使用“谎言”来掩盖实际发生过的事情,而这些痕迹是应该被保留的。可能,这样并不是很好。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pr2059Y9-1620008435476)(media/16195741701942/16196281708129.jpg)]
支持使用 rebase 的开发者,他们认为提交历史是项目过程中发生过的事情,需要项目的主干非常的干净。而使用 merge 操作会生成一个 merge 的 commit 对象,让提交历史多了一些非常多余的内容。
在这里插入图片描述

使用原则:
只对尚未推送或分享给其他人的本地修改执行变基操作清理历史,从不对已经推送到仓库的提交记录执行变基操作,这样,你才可能享受到两种方式带来的便利。

修改commit中的message

有时提交后发现提交的历史中有些commit message描述不准确,又或者需要在当前提交中再添加更改,这时不想再生成一个新的commit Id,达到合并的效果。这时可以使用 git commit --amend

//修改工作区的文件
echo "test git commit --amend" >> test2.txt
//暂存工作区的变更
git add test2.txt
//提交工作区的修改并保存修改提交描述
git commit --amend 

在这里插入图片描述

当前工作区没有暂存的变更时使用git commit --amend可以达到修改上一次提交中的message的目的

合并部分提交

产品汪小明发布了版本1.4的开发计划;开发小红创建feat/1.4分支进行对应的功能开发,业务主小靜告诉小明业务需要快速上线;可以先上1.4版本中的功能A;得到这个消息后…

产品汪小明:怎么办,功能A要先上,能快速剥离出来功能A吗?

开发小红:我去WC …

在这里插入图片描述

小红回来后使用git cherry-pick很快解决的产品汪的需求,她这样操作了:
feat/1.4 分支log:
在这里插入图片描述

//将分支切换到目标分支 master
git checkout master
//使用 cherry-pick 摘出42032b6 commitID的提交内容
git cherry-pick 42032b6

master分支执行git cherry-pick后的结果
在这里插入图片描述

执行git cherry-pick会在分支中创建一个新的Commit ID
git cherry-pick commitid1 commitid2 可以合并多个到当前分支

回滚提交

在合并分支到master时不小心合并错了,需要将master分支回滚到上一个版本;git为我们提供了小工具revert;只需要执行git revert 32e4481就可以回滚到32e4481的commitid点上;
执行回滚前:
在这里插入图片描述

执行get revert 32e4481后:
在这里插入图片描述

revert操作会在当前分支前插入新的commitId0038c12
在实际工作中不建议进行revert解决回滚的问题,而是使用reset命令,将当前工作区域还原到指定的commitId状态;这样在后续需要时还可以通过reset还原回来;

查找记录reflog

在使用git reset命令还原工作区后再使用git log打印提交日志将看到还原点的后继提交日志;这怎么办呢?
git 提供了reflog工具,它默默的为我们记录下了git的所有操作记录;妥妥的小助理;
git reflog结果如下:
在这里插入图片描述

在这段日志中能看到上面revert的操作记录0038c12;合并版本feat/1.4的merge记录e61d5da;如果现在需要回退到feat/1.4合并后的提交只需要执行

git reset --hard e61d5da

再使用git log打印提交记录主是下面的结果了:
在这里插入图片描述

get reflog的结果中也增加了reset操作的记录
在这里插入图片描述

通过查询reflog后可以再次使用git reset --hard 0038c12还原到回滚点上

批量修改历史记录

在开源或者个人项目中使用了公司的邮箱进行提交,这时我们想把所有这样错误的提交修改回来;这样的需求git也为我们想到了,你只需要这样操作:

//为了安全先创建一个分支
git branch -b testing
//对提交的错误信息进行修改
git filter-branch --commit-filter 'if [ "$GIT_AUTHOR_EMAIL" == "jason_test@jasony.site" ]; thenGIT_AUTHOR_NAME="jason";GIT_AUTHOR_EMAIL="jason@gmail.com";git commit-tree "$@"elsegit commit-tree "$@"fi' HEAD

这里我们可以使用 filter-brach 的方式进行修改,但是建议在使用之前,新建一个分支,在上面进行测试没有问题之后,再在主干上操作,防止出现问题,背个大锅在身上。
使用这样的命令可以搞这些事

  • 开源或个人项目中使用了公司邮箱进行提交了
  • 提交文件中包含隐私性的密码相关信息
  • 提交时将大文件提交到了仓库代码中了
快速克隆

在大项目中新拉取代码会是一个很占用时间的活,如果再遇上网络带宽低的话基本一个半天可以去摸鱼了。
怎么办呢?
git已经想到了,在执行clone命令时加上--depth参数;--depth=1表示只拉取分支中最新的一次提交历史,不包含项目中其它的历史提交记录;在.get/objects/目录下的对象只是本地的,没有包含之前修改产生的对象。

git clone http://github.com/jason/d.git --depth=1

clone 完成后git log的打印结果如下:
在这里插入图片描述

如果需要快速克隆么个tag或者分支可以这样操作

//创建目录​
​mkdir project-v1.4 && cd project-v1.4
//初始化git​
git init
//添加远程库链接​
git remote add origin https://github.com/jason/d.git
//获取远程库tag 深度为1​
​git fetch origin v1.4 --depth=1
//将结果创建一个新分支​
​git checkout FETCH_HEAD

这样能快速的克隆指定的Tag或者分支

工作中的中断处理

工作中经常会有多路运转的情况,在这样的情况下怎样保持高效呢?
git stash来帮您:

//将工作区的内容进行存储,并将工作区回滚到HEAD
git stash push 
//显示stash存储的项
git stash list
//将stash存储栈中的最后一次存储的内容还原到工作区并删除这一项
git stash pop
//将stash存储栈中指定索引位置的项还原到工作区,不删除索引位置的项
git stash apply
//将项从stash存储栈中删除
git stash drop

在当前分支中进行内容修改还没有修改完成时需要放下当前的工作在另外的分支上处理其它问题时,可以将当前工作区的内容stash,执行git stash push -m 'test'命令;然后切换到另外的分支进行工作;完成后再切换回没处理完成的分支,通过git stash pop进行工作区的还原;
这样做的好处在于不用将没有完成的工作内容commit到本地仓库中,增加无效的commit;缺点在于这些更改存储在本地,如果本地数据丢失将无法找回。

公众号阅读 码农杰森

扫码关注博主公众号

这篇关于Git 这样玩 爽翻!!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936155

相关文章

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

Git如何修改已提交人的用户名和邮箱

《Git如何修改已提交人的用户名和邮箱》文章介绍了如何修改Git已提交人的用户名和邮箱,包括注意事项和具体步骤,确保操作正确无误... 目录git修改已提交人的用户名和邮箱前言第一步第二步总结git修改已提交人的用户名和邮箱前言需注意以下两点内容:需要在顶层目录下(php就是 .git 文件夹所在的目

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi