网站首页 > 技术文章 正文
我们在实际工作中,可能会想到编写 shell 脚本来自动化执行一些 git 命令,例如执行 git pull 自动更新代码,并从打印的文件改动信息中过滤掉那些不需要的信息。
但是在测试、调试 shell 脚本时,会发现一个比较困扰的问题:执行 git pull 后,本地仓库已经跟远端服务器保存一致,再次执行 git pull 没有实际更新代码的效果,无法验证对改动信息的过滤是否正确。
如果想要多次测试 git pull 的效果,需要先让本地仓库代码落后于远端服务器代码。具体方法说明如下。
方法一
先执行 git checkout -b local_branch_name HEAD~2 命令,或者执行 git checkout -b local_branch_name commit 命令:
- HEAD 指向当前最新版本,HEAD~1 指回退一个版本,也就是上一个版本,可以简写为 HEAD~,HEAD~2 指回退两个版本。依次类推,可以指定本地分支要落后于服务器多少个版本。
- commit 参数是 git commit 的hash值,通过 commit 参数来指定要回退到哪一个提交。
- 这两个命令的作用是,创建一个新的分支,且新分支的代码已经落后于远端服务器代码
接下来用 git pull remote_repository remote_branch_name 来更新代码,就能看到 git pull 的更新效果。这时不能只执行 git pull 命令,否则会报下面的错误:
fatal: No remote repository specified. Please, specify either a URL or a remote name from which new revisions should be fetched.
当这样pull之后,当前本地分支代码已经最新,再次pull就没有新的改动。如果想要再测试pull效果,可以再创建新的本地分支。
上面执行 git checkout 的时候也可以先不加 -b 选项,先执行 git checkout HEAD~2 命令或者 git checkout commit 命令,执行之后,当前就不处于任何分支下,git 提示可以用 git checkout -b new_branch_name 来创建新的本地分支,然后再用上面的方法来进行pull。
即,总共需要执行下面几个命令来多次测试git pull的效果,具体参数值要换成实际仓库的值:
$ git checkout -b local_branch_name HEAD~2 $ git pull remote_repository remote_branch_name
方法二
如果不想多次创建新的分支,想在当前的本地分支上多次测试 git pull,可以参考下面方法。
先执行 git reset commit 命令,commit 参数是 git commit 的 hash 值,指定要回退到哪一个提交。那么本地代码会被回退,用 git status 命令查看,会看到有一些文件还没有被提交,此时无法执行 git pull,会提示 "Cannot pull with rebase: You have unstaged changes."
接下来需要重新执行 git add、git commit 进行提交,之后就可以用 git pull remote_repository remote_branch_name 命令来更新。
此时,如果 git pull 用的是 git merge 就会提示 branch merge,自动弹出 merge comment,需要手动确认。
如果 git pull 用的是 git rebase,不会提示 branch merge,不需要填写或手动确认 merge comment。
即,这个方法需要执行下面几个命令来多次测试 git pull 的效果,具体参数值要换成实际仓库的值:
$ git reset commit_hash $ git add -A $ git commit -m "your commit message" $ git pull --rebase remote_repository remote_branch_name
猜你喜欢
- 2024-11-07 Git基本操作流程(git 基本操作)
- 2024-11-07 Git 应该用 fetch 还是 pull(git push和fetch)
- 2024-11-07 git 常用命令(git常用命令详解)
- 2024-11-07 git基本用法(git常用)
- 2024-11-07 Git fetch和git pull的区别(git fetch git pull)
- 2024-11-07 【干货】常用的Git命令有哪些?(git常用操作命令 简书)
- 2024-11-07 git常用命令(git常用命令提交)
- 2024-11-07 git 提交代码的简单指令(git提交代码步骤图解merge)
- 2024-11-07 工作流一目了然,看小姐姐用动图展示10大Git命令
- 2024-11-07 说说Git常用的命令有哪些?(git 常用)
- 最近发表
-
- 使用Knative部署基于Spring Native的微服务
- 阿里p7大佬首次分享Spring Cloud学习笔记,带你从0搭建微服务
- ElasticSearch进阶篇之搞定在SpringBoot项目中的实战应用
- SpringCloud微服务架构实战:类目管理微服务开发
- SpringBoot+SpringCloud题目整理
- 《github精选系列》——SpringBoot 全家桶
- Springboot2.0学习2 超详细创建restful服务步骤
- SpringCloud系列:多模块聚合工程基本环境搭建「1」
- Spring Cloud Consul快速入门Demo
- Spring Cloud Contract快速入门Demo
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)