Git:本地仓库管理
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
若要再回去:
- 未关机:直接翻看之前append GPL版本的
commit id - 重启了:
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 的所有文件到暂存区和工作区
示例:使用检出撤销修改
① 当修改没有添加到暂存区:
- 直接在工作区改回来
- 使用
git checkout file丢弃工作区的修改(或已经添加到暂存区文件后又修改了没添加)
② 当修改已经添加到暂存区:
撤销暂存区的修改:
git reset HEAD <file>(git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。使用HEAD表示最新的版本。)撤销修改后,再丢弃工作区的修改:
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:本地仓库管理的更多相关文章
- Git 本地仓库管理
目录 目录 基本概念 配置 配置个人帐号信息 安装 本地版本库 创建 Git 仓库 Git 仓库版本回退 修改管理 基本概念 工作区(Working Directory): 就是你在电脑里能看到的目录 ...
- git本地仓库管理远程仓库
git remote add origin https://xxxxxgit push -u origin master
- Git本地仓库
原文:http://www.cnblogs.com/wilber2013/p/4189920.html Git基本概念 在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository) ...
- Git本地版本控制备忘
首先git是一个版本控制工具,类似于SVN 笔记包括两部分,git本地版本控制和git远程协助 一.Git本地版本控制 以git windows版本msysgit为例,下载地址http://msysg ...
- **Git本地仓库图解
Git基本概念 在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository),每个仓库可以简单理解成一个目录,这个目录里面的所有文件都通过Git来实现版本管理,Git都能跟踪并记录 ...
- 版本控制git之一 仓库管理 安装 基础
版本控制git之一-仓库管理 git 再开始这个话题之前,让我想起了一件很痛苦的事情,在我大学写毕业论文的时候,我当时的文件是这样保存的 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业 ...
- Git本地服务器搭建及使用详解
Git本地服务器搭建及使用 Git是一款免费.开源的分布式版本控制系统.众所周知的Github便是基于Git的开源代码库以及版本控制系统,由于其远程托管服务仅对开源免费,所以搭建本地Git服务器也是个 ...
- git本地提交到远程仓库命令
创建好远程仓库,然后要从本地上传代码到远程仓库: 1.git init 初始化git本地仓库 2. git add 添加到暂存区 3. git commit -am "提交备注" ...
- 搭建Git本地服务器
搭建Git本地服务器 参考文章:http://www.ossxp.com/doc/git/gitolite.html 当前任务,学习中... 公司小范围用法: 服务器上做的: .在服务器上建立一个用户 ...
- Git-gitblit-Tortoisegit 搭建Windows Git本地服务器
1.Gitblit安装 1.1.Gitblit简介 Git在版本控制领域可谓是深受程序员喜爱.对于开源的项目,可以免费托管到GitHub上面,相当的方便.但是私有项目托管到GitHub会收取相当昂贵的 ...
随机推荐
- Wormholes (spfa)
一种路是双向的,路的长度是正值:另一种路是单向的,路的长度是负值: 如果有负环输出YES:否则输出NO:不同的路可能有相同的起点和终点:必须用邻接表 While exploring his many ...
- Codeforces Round #613 (Div. 2) B. Just Eat It!(前缀和)
题意: 一个长为n的序列,是否存在与原序列不同的连续子序列,其元素之和大于等于原序列. 思路: 从前.后分别累加,若出现非正和,除此累加序列外的子序列元素之和一定大于等于原序列. #include & ...
- 【uva 10954】Add All(算法效率--Huffman编码+优先队列)
题意:有N个数,每次选2个数合并为1个数,操作的开销就是这个新的数.直到只剩下1个数,问最小总开销. 解法:合并的操作可以转化为二叉树上的操作[建模],每次选两棵根树合并成一棵新树,新树的根权值等于两 ...
- Educational Codeforces Round 97 (Rated for Div. 2) D. Minimal Height Tree (贪心)
题意:有一个从根节点\(BFS\)得来的序列(每次\(bfs\)子节点的时候保证是升序放入队列的),现在让你还原树(没必要和之前相同),问能构造出的最小的树的深度. 题解:不看根节点,我们从第二个位置 ...
- Codeforces Round #672 (Div. 2 B. Rock and Lever (位运算)
题意:给你一组数,求有多少对\((i,j)\),使得\(a_{i}\)&\(a_{j}\ge a_{i}\ xor\ a_{j}\). 题解:对于任意两个数的二进制来说,他们的最高位要么相同要 ...
- Codeforces Global Round 9 A. Sign Flipping (构造)
题意:有一个长度为\(n\)(odd)的序列,可以更改所有的数的正负,要求最少\(\frac{n-1}{2}\)个\(a_{i+1}-a_i\ge0\),并且要求最少\(\frac{n-1}{2}\) ...
- 洛谷P1119-灾后重建-floyd算法
洛谷P1119-灾后重建 题目描述 给出\(B\)地区的村庄数NN,村庄编号从\(0\)到\(N-1\),和所有\(M\)条公路的长度,公路是双向的. 给出第\(i\)个村庄重建完成的时间\(t_i\ ...
- WOJ1022 Competition of Programming 贪心 WOJ1023 Division dp
title: WOJ1022 Competition of Programming 贪心 date: 2020-03-19 13:43:00 categories: acm tags: [acm,wo ...
- python3 anaconda 安装pyhook3 pythoncom(pywin32)
为什么不安装pyhook 1.pyhook不支持python3 2.网络上有一些方法下载pyhook的whl然后pip安装到python3,可以运行,但是会因为编码问题导致移动到窗口标题含有非ASCI ...
- Leetcode(145)-二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 思路:一开始编写二叉树后序遍历的程序,感觉定级为困难有点欠妥,确实,如果用 ...