Git 入门 ---- Git 常用命令

来源:互联网 发布:知乎那些曾经轰动一时 编辑:程序博客网 时间:2024/06/06 00:13

本文作为  Git 入门 ---- Git 与 SVN 区别 的续篇,继续介绍 Git 的入门知识


四. Git 安装
OS X 版本: Mac 一般自带不需要安装

Windos 版本: https://git-for-windows.github.io/

Linux 版本: Linux 一般也是自带无需安装


五. 创建新仓库
创建新文件夹,cd 到文件夹,执行命令: git init  用来创建新 git 仓库


六. 提交文件进仓库
在新建好 git 仓库的文件夹里加入 readme.txt 文件
1. 使用 git add readme.txt 把文件添加到仓库,执行后没有任何提示,说明添加成功

2. 使用 git commit -m "提交内容的注释" 将文件真正提交到仓库

为什么提交分为 add 和 commit 呢?
那是 git 架构所决定的,你的本地仓库由 git 维护的三棵“树”组成。第一个是你的 工作目录,它持有实际文件;第二个是 暂存区(Index 又称 Stage),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。所以 add 是提交到 Index 的暂存区, commit 是提交到 Head,但是还没到远端仓库



七. 检出仓库
克隆本地仓库:
git clone /wenniuwuren/repository

克隆远端服务器上的仓库
git clone username@host:/wenniuwuren/repository


八. 查看本地与仓库的异同
修改 readme.txt 文件,然后执行 git status 查看本地和仓库的异同状态
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")

上述命令行提示信息意思是:本地已经修改,但还未 commit

执行 git diff 来查看本地与仓库详细的异同信息:
D:\gitTest>git diffdiff --git a/readme.txt b/readme.txtindex a888d81..77c430a 100644--- a/readme.txt+++ b/readme.txt@@ -1 +1 @@-你的本地仓库由 git 维护的三棵“树”组成。第一个是你的 工作目录,它持有实际文件;第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动;最后是 HEAD,它指向你最后一次提交的结果。\ No newline at end of file+update\ No newline at end of file


九. 版本回退
1. git log 查看提交历史记录
D:\gitTest>git log
commit b5683e767328b904694b247214d6ccf6e467a4a0
Author: unknown <hzzhuyibin@hz.ntes.domain>
Date:   Sat Jul 16 14:12:32 2016 +0800

    update

commit 155899056f19a6d5f97aa4fc2f3550adcfe37b57
Author: unknown <hzzhuyibin@hz.ntes.domain>
Date:   Sat Jul 16 11:23:29 2016 +0800

    add readme file

需要友情提示:你看到的一大串类似的b5683e767328b904694b247214d6ccf6e467a4a0 是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,想象一下多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

2. 基础概念
  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

3. 修改后相关撤销操作
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交 b5683e767328b904694b247214d6ccf6e467a4a0,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。(PS:Windows 下用 HEAD^ 可能有点问题,会提示你 More? 本来输入 HEAD^ 就能回退到上一个版本,但是需要再输入一个 ^ 才能正确执行,Windows 下建议直接用 HEAD~1 回到上一个版本)
回退到上一个版本,就可以使用命令:
git reset --hard HEAD~1

上述的 hard 参数什么意思呢?
根据 soft、 mixed、 hard,会对 working tree 和 index 和 HEAD 进行重置:
    git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
    git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
    git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容

执行上述命令后,用 git log 就看不到执行记录了,只能用 git reflog 来查看所有的命令历史,这样就能根据提交的 id 来决定回到哪个版本,比如命令为:
D:\gitTest>git reset --hard b5683e7
HEAD is now at b5683e7 update

从上述命令可以看到,不需要输入全部提交的唯一标识 id,只要前几位 id 内容 git 就能区别是哪一个版本,执行完后,就回到了 b5683e7... 版本。


  •   修改后 未add(添加到暂存区) 需要撤销修改时:
git checkout -- myfile.txt 或 手动删除工作区修改 工作区 : clean 暂存区: clean
  •   修改后 add了(未commit) 再次修改文件 要撤销第二次修改时:git checkout -- myfile.txt(将暂存区恢复到工作区) 暂存区有第一次的修改需要commit
  •   修改后 add了(未commit),需要撤销修改时:git reset HEAD myfile.txt(将暂存区修改删除) 此时工作区的修改还未撤销git checkout -- myfile.txt(撤销工作区修改)
  •   修改后 add并commit了,需要撤销修改时:git reset --hard HEAD^(版本回退)**


十. 删除文件
git rm fileName.extension

然后 git commit  fileName.extension,就可以把暂存库上内容删除


参考资料:
                  https://zh.wikipedia.org/zh-cn/Git
                  http://rogerdudler.github.io/git-guide/index.zh.html                                                         http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374027586935cf69c53637d8458c9aec27dd546a6cd6000

2 0
原创粉丝点击