• git log:查看 commit 提交历史

  • git log --pretty=oneline:简化log输出内容

  • git reflog:查看每一次命令的历史记录

版本回退

  • git reset HEAD/HEAD^/...:重置当前分支的HEAD为指定commit,同时重置暂存区,但工作区不变

  • git reset --hard HEAD/HEAD^/...:重置当前分支的HEAD为指定commit,同时重置暂存区和工作区

  • git reset --keep HEAD/HEAD^/...:重置当前分支的HEAD为指定commit,同时保持暂存区和工作区不变

┌────┐
│HEAD│
└────┘

│ ○ append GPL
│ │
└──> ○ add distributed

○ wrote a readme file

若要版本回退,首先Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

每次commit用一串哈希值标识,选择时不需要填入全部,只要能区分就行

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file $ git reset --hard HEAD^
HEAD is now at e475afc add distributed $ git log --pretty=oneline
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

最新的那个版本append GPL已经看不到了!

版本回退之后的后悔药

┌────┐
│HEAD│
└────┘

└──> ○ commit id ???
|
○ add distributed

○ wrote a readme file

若要再回去:

  1. 未关机:直接翻看之前append GPL版本的commit id
  2. 重启了:git reflog用来记录了你的每一次命令
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

现在又回到append GPL版本了!

检出

checkout用于切换分支或恢复工作区,注意它会覆盖文件(危险)

  • git checkout:列出暂存区可以被检出的文件

  • git checkout file:从暂存区检出文件到工作区,覆盖工作区内容,但不清除暂存区

  • git checkout .:检出暂存区的所有文件到工作区

  • git checkout [HEAD/HEAD^ ... ] file:检出某个 commit 的指定文件到暂存区和工作区

  • git checkout [HEAD/HEAD^ ... ] .:检出某个 commit 的所有文件到暂存区和工作区

示例:使用检出撤销修改

① 当修改没有添加到暂存区:

  1. 直接在工作区改回来
  2. 使用git checkout file丢弃工作区的修改(或已经添加到暂存区文件后又修改了没添加)

② 当修改已经添加到暂存区:

  1. 撤销暂存区的修改:git reset HEAD <file>git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。使用HEAD表示最新的版本。)

  2. 撤销修改后,再丢弃工作区的修改:git checkout file

③ 当修改已经提交到版本库,那就版本回退:

$ git reset --hard HEAD^

④ 当修改已经推送到远程版本库:GG!

移动和删除

  • git mv src dest:移动文件(移动到当前目录可用于改名)

  • git rm file:同时删除版本库和工作目录中的文件

  • git rm --cached file:从版本库中删除,但不删除工作目录中的文件

以上改动后不需要add,但必须 commit 后才改动版本库内容

示例:

情景一:已从工作区中删除,且需要从版本库同步删除行为

$ git rm/add test.txt
rm 'test.txt' $ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt

情景二:工作区中误删了,从版本库中恢复误删的文件(也就是撤销工作区的修改)

git checkout -- test.txt

情景三:同时删除版本库和工作区中的文件

git rm .\test.txt
git commit -m "delete test.txt"

