Git读书笔记

第二章 Git基础

2018-12-30  本文已影响4人  行知路

1.1 获取Git仓库

1.1.1 在现有目录初始化仓库

# cd到某已存在的目录,执行此命令,之后会创建一个空的Git仓库,目录下既有的内容不会被自动添加到Git仓库之中
$ git init

1.1.2 克隆远程仓库

# 这里的clone命令确实是把服务器上此仓库的信息给克隆到本地,其中协议https可以是ssh、git等
# 同时把libgit2(远程仓库名)重命名为mylibgit
$ git clone https://github.com/libgit2/libgit2 mylibgit

1.2 记录每次更新到仓库

1.2.1 Git仓库文件状态演变


status-change.png

其中Umodified是指存在于本地仓库。
1.2.2 检查当前文件状态

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    "Git\346\235\203\345\250\201\346\214\207\345\215\227 - \350\222\213\351\221\253.epub"
    "Git\346\235\203\345\250\201\346\214\207\345\215\227(\347\254\254\344\272\214\347\211\210)\350\222\213\351\221\253--\346\225\264\347\220\206\347\233\256\345\275\225\347\211\210.pdf"
    progit_v2.1.16.epub
    progit_v2.1.16.pdf
    progit_v2.1.9-30.pdf

nothing added to commit but untracked files present (use "git add" to track)

以上通过git status命令可以查看当前仓库的状态(正如status单词的意义一样),其中输出的内容根据你仓库的状态会有不同。以上是我当前仓库的状态,可以看到又5各文件处于未追踪状态(乱码是因为文件有中文字符)。同时告知当前处于master分支,如果想要跟踪文件使用git add命令等信息。Git很贴心的一点就是:会根据当前命令的执行结果,告知下一步可以使用什么命令继续。

$ git add progit_v2.1.9-30.pdf  progit_v2.1.16.pdf 
# 把以上文件添加到暂存区
$ vim CONTRIBUTING.md
  $ git status
  On branch master
  Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)
      new file:   README
      modified:   CONTRIBUTING.md
  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:   CONTRIBUTING.md

# 如果文件被修改过且使用git add命令加入暂存区之后,再次对文件进行修改,此时使用git status会看到文件既有处于暂存区的文件也有处于工作区的文件。

1.2.3 状态简览

# 对于熟悉Git的朋友来说,git status命令输出信息过多,可以在git status 后添加-s 或 --short来输出简短版的状态信息
$ git status --short
A  1.txt
AM 2.txt

# 新添加的未跟踪文件前面有 ?? 标记
# 新添加到暂存区中的文件前面有 A 标记
# 修改过的文件前面有 M 标记
# 你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左 边的 M 表示该文件被修改了并放入了暂存区。

1.2.3 忽略文件
在仓库的根目录下有文件(隐藏文件).gitingore,在里面设置的文件会被忽略,请注意在此文件被修改前以加入Git仓库或以备追踪的文件不会受此次文件改变的影响
文件 .gitignore 的格式规范如下:

  # no .a files
  *.a
  # but do track lib.a, even though you're ignoring .a files above
  !lib.a
  # only ignore the TODO file in the current directory, not subdir/TODO
  /TODO
  # ignore all files in the build/ directory
  build/
  # ignore doc/notes.txt, but not doc/server/arch.txt
  doc/*.txt
  # ignore all .pdf files in the doc/ directory
  doc/**/*.pdf

1.2.4 查看已暂存和未暂存的修改

# 查看已暂存文件的修改
$git diff

# 查看已暂存文件的修改
$git diff --cached

1.2.5 提交更新

# 把暂存区的文件添加到本地仓库,执行该命令后会自动让输入提交日志
$git commit

# 使用-m参数可以同时添加提交日志
$git commit -m "添加readme.md"

# 使用-a参数可以可以把已跟踪但为暂存的文件直接提交(跳过git add命令)
$git commit -m -a "添加readme.md"

1.2.6 删除文件

# 删除文件
$git rm m.md

# 把删除文件提交至本地仓库
$git commit -m "删除m.md"

# 如果文件暂存且修改过,通过-f参数删除
$git rm -f m.md

# --cached把删除的文件保留在工作目录
$git rm --cached m.md

1.2.6 移动文件

# git mv README.md(原文件) README(新文件)相当于以下命令
 
  $ mv README.md README
  $ git rm README.md
  $ git add README

1.3 查看提交历史

# git log命令用于查看提交历史,最新的排列在上面
   $ git log
  commit ca82a6dff817ec66f44342007202690a93763949
  Author: Scott Chacon <schacon@gee-mail.com>
  Date:   Mon Mar 17 21:52:11 2008 -0700
      changed the version number
  commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
  Author: Scott Chacon <schacon@gee-mail.com>
  Date:   Sat Mar 15 16:40:33 2008 -0700
      removed unnecessary test
  commit a11bef06a3f659402fe7563abf99ad00de2209e6
  Author: Scott Chacon <schacon@gee-mail.com>
  Date:   Sat Mar 15 10:31:28 2008 -0700
first commit

git log有许多选项

1.4 撤销操作

  # 最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
  $ git commit -m 'initial commit'
  $ git add forgotten_file
  $ git commit --amend
# 撤销未暂存的文件
$ git checkout -- <file>...
# 撤销暂存的文件
$git reset HEAD <file>...

1.5 远程仓库

# 列出远程仓库
$ git remote
  origin

# 会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。
   $ git remote -v
  origin  https://github.com/schacon/ticgit (fetch)
  origin  https://github.com/schacon/ticgit (push)

# git remote add <shortname> <url> 添加远程仓库
$ git remote add pb https://github.com/paulboone/ticgit

# git fetch 从远程仓库抓取(拉取远程仓库的信息,但不会对你的工作造成任何影响)
$ git fetch [remote-name]

# git pull 从远程仓库拉取(与fetch相比,会合并仓库)
$ git pull [remote-name]

# git push [remote-name] [branch- name] 把本地修改推送到远程分支
# 如果有人在你推送之前先推送,那么本次推送就会被拒绝;需要先进行git pull,可能会有冲突,需要先解决冲突
$ git push origin master

# git remote show [remote-name] 显示远程仓库的信息

# 重命名远程仓库名
$ git remote rename pb paul
$ git remote
  origin
  paul

# 移出远程仓库
  $ git remote rm paul
  $ git remote
  origin

1.6 打标签

# 查看当前标签
$ git tag

# 打轻量标签
$ git tag V1.0.0

# 打附注标签
$ git tag -a V1.0.0 -m "附注标签"

# 查看标签
$ git show v1.4

# 基于某commitid打标签
$ git tag -a v1.2 9fceb02

# git push时并不会会把标签信息发送到远端,需要使用git push origin [tagname]命令
$ git push origin v1.5

# 会把标签
$ git push origin --tags


# 在 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。 
# 如果你想要工作目录与仓库中特定 的标签版本完全一样,可以使用git checkout -b [branchname] [tagname]

1.7 Git别名

# 命令的简写
  $ git config --global alias.co checkout
  $ git config --global alias.br branch
  $ git config --global alias.ci commit
  $ git config --global alias.st status
上一篇下一篇

猜你喜欢

热点阅读