git 删除commit了本不应该删除的commit 如何恢复


1.本人从远程的gitlab上pull -f 代码远程的更噺怎么也pull不下来,后来看了下本地的commit比远程多200多次是不是这个原因导致不能从远程仓库pull代码? 我得先push之后才能从远程pull代码


本地比远程嘚commit记录更多, 说明本地比远程更新所以不允许pull

要是远程代码和你本地没有冲突,直接将本地修改commitpush 到远程后就一致了。

要是push时有冲突则可以

然后push 本地代码到远程




你pull不下来,说明你本地有没有commit的代码所以要不你先commit push上去,要不先git stash 存于栈中 到适当时间在取出再git pull








简书著作权归作者所有任何形式的转载都请联系作者获得授权并注明出处。

把SVN上的代码仓库迁移到Gitlab上实际上就是把SVN仓库转变成Git仓库,并且希望能保留原SVN仓库的Commit等历史記录这一点很重要。


  

保留原SVN仓库的Commit等历史记录需要获取到SVN使用的作者名字列表,为了获得 SVN 使用的作者名字列表可以在checkout到本地的仓库蕗径下运行这个:


  

为了将标签变为合适的 Git 标签,运行


  

这会使原来在 remotes/origin/tags/ 里的远程分支引用变成真正的(轻量)标签

接下来,将 refs/remotes 下剩余的引用迻动为本地分支:


  

现在所有的旧分支都是真正的 Git 分支并且所有的旧标签都是真正的 Git 标签。 最后一件要做的事情是将你的新 Git 服务器添加為远程仓库并推送到上面。 下面是一个将你的服务器添加为远程仓库的例子:


  

因为想要上传所有分支与标签你现在可以运行:


  

通过以上漂亮、干净地导入操作,你的所有分支与标签都应该在新 Git 服务器上你可以去gitlab上查看结果了。

笔者在此整理了常见的git命令git的偅要性无需多言,与其再百度海中搜索git命令不妨尝试收藏笔者的此篇作品。希望对你的学习有所帮助

Git 是一款免费的、开源的、分布式嘚版本控制系统。旨在快速高效地处理无论规模大小的任何软件工程
每一个 Git克隆 都是一个完整的文件库,含有全部历史记录和修订追踪能力不依赖于网络连接或中心服务器。其最大特色就是“分支”及“合并”操作非常快速、简便

Git是分布式SCM,而SVN是基于服务器的也就昰说每个开发者本地都有一套git库,每个人维护自己的版本(或者合并其他人的版本)而SVN是每个人写完代码后都及时的checkin到服务器上,进行匼并

Master:用于发布版本的分支;(用于大版本号更新时使用)
Dev:开发时的主分支;
Feature:功能分支;(开发某个局部分支,从dev分支上分出来的)
Release:创建一个预发布分支(从dev分支上分出来合并到master分支上,进行tag标注)
Bug:bug分支(从master分支上分出来修改完毕后合并到master和dev分支)

在git进行分支嘚合并时
直接修改当前HEAD指针的指向然后再修改当前HEAD指针,说白了就是修改两个指针的指向而并没有生成新的commit对象。

如果使用—no-ff 进行合并
這样会在master分支上创建一个版本;

  • git如何解决代码冲突:

现在的前端开发已经不再仅仅只是静态网页的开发了日新月异的前端技术已经让前端玳码的逻辑和交互效果越来越复杂,更加的不易于管理模块化开发和预处理框架把项目分成若干个小模块,增加了最后发布的困难没囿一个统一的标准,让前端的项目结构千奇百怪前端自动化构建在整个项目开发中越来越重要。

在前端的技术栈发展过程中出现了很哆的工具,形成了工具化能够用工具完成的绝不要手工完成,来帮助开发者提升效率

  1. 前端开发系列工具: livereload,数据mock代码监控,代码检查

工程化是一个发展趋势,以工具化为基础

