修改未push的最后一次commit

如在commit后发现漏添加的文件或者commit message需要修改,则可以依次执行:

git add FILE_UN_STAGED  # 将未提交的文件添加至缓存区
git commit --amend # 弹出文本编辑器,按需修改提交信息

删除错误的提交 commit

git reset --hard <commit_id>
git push origin HEAD --force

删除已经提交的 ignore 文件

有时候我们想忽略某些文件的提交,在.gitignore文件中声明后并不能直接生效,因为该文件已经被track:

git rm --cached file 再commit,如果不加--cached则在本地工作区也会被删掉.

回退文件版本

git 回退某些文件到之前提交的版本

git checkout COMMIT_ID -- FILE_LISTS

如回退到导数第二次提交COMMIT_ID可以写作HEAD~1

恢复误删文件

从之前的版本中检出这个文件,然后重新添加到版本库中,再作为一个新的提交来挽救:

git checkout HEAD^ -- a.txt

其中HEAD^ 代表上一次提交,

-- a.txt 表示将上一次提交里的a.txt文件检出到工作区,这样a.txt就回来了。

接着:

git add a.txt && git commit -m "recover a.txt" && git push

合并两个仓库

示例:将repo2合并到repo1

cd repo1
git remote add other ../repo2 # 这里repo2地址可以是本地目录也可以是网络地址,设置别名为other
git fetch other # 从repo2仓库中抓取数据到本仓库
git checkout -b repo2 other/master # 将repo2仓库的master分支作为新分支checkout到本地,新分支名设定为repo2
此时当前的分支的remote地址是原repo2的,可以在这个分支上向repo2继续提交代码,
如果想将当前分支提交到repo1的新远程分支,使用git push -u origin <新远程分支的名字>
git checkout master
git merge repo2 # 将新分支合并到master

如果不需要原repo2的remote的话,执行git remote remove repo2,执行git remote可以查看到remote列表,或者查看.git/config中的文件内容。

在合并时有可能两个分支对同一个文件都做了修改,这时需要解决冲突,对文本文件来说很简单,根据需要对冲突的位置进行处理就可以。对于二进制文件,需要用到如下命令。

git checkout --theirs BINARY_FILES // 保留需要合并进来的分支的修改

git checkout --ours BINARY_FILES // 保留自己的修改

git add BINARY_FILES

若是文件有冲突、或要建立子目录,建议在repo1中先解决,再进行合并操作。

存储/从文件系统检索

一些项目(例如 Git 项目自身)直接在 Git 文件系统中存储额外的文件而不必是检入文件。

让我们开始在 Git 中存储一个任意文件:

$ echo "Foo" | git hash-object -w --stdin
51fc03a9bb365fae74fd2bf66517b30bf48020cb

此时,该文件对象已在数据库中,但是如果你不设置(一些东西)指向那个文件对象,它将被作为垃圾而回收。最简单的方法是标记它:

$ git tag myfile 51fc03a9bb365fae74fd2bf66517b30bf48020cb

既然在这里我们已经标记了 myfile。当我们需要获取该文件时,我们可以这样做:

$ git cat-file blob myfile

程序员可能经常用到的工具文件(密码、GPG 密钥、等等),不需要每次都检出到磁盘上(特别是在生产环境下),这种方法非常有效。

代理

  • 设置代理

    git config –global http.proxy http://127.0.0.1:8080

    git config –global https.proxy http://127.0.0.1:8080

    git config --global http.proxy socks5://127.0.0.1:8443

    git config --global https.proxy socks5://127.0.0.1:8443
  • 取消代理

    git config --global --unset http.proxy

    git config --global --unset https.proxy

不加global只适用于当前仓库。

git clone 加速完成

git clone --depth 1 <repository>

depth可以控制clone的历史记录层级,显然clone最新的提交占用空间最小,这对于大型工程的clone会体现出时间的缩短。

git fetch也一样。

git设置postBuffer: git config --global http.postBuffer 524288000

能加上传大文件,且有时候能加速clone速度(从十几k到300kb/s)