Git:本地仓库管理的更多相关文章

  1. Git 本地仓库管理

    目录 目录 基本概念 配置 配置个人帐号信息 安装 本地版本库 创建 Git 仓库 Git 仓库版本回退 修改管理 基本概念 工作区(Working Directory): 就是你在电脑里能看到的目录 ...

  2. git本地仓库管理远程仓库

    git remote add origin https://xxxxxgit push -u origin master

  3. Git本地仓库

    原文:http://www.cnblogs.com/wilber2013/p/4189920.html Git基本概念 在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository) ...

  4. Git本地版本控制备忘

    首先git是一个版本控制工具,类似于SVN 笔记包括两部分,git本地版本控制和git远程协助 一.Git本地版本控制 以git windows版本msysgit为例,下载地址http://msysg ...

  5. **Git本地仓库图解

    Git基本概念 在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository),每个仓库可以简单理解成一个目录,这个目录里面的所有文件都通过Git来实现版本管理,Git都能跟踪并记录 ...

  6. 版本控制git之一 仓库管理 安装 基础

      版本控制git之一-仓库管理 git ​ 再开始这个话题之前,让我想起了一件很痛苦的事情,在我大学写毕业论文的时候,我当时的文件是这样保存的 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业 ...

  7. Git本地服务器搭建及使用详解

    Git本地服务器搭建及使用 Git是一款免费.开源的分布式版本控制系统.众所周知的Github便是基于Git的开源代码库以及版本控制系统,由于其远程托管服务仅对开源免费,所以搭建本地Git服务器也是个 ...

  8. git本地提交到远程仓库命令

    创建好远程仓库,然后要从本地上传代码到远程仓库: 1.git init 初始化git本地仓库 2. git add 添加到暂存区 3. git commit -am "提交备注" ...

  9. 搭建Git本地服务器

    搭建Git本地服务器 参考文章:http://www.ossxp.com/doc/git/gitolite.html 当前任务,学习中... 公司小范围用法: 服务器上做的: .在服务器上建立一个用户 ...

  10. Git-gitblit-Tortoisegit 搭建Windows Git本地服务器

    1.Gitblit安装 1.1.Gitblit简介 Git在版本控制领域可谓是深受程序员喜爱.对于开源的项目,可以免费托管到GitHub上面,相当的方便.但是私有项目托管到GitHub会收取相当昂贵的 ...

随机推荐

  1. 阅读笔记:Item-based Collaborative Filtering Recommendation Algorithms

    概要: 推荐系统通过信息获取技术解决在线的个人的消息.产品或者服务的推荐问题.这些系统,特别是基于k临近协同过滤算法,在网络上取得了广泛的成功.可用信息和访问人数的巨大增加成了推荐系统一个难题.基于商 ...

  2. 【noi 2.2_7891】一元三次方程求解(二分枚举+输出程序运行时间)

    对于noi上的题有2种解法: 1.数据很小(N=100),可以直接打for循环枚举和判断. 2.不会"三分",便用二分.利用"两根相差>=1"和 f(x1 ...

  3. codeforces 630K Indivisibility (容斥原理)

    IT City company developing computer games decided to upgrade its way to reward its employees. Now it ...

  4. hdu4770 Lights Against Dudely

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  5. xml——dom&sax解析、DTD&schema约束

    dom解析实例: 优点:增删改查一些元素等东西方便 缺点:内存消耗太大,如果文档太大,可能会导致内存溢出 sax解析: 优点:内存压力小 缺点:增删改比较复杂 当我们运行的java程序需要的内存比较大 ...

  6. Codeforces Round #654 (Div. 2) B. Magical Calendar (结论)

    题意:你需要在长度从\(1\)~\(k\),宽度无限的网格图中造图形(每个点四周必须连通),问最多能造出多少种不同的图形. 题解:感觉没什么好说的,就是画图找规律,如果\(r\ge n\)的话(即没有 ...

  7. PowerShell随笔6---ISE

    简单的命令可以通过控制台窗口输入执行,但是我的脚本逻辑复杂,需要保存.总不能在命令行工具中执行吧. 关了窗口,啥都没了.有没有一个IDE,有. 在PowerShell命令行窗口中输入:ISE,就会打开 ...

  8. KVM Pass-through 上部署 MiniSMB HurricaneII

    KVM Pass-through 上部署 MiniSMB HurricaneII 免费网络测试,是一款专门用于测试无线控制器, 智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具 ...

  9. 鸟哥的linux私房菜——第四章学习

    ******************第四章学习****************** [热键] 1.Tab键:命令补全:文件补全: 2.Ctrl+c:中断目前指令: 3.Ctrl+d:离开当前文本界面: ...

  10. C++ STL (基础)

    STL是什么(STL简介) 本节主要讲述 STL 历史.STL 组件.STL 基本结构以及 STL 编程概述.STL 历史可以追溯到 1972 年 C 语言在 UNIX 计算机上的首次使用.直到 19 ...