zoukankan      html  css  js  c++  java
  • [git] git 的基础功能

    有两种方法获得一个 git 仓库:自行初始化,克隆别人已有的仓库

    自行初始化

    git init

    克隆别人已有的库

    git clone git@github.com:garrisonz/gitStudy.git

    和其他版本管理系统不同, Git 的命令是 clone, 而不是 checkout。Git clone 除了拷贝最新版本的文件,还会拷贝服务器上存储的变更历史记录。

    在仓库中记录变更历史

    工作目录下的文件,可以分为两类:已被跟踪的 (tracked) 、尚未被跟踪的 (untracked)。

    已被跟踪的文件又可以分三种状态: Unmodified, Modified, Staged。Unmodified 其实也就是 commited。

    检查项目的状况使用下面的命令。这是一个很有用的命令,在不同状态下提示不同的信息,指引你如何做下一步。

    git status

    使用 add 命令可以把文件从未被跟踪,改为已被跟踪状态。

    $ echo 'tony' > 1.txt
    $ git add 1.txt

    add 是一个多功能命令,有下面几种

    • 开始追踪文件
    • 把文件放到 stage area
    • 把合并冲突的文件标识为已解决状态

    可以把 add 理解为 "把这些内容加入到下一次 commit "。把一个修改过的文件放到 tage area 后,再做一次修改,这时该文件会有两个版本:modified 和 staged。如果此时做 commit ,只会提交 staged 版本的文件。

    忽略文件

    .gitignore 用于配置需要忽略的文件。配置规则如下

    • 忽略空行或者 # 开头的行
    • 接收标准 glob 模式匹配
    • 前斜杠 / 开始,避免全部目录遍历
    • 前斜杠 / 结尾,表明是一个目录
    • 感叹号 ! 开始,表示取反

    介绍下 glob 模式匹配。这像是一个简化的正则匹配。

    • * 匹配零个或多个字符
    • ? 匹配一个字符
    • [abc] 匹配中括号中的任何一个字符(此处为 a 或 b 或 c )
    • [0-9] 匹配范围内的值(此处为 0 至 9 任何一个字符)

    差异

    git diff 显示已被修改但没放到 stage area 的变动,git diff --staged 显示已放到 staged area 但没有 commit 的变动。强调一下, git diff 并不显示所有没有被 commit 的变动,而是只显示还没有被放到 stage area 的变动。

    $ git diff
    $ git diff --staged

    提交变动到库

    把 stage area 里面的变更提交库中,使用下面命令

    $ git commit -m 'fix iss54'

    下面命令跳过 stage area (git add) 步骤,直接把所有已追踪的文件的全部变更提交到仓库中。

    $ git commit -m 'fix iss54' .
    
    $ git commit -a -m 'fix iss54' 

    删除文件,并从 staging ara 中删除历史记录和追踪,使用下面命令:

    $ git rm <fileName>

    希望 git 不用再追踪该文件,但在目录中保留该文件,则使用下面的命令

    $ git rm --cached <fileName>

    查看历史记录

    git log 用于查看历史记录,选项 -[n] 表示查看最近的前 n 条记录。--stat 会显示历史声明,显示具体修改了的文件名。推荐使用 Eclipse 上的 egit 插件查看历史记录。

    $ git log -3 --stat

    撤销操作

    在不同状态需要撤销不同的操作时,可以参考 git status 的提示来进行。例如,需要撤销 modified 的文件或者 staged 的文件,根据 git status 的提示进行即可。撤销操作有危险,撤销的变更无法再复现,谨慎使用。

    远程库

    git remote 会显示远程服务器名,-v 选项显示远程服务器名和 URL 的读、写匹配。

    $ git remote
    $ git remote -v

    添加一个远程服务器的命令

    $ git remote add myfork git@github.com:garrisonz/bootstrap.git

    获取远程服务器的数据的命令。fetch 命令只会从远程服务器中下载数据,但是不会把变更合并到当前的工作目录,需要手动进行合并 (merge)。 pull 命令相当于 fetch + merge。当项目有多个分支时,推荐自行 fetch 然后 merge.

    $ git fetch myfork

    推送代码到远程服务器

    git push [remote-server] [remote-branch]

    删除远程服务。例如在 git 仓库中删除一个名为 myfork 的远程服务器

    git remote rm myfork

    打标签 (Tag)

    git 和大多数版本管理系统一样,可以给指定的历史顺序打上标签。一般给发布的版本打上标签,如 v1.0。打标签有两种类类型: 轻量型和声明型。

    轻量型标签,是一个指向特定的 commit 记录的指针。

    $ git tag v0.5

    声明性标签,除了有指向特定的 commit 记录指针外,还会存储更多额外信息。推荐使用。

    $ git tag -a v1.0 -m 'the stable v1.0 version'

    需要签出指定的标签版本

    $ git checkout -b version1 v1.0

    命令别名

    定义别名是为了减少敲打键盘的动作,为了方便记忆,保持打字节奏,我把别名都设置为三个字符。

    $ git config --global alias.cot checkout
    $ git config --global alias.brh branch
    $ git config --global alias.cmt commit
    $ git config --global alias.sts status

    参考资料

    Chapter 2, Git Basics, git-scm

  • 相关阅读:
    如何在Unity中播放影片
    C# typeof()实例详解
    unity3d用鼠标拖动物体的一段代码
    unity3d中Find的用法
    geometry_msgs/PoseStamped 类型的变量的构造
    c++ ros 计算两点距离
    C++ 利用指针和数组以及指针和结构体实现一个函数返回多个值
    C++ 结构体指针的定义
    Cannot initialize a variable of type 'Stu *' with an rvalue of type 'void *'
    C++中的平方、开方、绝对值怎么计算
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/6217121.html
Copyright © 2011-2022 走看看