Git 将代码恢复到一个历史的版本

Git 将代码恢复到一个历史的版本

要把代码回到某个历史版本 比如 test有两种方法

暴力的方式

如果你的仓库是自己在用(不影响别人),那么你可以使用 git reset --hard <target_commit_id> 来恢复到指定的提交,再用 git push -f 来强制更新远程的分支指针。为了保证万一需要找回历史提交,我们可以先打一个 tag 来备份。

对于刚刚的例子,需要执行的命令就是:

// 备份当前的分支到 backup_commit
git tag backup_commit
git push origin backup_commit
// 重置 source 分支
git reset --hard 23801b2
// 强制 push 更新远程分支
git push origin source -f

温和的方式

如果你的仓库是多人在协作,那么你这么操作会使用别人本地的代码库混乱,所以只能建一个新的提交,这个新的提交中把想取消的提交都 revert 掉,那么具体应该如何做呢?方法如下:

首先,和刚刚一样,用 git reset --hard 23801b2 将代码切换到目标提交的 id。接下来,用 git reset --soft origin/source 命令(source 分支),将当前代码切换回最新的提交。

执行完上面两步后,你的仓库还是最新的提交,但是工作区变成了历史的提交内容,这个时候用 git add 和 git commit 即可。

该方法需要保证 reset 的时候没有别人做新的提交,如果有的话,会一并把别人的提交也撤销了。所以还是挺危险的,慎用。

原文地址:https://www.cnblogs.com/handongyu/p/9535885.html

时间: 2024-11-09 21:01:57

Git 将代码恢复到一个历史的版本的相关文章

Eclipse 代码恢复到历史版本

Eclipse每次一个可编辑的文件保存在工作台,工作台更新本地的历史文件和日志的更改.文件的本地历史可以访问和先前保存的副本文件可以恢复,只要足够所需的状态是最近在保存历史.下面我来介绍怎么进行本地代码恢复.在我们使用eclipse进行编码的时候,我们有可能进行了误操作导致代码丢失.所以把代码恢复到一个我们编码的历史时间点这个功能就显得很重要了. 1.创建一个新文件名叫sampleFile.txt. 2.在编辑器中改变sampleFile.txt.添加一行"change1",保存这个文

谷歌为什么把上十亿行代码都放在一个仓库里

相对于一般公司,Google 使用了单一代码仓库,很多人不理解为什么这么做.本文作者是谷歌基础设施小组的工程师,他对这个问题进行了详细解读. 早期 Google 员工决定使用集中式源代码管理系统来管理代码库.这种方法已经在 Google 运行了 16 年以上,而今天绝大多数的 Google 软件仍然存储在一个共享的代码库中. 随着 Google 开发软件数量稳步增加,Google 代码库的规模也呈指数增长. 因此,用于管理代码库的技术也发生了显著变化. 本文概述了该代码库的规模,并详细介绍了 G

git 还原、恢复、回退

通过git revert来实现线主干代码的回滚.如下命令 对于 merge类型的commit对象,还需要"-m"参数 git revert -m 1? commit-id 对于普通的commtit对象 git revert commit-id 1?问题描述 一个同事不小把自己代码合并 到了master生成C2.但是在该同事还没有回滚之前,又有其他同事合并到master生成了?C3.现在问题是我们想要回滚到C1应该怎么做? 2 解决问题 1.选择git revert还是git reset

Jenkins获取git tags代码

配置Jenkins获取git tag代码的方式其实方法很多,目前我使用比较多的主要是通过Git Parameter 来配置动态的获取最新tags代码,主要我们首先需要安装一下Git Parameter Plug-In插件,有时候直接安装会安装失败,那就直接手动安装一下. 下载地址:http://updates.jenkins-ci.org/download/plugins/git-parameter/ 1.我们进入我们目标Jenkins任务,选择[参数化构建过程]->[添加参数]->[Git

学习使用Git 版本控制 代码管理

Git 版本控制 学习教程 Git版本控制器,可以作为程序员.计算机科学和软件工程的研究人员在编写代码.工程开发过程中的文件管理和代码管理的工具.在基本的Git Bash和Git GUI之外,有很多在MacOS.Linux和Windows下的Git 管理工具以可视化的方法辅助版本控制和代码控制. 在我的实际工作和学习中,需要用到Git实现本地代码的版本管理和代码控制,在坚果云上进行代码同步和迁移,使得实验室的台式机和个人笔记本上都有最新版的代码,并且可以记录每天修改和新增代码的进度. 由于jav

Git 提交代码

你可以在本地创建一个空白的文件夹,然后克隆刚刚创建的项目(ps: clone url 在项目主页的右下方位置可以找到)本地,然后添加代码再上传. mkdir emptyFolder cd emptyFodler git clone https://github.com/youraccount/yourproject.git 然后剩下的就是git add和git push的事情 本地已经存在代码 在你的项目文件目录先执行命令git init,使之成为一个git仓库. 将项目里所有文件加到本地的仓库

git提交代码至远程仓库

代码提交 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交的文件 4.提交已暂存的文件 5.同步到服务器 1.     查看目前代码的修改状态 提交代码之前,首先应该检查目前所做的修改,运行git status命令 a)        已暂存 (changes to be committed) new file //表示新建文件 modified //表示修改文件 deleted //表示删除文件 b)       已修改 (changed but n

ubuntu Gitolite管理git server代码库权限

公司代码库用Git,全部用SSH认证,多个代码库多个用户,权限管理是个头疼的问题,今天终于有空测试下Gitolite, Gitolite是在Git之上的一个授权层,依托sshd或者httpd来进行认证.(概括:认证是确定用户是谁,授权是决定该用户是否被允许做他想做的事情). Gitolite允许你定义访问许可而不只作用于仓库,而同样于仓库中的每个branch和tag name.你可以定义确切的人(或一组人)只能push特定的"refs"(或者branches或者tags)而不是其他人.

将多重嵌套数组恢复为一个数组

问题:给定一个任意多重嵌套数组,把它恢复为一个完整的数组,没有嵌套. 样例: Input steamrollArray([[["a"]], [["b"]]]) steamrollArray([1, [2], [3, [[4]]]]) Output ["a", "b"] [1, 2, 3, 4] 实现:利用dfs搜索,一步步找是否是数组(Array.isArray(arr)判断是否是数组) 代码如下: 1 function st