• Git 与 SVN 不同,是分布式的版本控制系统,不需要主服务器即可工作,实际中为了方便各个工作者间同步工作,通常还是会设置主服务器。
  • Git的设置及初始化:
    • 设置全局用户信息:

luojiahu@ubuntu:~/learning/learngit$ git config --global user.name "luojiahu"

luojiahu@ubuntu:~/learning/learngit$ git config --global user.email "luojiahu@yeah.net"

    • 初始化目录为Repository:

luojiahu@ubuntu:~/learning/learngit$ git init

Initialized empty Git repository in /home/luojiahu/learning/learngit/.git/

  • 文件的提交:

luojiahu@ubuntu:~/learning/learngit$ git add ReadMe.txt

luojiahu@ubuntu:~/learning/learngit$ git commit -m "add a readme file."

[master (root-commit) 849bbd2] add a readme file.
  1 file changed, 0 insertions(+), 0 deletions(-)
  create mode 100644 ReadMe.txt

  • 查看当前Repository的状态信息

luojiahu@ubuntu:~/learning/learngit$ git status

On branch master

Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)

modified:   ReadMe.txt

no changes added to commit (use "git add" and/or "git commit -a")

  • 查看详细的文件变化内容

luojiahu@ubuntu:~/learning/learngit$ git diff ReadMe.txt

diff --git a/ReadMe.txt b/ReadMe.txt

index e69de29..38b41f6 100644

--- a/ReadMe.txt

+++ b/ReadMe.txt

@@ -0,0 +1 @@

+add some content.

  • 查看提交日志,可以通过—pretty=oneline 限制为显示单行

luojiahu@ubuntu:~/learning/learngit$ git log

commit f2adaa19be7976661aa65228ca20ca02a83c1999

Author: luojiahu <luojiahu@yeah.net>

Date:   Tue Aug 28 08:09:00 2018 -0700

add GPL

commit 356f51ac350dca07602a5b7f4d0b6fbf7d8eb27f

Author: luojiahu <luojiahu@yeah.net>

Date:   Tue Aug 28 08:07:16 2018 -0700

add some content.

commit 849bbd2050a94e8cec1403ebdac5f1d56ad914b8

Author: luojiahu <luojiahu@yeah.net>

Date:   Tue Aug 28 07:45:18 2018 -0700

add a readme file.

luojiahu@ubuntu:~/learning/learngit$ git log --pretty=oneline

f2adaa19be7976661aa65228ca20ca02a83c1999 add GPL

356f51ac350dca07602a5b7f4d0b6fbf7d8eb27f add some content.

849bbd2050a94e8cec1403ebdac5f1d56ad914b8 add a readme file.

  • Git版本的回退:

在Git中,用HEAD表示当前版本,上一各版本是HEAD^,上上个为HEAD^^,以此类推… 版本号太大是可以用类似HEAD100~表示。

可以通过git reset命令实现版本的回退,不添加—hard 参数仅仅回退当前工作版本,添加—hard 修改实际文件内容。

luojiahu@ubuntu:~/learning/learngit$ git reset HEAD^

Unstaged changes after reset:

M    ReadMe.txt

luojiahu@ubuntu:~/learning/learngit$ git log

commit 356f51ac350dca07602a5b7f4d0b6fbf7d8eb27f

Author: luojiahu <luojiahu@yeah.net>

Date:   Tue Aug 28 08:07:16 2018 -0700

add some content.

commit 849bbd2050a94e8cec1403ebdac5f1d56ad914b8

Author: luojiahu <luojiahu@yeah.net>

Date:   Tue Aug 28 07:45:18 2018 -0700

add a readme file.

回退后又后悔了怎么办?可以通过 git reflog 查看每一步的操作命令

luojiahu@ubuntu:~/learning/learngit$ git reflog

849bbd2 HEAD@{0}: reset: moving to HEAD^

356f51a HEAD@{1}: reset: moving to HEAD^

f2adaa1 HEAD@{2}: commit: add GPL

356f51a HEAD@{3}: commit: add some content.

849bbd2 HEAD@{4}: commit (initial): add a readme file.

然后,通过git reset –hard commit_id 恢复至对应的版本,commit_id不必写全

luojiahu@ubuntu:~/learning/learngit$ git reset –hard f2adaa1
HEAD is now at f2adaa1 add GPL

  • 工作区与版本库:

Git 中当前的工作路径即为工作区(Working Directory),在Working Directory 下的 .git目录即为版本库(Repository)。其中版本库又分为暂存区(Stage),Master分支,及HEAD指针等。git add 命令将修改的文件提交到Stage区,而git commit命令将暂存区的内容提交到当前的分支。

  • Git 管理 “修改” 而不是 “文件”

git commit 只会将上次 git add 命令提交到 Stage 区的修改提交到当前分支,在最近一次 gti add 命令之后对文件做的修改将不会被提交。

  • 撤销修改
  1. 当对工作区的修改,未添加到暂存区时,可以通过:git chechout – filename 命令恢复修改
  2. 当对工作区的修改已经添加到暂存区,可以通过:git reset HEAD ReadMe.txt 命令恢复暂存区,然后按照1中的步骤恢复工作区。

luojiahu@ubuntu:~/learning/learngit$ git status
On branch master
Changes to be committed:
   (use "git reset HEAD <file>..." to unstage)

modified:   ReadMe.txt

luojiahu@ubuntu:~/learning/learngit$ git reset HEAD ReadMe.txt
Unstaged changes after reset:
M    ReadMe.txt
luojiahu@ubuntu:~/learning/learngit$ git status
On branch master
Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)

