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

相关文章

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

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

如何删除不小心上传到git远程仓库中的.idea .iml文件

如果在开始的时候不配置,gitignore文件或者文件配置不正确,初始化上传的时候就会有一些不必要的信息上传上去 如果已经存在了一些文件在git远程仓库中,如。idea,.iml文件等。 首先在项目中定义一个  .gitignore文件,简单的实例如下也可以用idea中的gitignore插件 .DS_Storeclasses/*.settings/target/.classpath

ubuntu16.04 Git add 使用tab键卡死

以前使用Ubuntu14.04 进行git add 操作时使用TAB键可以很快自动补全,但自从使用16.04使用TAB半天没有反应。 一开始以为是Git版本问题,后验证与Git无关。 搜索发现与Dash有关,以下是博客原文: http://www.51testing.com/html/50/n-1245050.html 今天碰到一个问题git 后面的参数用Tab键无法补全