工程的核心是流程自动化,又称为构建这些包括了:代码质量检测,代码压缩代码合並,代码优化代码编译,单元测试等等部分构建就是把这些以工作流程的方式组合起来,然后用一个命令行运行这整个流程它有点潒批处理,但是是程序开发中使用的特殊批处理

自动化是以工程化为基础,是在流程自动化上更进一步的自动化
持续集成就是全自动囮的一个终极体现。他的主要流程是:版本控制库 ->构建 ->测试 ->报告.

代码规范可以提高代码的可阅读性和避免一些低级错误为了将代码规范嘚检查放到前端开发工程中,各种前端语言都有对应的hint或者lint工具

甚至为了避免这一点,引入了各种预编译语言css的预编译less,现在流行的昰sass功能也更加强大,语法错误无法通过编译来弥补css这种缺陷。

js的预处理语言也有很多只是为了让有其他语言经验的开发者更容易的仩手js的编码。

因为浏览器的实现大多还是 ES5 的标准为了使用最新的 ES6 语法,通常的做法是采用 Babel 将 ES6 编译为 ES5

通常一个前端项目会分有一个 src 目录囷 dist 目录, src 放置源码dist 放置编译后的代码。所以在前端工程的流程中会涉及到文件的拷贝删除,移动等流程

通常的前端开发过程是,修妀前端代码调用命令编译代码,然后浏览器 F5 刷新这个过程可以做到自动化,通过代码监控工具指定要监控的目录和文件,如果对应攵件有改变调用编译工具编译源码,然后通过 livereload 自动刷新浏览器 gulp-browserify也可以实现同样的功能。

现代化前端项目开发大多是前后端分离的方式也就是后端基本是提供 API 服务,在真实开发环境中通常的问题是,后端 API 极其不稳定或者没开发为了不阻碍前端的开发,通常的做法是前后端先约定 API 接口定义,然后前端根据定义 mock 接口

为了解决前端工程中复杂的流程,出现了很多开源前端流程处理工具这些工作流工具不仅仅是其本身,都是一个流程生态体系每个工具都涉及到对应的插件库,几乎我们能想到的前端工程问题都有对用的插件能够解决

Gulp 是基于node.js的一个前端自动化构建工具,开发这可以使用它构建自动化工作流程(前端集成开发环境) 
使用gulp你可以简化工作量,让你把重點放在功能的开发上从而提高你的开发效率和工作质量。 gulpjs是一个前端构建工具与gruntjs相比,gulpjs无需写一大堆繁杂的配置参数API也非常简单,學习起来很容易而且gulpjs使用的是nodejs中stream来读取和操作数据,其速度更快

使用gulpfile.js进行配置基于gulp工作流的项目结构如下:

2.gulp.dest(path[, options]) 能被 pipe 进来,并且将会写文件并且重新输出(emits)所有数据,因此你可以将它 pipe 到多个文件夹如果某文件夹不存在,将会自动创建它输出文件
根路径:如果在src中不設置base时,所有的默认根路径都是从出现匹配符的地方开始截取:


  

如果增加base基路径:

Name:任务的名字,如果你需要在命令行中运行你的某些任务那么,请不要在名字中使用空格
Deps:类型: Array,一个包含任务列表的数组这些任务会在你当前任务运行之前完成。
Fn:该函数定义任務所要执行的一些操作

// 做一些事 -- 异步的或者其他的
 



 












// 做一些事 -- 异步的或者其他的
 



 









 
 
 

2)监听文件改变,并执行回调函数
 



(五)实现项目自动化构建:
使用gulp构建项目项目中支持:
1)js的模块化(可以实现模块化(common与require的切换));
2)sass的编译;
3)jslint的代码校验;
4)划分本地启动配置和线上打包配置;
5)实現文件的md5加密;
6)实现本地的开发服务;
7)实现mock数据
8)实现本地实时刷新
本篇文章内容还未补全,之后会做更多修改以期待完成补全,不过对於初学git以及node的同学来说已然是够用了

我要回帖

更多关于 git 删除commit 的文章

 

随机推荐