Git 本地仓库管理
目录
基本概念
工作区(Working Directory): 就是你在电脑里能看到的目录
版本库(Repository): 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
暂存区 : Git 的版本库里存了很多东西,其中最重要的就是称为 stage(index)的暂存区
配置
配置个人帐号信息
- CLI 方式:
git config --global user.email "jmilkfan@example.com"
git config --global user.name "jmilkfan"
- Edit 方式:
针对账户的配置: vim ~/.gitconfig
[user] # User info
| email = jmilkfan@example.com
| name = jmilkfan
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
editor = vim # 默认编辑器
针对单个项目的配置: vim projectName/.git/config
| repositoryformatversion = 0
| filemode = true
| bare = false
[remote "origin"]
| url = http://fanguiju@192.168.1.1:8080/openstack/projectname
| fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
| remote = origin
| merge = refs/heads/master
[remote "gerrit"]
| url = ssh://fanguiju@192.168.1.1:8080/openstack/projectname.git
| fetch = +refs/heads/*:refs/remotes/gerrit/*
安装
sudo apt-get install git
# OR
yum install -y git
本地版本库
版本库又名仓库(repository),可以简单理解为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建 Git 仓库
- 创建工作目录
mkdir jmilkfanDir
- 将工作目录变成 Git 工作区
cd jmilkfanDir
git init
生成 .git 目录, 这个目录才是本质上的 Git 仓库, 是 Git 来跟踪管理版本库的根本。
- 在工作区创建文件, 并将文件添加到 Git 仓库中, 让 Git 仓库能够记录这个文件的当前状态(内容)
NOTE1 : 只能跟踪文本文件的改动(txt/html/代码文件),而没法跟踪图片、视频、word文件这些二进制文件内容的变化
NOTE2 : 建议所有文件都使用标准的 UTF-8 编码
touch README.md
git status # 查看当前工作区的状态, 即工作区中有那些文件是和 Git 仓库中记录的内容不一样的
# Or
git status -s # 简约的状态查看方式
git add README.md # 添加单个文件
# Or
git add . # 添加所有文件
git diff # 查看当前工作区中的文件内容与已往 Git 仓库中记录的内容有那些不同, 强烈建议在每一次执行 commit 之前都 diff 一次来确保能完成期望的提交
git commit -m "注释, 便于记录这次提交的内容主题" # -m 只能提交单行注释, 并不规范
# Or
git commit # 进入 Vim 编辑模式, 可以编辑规范的注释
status 指令: 可以让我们时刻掌握 Git 仓库当前的状态
add 指令: 本质上是将工作区中的文件记录到 Git 仓库的暂存区中, 并没有真正写入到 Git 仓库
diff 指令: 看当前工作区中的文件内容与已往 Git 仓库中记录的内容有那些不同
commit 指令: 将暂存区的内容提交到 Git 仓库中记录. 所以, add 可以指定多个文件, 最终由 commit 一次性写入到 Git 仓库.
- 删除文件
git rm README.md
git commit -m "remove README.md"
删除文件也会导致工作区和 Git 版本库的不一致, 所以也需要提交操作, 来让 Git 版本库来记录这一此的改变.
NOTE: 删错了, 也可以很轻松地把误删的文件恢复到最新版本
git checkout -- README.md
Git 仓库版本回退
Git 仓库的版本被称为 commit, 一旦你把文件改乱了,或者误删了文件,还可以回退最近的一个 commit.
通过 log 来查看 commit ID:
git log # 查看完整的 log 信息
# Or
git log --pretty=oneline # # 查看简洁的 log 信息
回退的步骤:
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本, 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
git reset
指令. EG:
git reset --hard HEAD^
# Or
$ git reset --hard [commit ID]
NOTE: 回退 “回退” 的方法
只要上面的命令行窗口还没有被关掉,你就可以顺着往上找到那个希望回退 “回退” 的commit id
那么忘记了 commit 怎么办 ? 还可以使用 git reflog 指令
git reflog
修改管理
如果每次在工作区中对文件的修改,不 add 到暂存区,那就不会被提交到 commit 中.
所以当我们 git add 了一个文件后, 发现还需要继续对文件进行修改时, 先别着急提交第一次修改,再次 git add 第二次修改之后 git commit,就相当于把两次修改合并后一块提交了.
第一次修改 ⇒ git add ⇒ 第二次修改 ⇒ git add ⇒ git commit
- 撤销修改
我们可以通过git checkout -- filename
手动的把 filename 文件中的修改撤销掉.
git checkout -- filename
命令中的 – 很重要,没有 –,就变成了“切换到另一个分支”.
把 filename 文件在工作区的修改全部撤销,这里有两种情况:
1. filename 文件自修改后还没有被 add 到暂存区,现在执行 git checkout -- filename
就能够撤销修改, 从而让文件回到和版本库中所记录的一样;
2. filename 已经 add 到了暂存区后,又对文件作了修改,现在执行撤销修改的话, filename 文件就回到 add 到暂存区后的状态(即仍会保留暂存区中的内容)。
NOTE: 针对第二种情况, 我们还可以在 commit 之前, 用命令 git reset HEAD filename
把暂存区的内容进行撤销,让 filename 文件重新放回工作区的状态. git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。
- 使用技巧:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- filename
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,第一步用命令git reset HEAD file
,就回到了场景1,再git checkout -- filename
.
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,git reset --hard [commit ID]
Git 本地仓库管理的更多相关文章
- 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会收取相当昂贵的 ...
随机推荐
- Shiro学习(12)与Spring集成
Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成. 在示 ...
- Linux 常用的一些操作
1.查看linux中某个端口是否被占用 1> 使用lsof lsof -i:端口号 查看该端口是否被占用 2> 使用netstat netstat -antpu |grep 80 ...
- Linux shell脚本编程if语句的使用方法(条件判断)
if 语句格式if 条件then Commandelse Commandfi 别忘了这个结尾If语句忘了结尾fitest.sh: line 14: syntax error: unex ...
- 基于mybatis-plus的代码生成
基于mybatis-plus的代码生成 前言 随着敏捷开发模式的推广,伴着日益增长的需求,日常工作中我们越来越注重效率和便捷性.今天我们就来探讨下如何自动生成代码,准确地说是如何依赖数据库生成我们的e ...
- XSS的原理分析与解剖(第二篇)
0×01 前言: 上节(http://www.freebuf.com/articles/web/40520.html)已经说明了xss的原理及不同环境的构造方法.本期来说说XSS的分类及挖掘方法. 当 ...
- iOS 几种定时器
//第一种 每一秒执行一次(重复性) double delayInSeconds = 1.0; timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_ ...
- vue中记录页面的滚动距离
业务需求:pageOne页面是一个商品列表页面,在这个页面点击商品,就会跳转到pageTwo商品详细页面.此时再从pageTwo页面返回到pageOne页面时,pageOne页面需要做到:1.记录pa ...
- 深入理解JAVA虚拟机原理之Dalvik虚拟机(三)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 本文是Android虚拟机系列文章的第三篇,专门介绍Andorid系统上曾经使用 ...
- C# WinfForm 控件之dev报表 XtraReport (一) 初了解
这个控件其实用法和fast也差不了太多但如果没接触过 真有种老虎吃天的感觉 1.这里先不说那些高深的先说最基本的 在窗体中显示一个设计好的 模版 1.1一般设计和这个程序是分着的为了方便我就先把他们合 ...
- 推荐20个让你学习并精通CSS的网站
1. A List Apart CSS Topics A List Apart,学习网页设计和最佳实践的首选网站.这个网站从1999年就开始发表关于CSS的文章,其中大部分文章都是面向那些更注重符合标 ...