Git命令学习笔记

来源:互联网 发布:苹果笔记本mac系统盘 编辑:程序博客网 时间:2024/04/28 14:47

配置个人的用户名称和电子邮件地址

$ git config --global user.name "John Doe"

$ git config --global user.email johndoe@ example.com


查看配置信息

$ git config —list


在工作目录中初始化新仓库

$ git init


当前目录下有几个文件想要纳入版本控制

$ git add *.c

$ git add README

$ git commit -m 'initial project version’


从现有仓库克隆

$ git clone git://github.com/schacon/grit.git


克隆的时候,自己定义要新建的项目目录名称

$ git clone git://github.com/schacon/grit.git mygrit


检查当前文件状态

$ git status # On branch master nothing to commit (working directory clean)


用 vim 编辑一个新文件 README,保存退出后运行 git status 查看状态

$ vim README

$ git status

# On branch master

# Untracked files:

#   (use "git add

     ..." to include in what will be committed)

#

#   README

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


使用命令 git add 开始跟踪一个新文件

$ git add README


暂存已修改文件

$ git add benchmarks.rb

$ git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD

     ..." to unstage)

#

#   new file:   README

#   modified:   benchmarks.rb


忽略某些文件

$ cat .gitignore *.[oa] *~

文件 .gitignore 的格式规范如下:

● 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。

● 可以使用标准的 glob 模式匹配。 * 匹配模式最后跟反斜杠(/)说明要忽略的是目录。 * 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9] 表示匹配所有 0 到 9 的数字)。

我们再看一个 .gitignore 文件的例子:







# 此为注释 – 将被 Git 忽略

*.a       # 忽略所有 .a 结尾的文件

!lib.a    # 但 lib.a 除外

/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO

build/    # 忽略 build/ 目录下的所有文件

doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt


比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容

$ git diff


提交更新

$ git commit


可以用 -m 参数后跟提交说明的方式,在一行命令中提交更新

$ git commit -m "Story 182: Fix benchmarks for speed”


跳过使用暂存区域

给 git commit 加上-a 选项


可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件

$ rm grit.gemspec

$ git rm grit.gemspec


把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中

$ git rm --cached readme.txt


移动文件

$ git mv file_from file_to


查看提交历史

$ git log

常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新

$ git log -p -2

--stat,仅显示简要的增改行数统计

$ git log —stat

用oneline 将每个提交放在一行显示,这在提交数很大时非常有用。另外还有 short,full 和fuller 可以用,展示的信息或多或少有些不同

$ git log --pretty=oneline

format,可以定制要显示的记录格式

$ git log --pretty=format:"%h - %an, %ar : %s”

常用的格式占位符写法及其代表的意义

选项   说明

%H  提交对象(commit)的完整哈希字串

%h  提交对象的简短哈希字串

%T  树对象(tree)的完整哈希字串

%t  树对象的简短哈希字串

%P  父对象(parent)的完整哈希字串

%p  父对象的简短哈希字串

%an 作者(author)的名字

%ae 作者的电子邮件地址

%ad 作者修订日期(可以用 -date= 选项定制格式)

%ar 作者修订日期,按多久以前的方式显示

%cn 提交者(committer)的名字

%ce 提交者的电子邮件地址

%cd 提交日期

%cr 提交日期,按多久以前的方式显示

%s  提交说明


--graph 选项,可以看到开头多出一些 ASCII 字符串表示的简单图形,形象地展示了每个提交所在的分支及其分化衍合情况

$ git log --pretty=format:"%h %s" --graph

* 2d3acf9 ignore errors from SIGCHLD on trap

*  5e3ee11 Merge branch 'master' of git://github.com/dustin/grit

|\

| * 420eac9 Added a method for getting the current branch.

* | 30e367c timeout code and tests

* | 5a09431 add timeout protection to grit

* | e1193f8 support for heads with slashes in them

|/

* d6016bc require time for xmlschema

*  11d191e Merge branch 'defunkt' into local


git log 命令其他常用的选项及其释义

选项 说明

-p 按补丁格式显示每个更新之间的差异。

--stat 显示每次更新的文件修改统计信息。

--shortstat 只显示 --stat 中最后的行数修改添加移除统计。

--name-only 仅在提交信息后显示已修改的文件清单。

--name-status 显示新增、修改、删除的文件清单。

--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。

--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。

--graph 显示 ASCII 图形表示的分支合并历史。

--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)


git log 还有许多非常实用的限制输出长度的选项,也就是只输出部分提交信息。下面的命令列出所有最近两周内的提交

$ git log --since=2.weeks


修改最后一次提交, 使用 --amend选项重新提交, 刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交

$ git commit -m 'initial commit'

$ git add forgotten_file

$ git commit —amend


取消已经暂存的文件

$ git reset HEAD benchmarks.rb


取消对文件的修改

$ git checkout benchmarks.rb


查看当前的远程库

$ git remote

origin

加上 -v 选项,显示对应的克隆地址

$ git remote -v

origin  git://github.com/schacon/ticgit.git


添加远程仓库

$ git remote

origin

$ git remote add pb git://github.com/paulboone/ticgit.git

$ git remote -v

origin  git://github.com/schacon/ticgit.git

pb  git://github.com/paulboone/ticgit.git


从远程仓库抓取数据

要抓取所有 Paul 有的,但本地仓库没有的信息

$ git fetch pb


推送数据到远程仓库

把本地的 master 分支推送到origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字)

$ git push origin master


查看远程仓库信息

$ git remote show origin


远程仓库的删除和重命名, 把 pb 改成paul

$ git remote rename pb paul

$ git remote

origin

paul


移除对应的远端仓库

$ git remote rmpaul

$ git remote

origin


列显已有的标签, 直接运行 git tag

$ git tag v0.1 v1.3


新建标签, 含附注的标签

$ git tag -a v1.4 -m 'my version 1.4’


命令查看相应标签的版本信息

$ git show v1.4


签署标签 -a 改为 -s (译注: 取 signed 的首字母)

$ git tag -s v1.5 -m 'my signed 1.5 tag'


创建一个新的分支

$ git branch testing


切换到其他分支

$ git checkout testing


新建并切换到该分支

$ git checkout -b iss53


分支的合并(在问题 #53 相关的工作完成之后,可以合并回 master 分支)

$ git checkout master

$ git merge iss53


可视化的合并工具

$ git mergetool


查看当前所有分支

$ git branch

iss53

* master

testing


查看各个分支最后一个提交对象的信息

$ git branch -v

iss53 93b412c fix javascript issue

* master 7a98805 Merge branch 'iss53'

testing 782fd34 add scott to the author list in the readies


从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用 –merge 和 –no-merged 选项

$ git branch --merged

iss53

* master


删除分支

$ git branch -d testing


分支的衍合

$ git checkout experiment

$ git rebase master


0 0
原创粉丝点击