modified:   ReadMe.txt

no changes added to commit (use "git add" and/or "git commit -a"

luojiahu@ubuntu:~/learning/learngit$ git checkout -- ReadMe.txt
luojiahu@ubuntu:~/learning/learngit$ git status
On branch master
nothing to commit, working directory clean

删除文件

Git认为文件的删除也是一种修改操作,可以通过git rm命令实现文件的删除。如果发生误删,可以通过git reset HEAD filename + git checkout – filename 恢复文件。

luojiahu@ubuntu:~/learning/learngit$ git rm ReadMe.txt

rm 'ReadMe.txt'

luojiahu@ubuntu:~/learning/learngit$ git status

On branch master

Changes to be committed:
   (use "git reset HEAD <file>..." to unstage)

deleted:    ReadMe.txt

luojiahu@ubuntu:~/learning/learngit$ git checkout -- ReadMe.txt

error: pathspec 'ReadMe.txt' did not match any file(s) known to git.

luojiahu@ubuntu:~/learning/learngit$ git status

On branch master

Changes to be committed:
   (use "git reset HEAD <file>..." to unstage)

deleted:    ReadMe.txt

luojiahu@ubuntu:~/learning/learngit$ git reset HEAD ReadMe.txt

Unstaged changes after reset:

D    ReadMe.txt

luojiahu@ubuntu:~/learning/learngit$ git status

On branch master

Changes not staged for commit:
   (use "git add/rm <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)

deleted:    ReadMe.txt

no changes added to commit (use "git add" and/or "git commit -a")

luojiahu@ubuntu:~/learning/learngit$ git checkout -- ReadMe.txt

luojiahu@ubuntu:~/learning/learngit$ ll

total 16

drwxrwxr-x 3 luojiahu luojiahu 4096 Sep  1 18:58 ./

drwxrwxr-x 3 luojiahu luojiahu 4096 Aug 28 07:42 ../

drwxrwxr-x 8 luojiahu luojiahu 4096 Sep  1 18:58 .git/

-rw-rw-r-- 1 luojiahu luojiahu   28 Sep  1 18:58 ReadMe.txt

Git 学习笔记–基本操作的更多相关文章

  1. Git学习笔记---协作的一般流程

    一般的操作流程 1.pull 王小坤与另一个同事张大炮一起开发一个项目,张大炮昨天修改了数据库读写的api,优化了执行速度,并把read()函数改名成了Read(),下午下班之前把这些代码push到服 ...

  2. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  3. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  4. Git学习笔记(四)

    一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...

  5. git 学习笔记6--remote & log

    git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...

  6. 【转帖】Git学习笔记 记录一下

    本文内容参考了廖雪峰老师的博文,并做了适当整理,方便大家查阅. 原帖地址 https://wangfanggang.com/Git/git/ 常用命令 仓库初始化 - git init 1 git i ...

  7. [转]Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  8. GIT学习笔记(1):创建版本库

    GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...

  9. GIT学习笔记(5):变基

    GIT学习笔记(5):变基rebase 变基 引入变基 在Git中整合来自不同分支的修改主要有两种方法:merge以及rebase. 整合分支最容易的方法是merge,他会把两个分支的最新快照以及两者 ...

随机推荐

  1. qt 拷贝文件设置进度条

    /** * @brief FuncModuleWin::copyFile * @param fromFIleName 优盘里面的文件 * @param toFileName 拷贝到/bin里面的启动文 ...

  2. PHP开发必用的mysql那么你知道Mysql中MyISAM和InnoDB的区别吗?

    构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型. .frm文件存储表定义. 数据文件的扩展名为.MYD (MYData). 索引文件的扩展名 ...

  3. 对连接到 Azure 中 Linux VM 时出现的问题进行详细的 SSH 故障排除的步骤

    有许多可能的原因会导致 SSH 客户端无法访问 VM 上的 SSH 服务. 如果已经执行了较常规的 SSH 故障排除步骤,则需要进一步排查连接问题. 本文指导用户完成详细的故障排除步骤,以确定 SSH ...

  4. 【Leetcode】【Medium】Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  5. 重新认识KCP

    什么是KCP KCP是一种网络传输协议(ARQ,自动重传请求),可以视它为TCP的代替品,但是它运行于用户空间,它不管底层的发送与接收,只是个纯算法实现可靠传输,它的特点是牺牲带宽来降低延迟.因为TC ...

  6. web服务器、app(应用)服务器、DB后端性能瓶颈和分析

    性能测试day07_性能瓶颈和分析 https://www.cnblogs.com/leixiaobai/p/9463748.html 其实如果之前都做的很到位的话,那么再加上APM工具(dynaTr ...

  7. Django objects.values

    values(*fields) 返回一个ValuesQuerySet —— QuerySet 的一个子类,迭代时返回字典而不是模型实例对象. 每个字典表示一个对象,键对应于模型对象的属性名称. 下面的 ...

  8. JS常用方法封装

    迭代添加各种常用方法:项目中一定会有很多常用的方法,包括:取值,校验,等...... 获取 url 后的参数 function getQueryString(name) { var reg = new ...

  9. Linux学习总结(六)-su命令 sudo 命令 限制root远程登录

    root 用户拥有至高无上的权利,那么我们运维人员是不是直接在root用户下处理所有问题呢? 答案是否定的,权力越大,责任越大,人是会犯错的,因此我们要在不影响我们的工作情况下,尽量限制我们的权力,以 ...

  10. Python re模块正则表达式