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

  • 相关阅读:
    VS2010 自动跳过代码现象
    Reverse Linked List II 【纠结逆序!!!】
    Intersection of Two Linked Lists
    Linked List Cycle II
    Remove Nth Node From End of List 【另一个技巧,指针的指针】
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Remove Duplicates from Sorted List
    Linked List Cycle
    Dungeon Game
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/6217121.html
Copyright © 2011-2022 走看看