git other-误删恢复等的更多相关文章

  1. git stash 暂存恢复和文件误删恢复

    git commit提交文件,服务器返回本地文件有修改. 1.git stash :暂存本地代码 2.git pull origin develop : 获取远程分支代码 3.git stash po ...

  2. git 签出(恢复)指定文件

    在项目开发中,偶尔会因为误删文件或其他原因需要从git仓库中恢复某些文件.此篇文章将介绍如何通过git从历史提交记录.分支记录恢复指定文件. 1. git checkout 说明:使用git chec ...

  3. 团队项目管理:Github项目误删恢复记录

    参考: 准备更换git托管,如何迁移原git仓库 Github项目误删恢复记录 今天正常上线打卡,发现组织的线上Github仓库被误删了..本来是一场悲剧,所幸在本地的垃圾箱中翻出了还没有删除的本地仓 ...

  4. linux 下文件误删恢复

    linux 下文件误删恢复 0x01 事件背景 某天晚上写代码的时候,本来想删除当前目录下一个叫xxx的文件夹 rm -rdf ./xxx/*, 结果光顾着和人说话,一不留神手贱把命令敲成了rm -r ...

  5. GIT仓库如何恢复到前一次提交

    GIT仓库如何恢复到前一次提交   通过使用Git版本恢复命令reset,可以回退版本.reset命令有3种方式: git reset –mixed:此为默认方式,不带任何参数的git reset,即 ...

  6. Linux MBR扇区误删恢复

    目录 1. 引导记录误删恢复 1.1 备份引导记录 1.2 误删引导记录 1.3 恢复引导记录 2. 分区表误删恢复 2.1 备份分区表 2.2 误删分区表 2.3 恢复分区表 如果MBR分区表没了, ...

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

    Git 将代码恢复到一个历史的版本 要把代码回到某个历史版本 比如 test有两种方法 暴力的方式 如果你的仓库是自己在用(不影响别人),那么你可以使用 git reset --hard <ta ...

  8. Git提交与恢复

    Git提交与恢复 提交修改 git add --all # 提交所有修改文件 git add file file # 提交部分修改文件 $ git status On branch master Yo ...

  9. git中误删提交(commit)后,怎么恢复

    “xml文件存储数据”提交被我误操作,即使用reset  --hard删除了,然后又进行了三次提交,发现删除的提交有用,需要找回来, 于是找了好久,找到好方法: 1.进入工程下的.git文件下,git ...

随机推荐

  1. 20155328 《网络对抗》 实验九 Web安全

    20155328 <网络对抗> 实验九 Web安全 基础 实验过程记录 在实验开始之前先把webgoat的jar包放到home目录下.打开终端,用命令java -jar webgoat-c ...

  2. C++自学成长之路(第一篇)

    今天开始我将开启C++自学成长之路,今天是第一天,在以前就一直在网上查找关于c++的资料,想买一本好一点的,权威一点的资料书,通过努力查找,我选择了c++ primer,在网上这本书的好评如潮.更多的 ...

  3. LoRa---官方例程移植

    SX1278芯片上移植Semtech官方PING-PONG例程 移植环境:keil5.20 硬件平台:stm32f051+sx1278 1.下载源码:Semtech官网下载最新例程链接:http:// ...

  4. WinDbg命令三部曲

    WinDbg 命令三部曲:(一)WinDbg 命令手册 WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册 WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册

  5. 自定义CCNode

    对Touch事件的获取与处理可以使用CCLayer, CCMenuItem等,但是如果我们需要一个虚拟按键或者需要对特定精灵进行拖动等等,我们就需要自定义Touch类. 自定义Touch事件处理类重要 ...

  6. app.use( )做一个静态资源服务

    var express = require("express"); var app = express(); //静态服务 app.use("/jingtai" ...

  7. [CF1010E]Store[kd-tree]

    题意 有一个长方体,不知道它的位置,给出 \(n\) 个一定在长方体内的点和 \(m\) 个一定不在的点,有 \(k\) 次询问,每次询问一个点是否 在.不在.不确定 在长方体内. \(n\leq 1 ...

  8. java实现基于关键字的文件夹(文件)的搜索、文件夹(文件)的复制、删除

    最近在做一个项目,需要实现这几项功能,上网查了很多资料,自己研究了好几天终于实现了,现在与大家分享一下. 一.JAVA实现文件夹的搜索   在百度搜索N个技术文章,从哪些大牛们共享的资料中终于写出了我 ...

  9. 树莓派Raspberry Pi微改款,Model B 3+规格探析

    18年3月树莓派基金会推出了ModelB 3+版的新款树莓派单板计算机.从编号数字上看,3+仅是3的再提升,在规格上有小幅异动,究竟改进或提升了哪些部分,本文将对此进行探讨. 树莓派版本观察 从过往的 ...

  10. LAXCUS大数据操作系统节点挂掉后的处理

    昨天回公司加班跑一个LAXCUS大数据应用,JVM直接挂了,没有留下任何异常信息,查看代码,也没有内存泄漏的问题.百思不得姐,只好去求教LAXCUS大数据操作系统的技术客服,客服查看了故障节点配置.日 ...