找回Git中丢失的Commit】的更多相关文章

在使用Git的过程中,有时候会因为一些误操作,比如reset.rebase.merge等.特别是在Commit之后又执行了git reset --hard HEAD强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时自己的Commmit记录也消失了.碰到这种情况,不要慌,我们在Git上做的任何操作都只是在原来之前的操作上做修改,并且会被记录下来保存,也就是说无论你做了什么,对于Git来说都可以进行回滚操作. 找回Commit 通过以下例子来了解下具体怎…
总结:更新代码前一定要先将本地修改的文件存到本地git仓库.今天脑残直接更新了远程仓库代码导入今天写的代码...... @[git|commit|reflog] 在使用Git的过程中,有时候会因为一些误操作,比如reset.rebase.merge等.特别是在Commit之后又执行了git reset --hard HEAD强制回滚本地记录以及文件到服务器版本,导致本地做的修改全部恢复到Git当前分支的服务器版本,同时自己的Commmit记录也消失了.碰到这种情况,不要慌,我们在Git上做的任何…
1.Git中有三种对象 commit 每执行一次git commit,git都会对当前工作目录的所有文件生成一次镜像,工作区下的目录对应的对象是tree,工作区下的文件对应的对象是blob,tree下面可以有blob,又可以有tree: tree tree表示每次提交对工作区下的目录生产的镜像: blob 每执行一次git add,git都会对新增或修改的文件在.git/objects下生成一个镜像文件,该文件就是一个blob: 2..git目录 ├─hooks ├─info ├─logs │…
From : http://dmouse.iteye.com/blog/1797267 git 的错误操作,导致丢失了重要的commit,真是痛不欲生: 最后通过git神器终于找回了丢失的commit,但是需要总结和反思的地方有一些,同时需要加深git的学习,特献上本文以供参考 执行git reset --hard HEAD~1 ,删除了commit3,但是发现reset错了,晕菜了…… 还好有后悔药(感叹git的强大啊,神马意外情况都考虑到了)满血恢复commit3,执行如下步骤: git r…
崩溃的一天,打算提代码走人,结果切分支之后,commit丢了= =,找了三个多小时 接下来分享下如何找回丢失的commit的 打开项目所在位置,打开git bash,在gitBASH中输入 git fsck --lost-found | grep commit | awk '{print $3}' | xargs -I {} git log --pretty=format:"%h %cd" {} 可以查看到所有的commit信息,这样就可以按照时间确定自己的commit是哪个 在git…
有的时候我们一不小心就git commit -m ‘commit message info’解决办法,很简单,只需执行git reset HEAD~这条命令即可,即能保证你原本的修改还在,也能撤销本次提交失误. 这种撤销上一次提交是比较好的,如果是版本回退的话也能解决这个问题,但是版本回退只适合于你本次提交并没有改动什么或者改动不大的情况.如果你改动太多,版本回退意味着着你需要重新复制一遍,当然了,解决这种问题的办法有很多,分支开发的方式也能解决这种问题. 顺便补充到,如果git add 失误呢…
在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题. 在你的 Git 项目的历史中,你的位置就像是摇滚专辑中的一个片段,由一个被称为 HEAD 的 标记来确定(如磁带录音机或录音播放器的播放头).要在你的 Git 时间线上前后移动 HEAD ,需要使用 git checkout 命令. git checkout 命令的使用方式有两种.最常见的用途是从一个以前的提交中恢复文件,你也可以整个倒回磁带,切换到另一个分支. 恢复一…
昨天写代码的时候,误删了一个文件.今天发现的时候,commit 已经 push 到版本库了.本想用 git reset 回退版本,找回文件后重新提交.但是想起 Git 是一个版本控制系统哎,直接从版本库里 checkout 出某个文件的历史版本不就好了? 想法挺好,但是很久没用这个功能,自己已经不记得具体的命令了.于是查了下手册,把和 checkout 历史版本有关的几个命令都记录一下. 从某个历史版本创建新的分支 在 Git 中从当前分支创建并检出新分支的命令是 git checkout -b…
本文转载自:http://gitbook.liuhui998.com/5_9.html 译者注: 原书这里只有两个链接: Recovering Lost Commits Blog Post,Recovering Corrupted Blobs by Linus 我根据第一个链接,整理了一篇博文,并把它做为原书补充. 一.前言 在玩git的过程中,常有失误的时候,有时把需要的东东给删了. 不过没有关系,git给了我们一层安全网,让们能有机会把失去的东东给找回来. 二.准备 我们先创建一个用以实验的…
翻译:李伟 审校:张帆 译自:Github JF杰微刊:如何在Git中撤销一切 任何一个版本控制系统中,最有用的特性之一莫过于 "撤销(undo)"操作.在Git中,"撤销"有很多种含义. 当你完成了一次新的提交(commit),Git会及时存储当前时刻仓库(repository)的快照(snapshot):你能够使用Git将项目回退到任何之前的版本. 下文中,我将列举几个常见的.需要"撤销"的场景,并且展示如何使用Git来完成这些操作. 一.撤…
无论是数据科学家.算法工程师还是普通开发人员,在每个团队协作开发任务中,Git 都是必不可少的版本控制工具,因此掌握它的基本操作十分有必要.但即便是教程满天飞的今天,开发人员在使用 Git 时也还是会犯一些不应该犯的错误.本文总结了其中的几种常见错误,希望能对新手有所帮助. force push 有时,我们会需要用 force push 把 commit 推送到远端仓库. 假设有 2 名开发人员正在合作开发一个分支 之前开发人员1已经完成更改,把代码 push 到了远程仓库 现在,开发人员 2…
公司内部原本使用 SVN 进行版本控制,但随着 Github 的流行我个人的代码管理习惯逐渐转变.虽然公司项目并非开源,SVN 所具有的标准 trunk / branches / tags 结构完全够用,使用 Git 仍然有如下优势: 类似 GitHub 的 GitLab 免费管理工具.将代码托管在自己内部服务器上的同时,提供了优美的 web 界面,图形化分支结构,更直观的代码审查,统计.issue 系统.wiki 等功能全面集成. 更方便主程做 code review,控制代码质量.创建主仓库…
翻译:李伟 审校:张帆译自:Github 任何一个版本控制系统中,最有用的特性之一莫过于 “撤销(undo)”操作.在Git中,“撤销”有很多种含义. 当你完成了一次新的提交(commit),Git会及时存储当前时刻仓库(repository)的快照(snapshot):你能够使用Git将项目回退到任何之前的版本. 下文中,我将列举几个常见的.需要“撤销”的场景,并且展示如何使用Git来完成这些操作. 一.撤销一个公共修改 Undo a "public" change 场景:你刚刚用g…
具体请参考:https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E4%BD%95%E8%B0%93%E5%88%86%E6%94%AF Git命令请参考:https://www.yiibai.com/git/git_config.html 1.分支的概念 Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针.Git 会使用 master 作为分支的默认名字.在若干次提交后,你其实已经有了一个指向最后一次提交对象的 mas…
1.查看提交的历史版本(git log) 我们可以使用 git log 命令来查看提交的历史版本. 默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面.每个版本都有一个 SHA-1 校验和.作者的名字和电子邮件地址.提交时间,最后缩进一个段落显示提交说明. 1.1.展开显示每次提交的内容差异(git log -p) git log -p 命令将会列出每次提交时相对于上一版本的修改.用 -2 则只显示最近的两次更新 1.2.只显示每次提交的差异的简要信息(git…
rebase失败后的恢复 记一次翻车现场 记一次翻车的现场,很早之前提的PR后面由于需求的变便去忙别的事情了,等到要做这个需求的我时候,发现已经 落后版本了,并且有很多文件的冲突,然后就用rebase去拉代码解决冲突,然后解完之后推代码,但是之后发现一 个文件在解决冲突的时候丢失了.这时候去查看git提交历史,发现rebase之后找不到这个文件了. 最后如何解决呢,要是把丢失的文件在写一遍,那就真的变成了一名咸鱼了.这时候我们就需要去弄明白rebase 的原理了. rebase的使用流程 reb…
现在我们的机器上有了一个 真实项目 的 Git 仓库,并从这个仓库中检出了所有文件的 工作副本. 通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库. git中文件的状态变化周期: git 文件无非已跟踪和未跟踪两种状态,已跟踪的文件状态:unmodified 未修改,已提交: modifid 提交之后再次修改:staged添加至暂存区域的文件,阶段目标完成一起提交的文件暂存在这里. 我们开发在工作区中最常用的操作也就是文件在这几个状态之间流转. git…
目录 1.撤销操作说明 2.撤销工作区中文件的修改 3.撤销暂存区中文件的修改 4.总结 1.撤销操作说明 我们在使用Git版本管理时,往往需要撤销某些操作.比如说我们想将某个修改后的文件撤销到上一个版本,或者是想撤销某次多余的提交,都要用到Git的撤销操作,因此撤销操作在平时使用中还是比较多的. 本文介绍几种,对于已修改过的文件,需要进行撤销操作,根据修改文件出现的位置,可以分为三种情况: 仅仅是工作区中内容进行了修改,还未添加到暂存区. 文件已经添加到暂存区,但是还未提交到本地版本库. 文件…
Git 中回退有 reset 和 revert,这两个的区别就是是否保留更改记录 假设当前的提交情况是:A <- B <- C <- D <- HEAD,如下图: 当前是 D,希望回退到 A,那我们可以使用 reset 命令,reset 后再看 git log 就会发现:B <- C <- D 宛如没有出现过,这适用于想完全舍弃 A 之后的修改 但是如果我们想保留 B <- C <- D 的修改记录,可能这三个 commit 的功能只是暂时用不到,以后可能还…
1.使用方法及其作用 git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit).例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了. 就是对已经存在的commit 进行 再次提交: 使用方法如下: git cherry-pick <commit id> 查询commit…
本文参考于:http://www.zhanglian2010.cn/2014/07/git-pull-vs-fetch-and-merge/ 使用git fetch和git pull都可以更新远程仓库的代码到本地,但是它们之间还是有区别 git fetch git fetch origin master git log -p master..origin/master git merge origin/master 从远程的origin仓库的master主分支更新最新的版本到origin/mas…
在进行协作开发代码管理的过程中,常常会遇到某些临时文件.配置文件.或者生成文件等,这些文件由于不同的开发端会不一样,如果使用git add . 将所有文件纳入git库中,那么会出现频繁的改动和push,这样会引起开发上的不便. Git可以很方便的帮助我们解决这个问题,那就是建立项目文件过滤规则. git中提供两种过滤机制,一种是全局过滤机制,即对所有的git都适用:另一种是针对某个项目使用的过滤规则.个人倾向于第二种. 以我的一个项目为例,该项目用.net开发,.config文件.包括生成的bi…
在进行协作开发代码管理的过程中,常常会遇到某些临时文件.配置文件.或者生成文件等,这些文件由于不同的开发端会不一样,如果使用git add . 将所有文件纳入git库中,那么会出现频繁的改动和push,这样会引起开发上的不便. Git可以很方便的帮助我们解决这个问题,那就是建立项目文件过滤规则. git中提供两种过滤机制,一种是全局过滤机制,即对所有的git都适用:另一种是针对某个项目使用的过滤规则.个人倾向于第二种. 以我的一个项目为例,该项目用.net开发,.config文件.包括生成的bi…
(暂存区 即Index In Git) commit 到 local respository的内容,不想push,则使用git reset 将文件状态回转到staged|modified|unstaged: git reset HEAD^   git reset --soft HEAD^git reset HEAD~3    (本地有3次commit未提交时用,也可以git reset HEAD^操作3次) 状态回转用git reset 被delete的内容没有push到远端仓,此时想恢复文件:…
深入了解git的checkout命令 检出命令(git checkout)是Git最常用的命令之一,同时也是一个很危险的命令. 因为这条命令会重写工作区.检出命令的用法如下: 用法一: git checkout [-q] [<commit>] [--] <path>... 用法二: git checkout [<branch>] 用法三: git checkout [-m] [[-b|--orphan] <new_branch>] [<start_po…
方便Eclipse用户使用Git把项目导入到osc@git中进行管理. Eclipse Git osc@git 一.原有项目:  项目名为TestGit 二.在osc@git上面创建一个新项目库. 填写个名字就行了,其他项根据自己的需要填写.点击“创建项目”后,稍等一会儿就会成功: 然后复制地址: 三.再到Eclipse中把需要导入到osc@git中的项目初始化本地库. 然后选择Git: 弹出对话框: 把 User or create respository in parent folder o…
add 添加新文件到 Git 代码仓库的索引中 $ git add filename mv 移动或重命名文件 $ git mv old-filename new-filename rm 从工作目录和 Git 代码索引中删除文件 $ git rm filename status 查看目前工作目录的代码状态,自上次提交以来的添加.修改和删除等 $ git status diff 查看自上次提交以来,本地代码改动的具体情况 $ git diff commit 提交修改的代码(只是提交到本地的代码库,不…
想象一下有例如以下情形:代码库中存在两个分支,而且每一个分支都进行了改动.最后你想要将当中的一个分支合并到其它的分支中.个人博客网址 http://swinghu.github.com/ 那么要问合并的处理过程是怎么样的呢?Git是对每一个分支,根据分支的历史数据依照序列化操作,还是它仅仅是合并每一个分支里文件的最后版本号?这是一个问题,我想对git的merge操作有必要进行分析一下. 回顾一下.我们知道Git的版本号库内部结构是以有向无环图(directed acyclic graph)组织起…
当前有四个commit,现在要将四个commit合并为一个,可以使用git rebase -i HEAD~{这里是要合并的commit数量} 如 git rebase -i HEAD~4 ,即为合并最新的四个Commit,运行git reabse -i HEAD~4后,会出现如下界面 按照图中Commands中的提示操作,将commit b,c,d前面的pick改为s,这里我们将commit a前面的pick改为r,代表使用这个commit,并修改commit message 修改完后保存修改,…
将多次commit合并,只保留一次提交历史. PS:在我练习的时候,将一个文件的代码做了多次修改,而且每次修改都给提交了,这几次改动的目的都一样,比如说修改RADEME.md,但是每次改动的只是一个小小的代码,但是提交历史上的显示看着会很乱,所以需要合并之前的多次提交历史. 1.首先使用git log查看一下提交历史[--oneline作用是将每个提交放在一行显示] 这样在git中看到的是4次提交(更改txt),有点冗余,需要做的是将4次commit合并为一次 2. git 压缩  git re…