git 基础
在已存在目录中初始化仓库
在尚未进行版本控制的项目目录下执行 git init
可以通过 git add
命令来指定所需的文件来进行追踪,然后执行 git commit
去提交 :
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
git add
使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。他也可以在文件做出修改时候将文件添加到暂存区。当运行了 *git add
之后又作了修订的文件,需要重新运行 git add
把最新版本重新暂存起来不然提交的将是暂存区中修改前的文件*
检查当前文件状态
可以用 git status
命令查看哪些文件处于什么状态。使用 git status -s
命令将得到一种格式更为紧凑的输出。
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
新添加的未跟踪文件前面有 ??
标记,新添加到暂存区中的文件前面有 A
标记,修改过的文件前面有 M
标记。 输出中有两栏,左栏指明了暂存区的状态,右栏指明了工作区的状态。
忽略文件
可以创建一个名为 .gitignore
的文件,列出要忽略的文件的模式。
查看已暂存和未暂存的修改
查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged
命令
提交更新
git commit
他会唤起文本编辑起来让你输入提交说明,也可以用 git commit -m "....."
来直接添加说明
git commit
加上 -a
可以将全部文件都提交了,包括暂存区和未添加至暂存区的文件
提交时记录的是放在暂存区域的快照。 任何还未暂存文件的仍然保持已修改状态,可以在下次提交时纳入版本管理。 每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。
移除文件
要从 Git 中移除某个文件, 可以用 git rm
命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f
(force)。
如果只是想删除 git 仓库和暂存区的文件而不想删除本地文件(一般是在忘记添加.gitignore1文件时候用)可以用 --cached
选项。
git rm
也支持 glob2模式
移动文件
git mv file_from file_to
查看提交历史
git log
,如果想展示具体修改了啥可以加选项 -p
,还可以加选项 -2
来限制展示的数量为 1:
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
加减是相比于上次,这次有什么更改:加了还是减了
git log --pretty=oneline
可以使得展示更加精简:
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
撤消操作
当上次提交不够完全,可以使用 git commit --amend
来在上次提交的基础上加上此次提交的内容而不会添加新的提交记录。
-
git restore <file>
:将工作区中的文件还原为最近的提交状态,丢弃对文件的修改。 -
git restore --staged <file>
:将暂存区中的文件还原为最近的提交状态,丢弃对文件的修改。
远程仓库
添加远程仓库:git remote add shortname url
,shortname
是简写可以代表 url
,用 git fetch url
来拉去最新的更新,一般 clone
下来的代码会以 origin
简写,即 origin
代表 clone
的 url
**。用**git remote show
来展示远程的信息
远程仓库重命名用 git remote rename old_name new_name
推送到远程仓库
用命令 git push origin master
来将 master
分支推送到 origin
上,注意推送的是整个分支
更新操作
git pull
克隆项目
git clone
默认是克隆 Head
指向的 master
分支,如果是多分支,我们可以单个克隆分支项目。
只克隆单分支(非 master):git clone -b 分支名 https://xxx.git
Git 分支
什么是分支?
**Git 的分支,其实本质上仅仅是指向提交对象的可变指针。**提交对象会指向父提交对象。直到找到根提交对象。
git 仓库会保存三种提交对象:blob 对象(文件快照)、树对象 (记录着目录结构和 blob 对象索引)、提交对象。然后各个提交对象之间组成了树,如下:
,git log --oneline --decorate
可以查看所有分支,当要创建新的分支只要使用 git branch testing
即可,若再在 testing 分支上(需要分支切换3到 testing 上)push 时候就是提交新的提交对象,新的提交对象指向当前分支指针指向的对象然后分支指针指向新提交的对象。也可以用 -b
选项来指定在创建后自动切换到该分支
分支切换
使用 git checkout testing
命令切换,这样就是把 HEAD 指针切换到 testing 分支指针,如下图
切换之后工作目录也会随之改变
分支删除
git branch -d test
如果 git branch
不加任何的参数则会显示所有的分支
分支合并
使用 git merge test
来将 test
分支合并到 master
分支上,如果想要合并的分支 test
所指向的提交是 master
所在的提交的直接后继,则直接将 master
指针后移到 test
位置。如果不是这样则会对比两个分支生成新的提交放在末尾,新提交有两个父提交分别为 mater
与 test
。如果有冲突则会不提交冲突文件等待手动处理完毕自己手动 add commit
远程分支
可以创建一个名为
.gitignore
的文件,列出要忽略的文件的模式。 ↩
glob
模式所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(
*
)匹配零个或多个任意字符;[abc]
匹配任何一个列在方括号中的字符问号(?
)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如[0-9]
表示匹配所有 0 到 9 的数字)。
↩# 忽略所有的 .a 文件 *.a # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件 !lib.a # 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO /TODO # 忽略任何目录下名为 build 的文件夹 build/ # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt doc/*.txt # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件 doc/**/*.pdf
分支切换 ↩
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于