简单清晰的 Git 版本控制(二)------ 基本操作(1)

下面介绍一些 Git 命令中的一些基本操作,也上以后经常用到的一些操作。

取得 Git 仓库

有两种方法获得 Git 仓库,第一种是在现有的目录下创建项目的 Git 仓库

到项目所在的目录运行 git init 命令,然后使用 git add 将想要跟踪的文件纳入版本控制

$ git init
$ git add *.c
$ git add README
$ git commit -m 'initial project version'

第二种是使用 git clone [url] 从远端仓库中将项目克隆到本地仓库,之前讲过 Git 是分布式版本控制系统,Git 克隆的是项目历史的所有数据(每一个文件的每一个版本),服务器上有的数据克隆之后本地也都有了。

$ git clone git://github.com/schacon/grit.git mygrit  # 克隆 Ruby 语言的 Git 代码仓库 Grit

如果指定了文件名,那么克隆出来的项目会存在 mygrit 目录下,否则,项目就会存在 grit 目录下。

对文件的更新操作

Git 文件可以分为两种状态:已跟踪和未跟踪。已跟踪的文件会记录其已修改,已暂存和已提交三种状态。而未跟踪文件就不纳入 Git 管理的范围。初始化仓库时,通过 git add 将工作目录中的文件添加为已跟踪文件,git add 命令后的文件就是已暂存状态。已暂存的文件修改之后之后,这个文件重新变为已修改状态,已修改的文件不在暂存区域,文件处于未暂存状态,通过 git add 可以将之重新变为已暂存。我们逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,文件状态变化周期为

查看文件状态

git status 可以查看文件状态

可以看到 changes not staged for commit 就是已修改未暂存状态,git add 可以将已修改文件加入暂存区域。这里要说明的一点是:git add 是将文件变为已暂存状态,已暂存文件修改后就变为已修改未暂存状态。

忽略某些文件

如果不想跟踪某些文件,可以创建 .gitignore 文件,将想要忽略的文件写入其中。

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

  • 所有空行或者以注释符号  开头的行都会被 Git 忽略。
  • 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
  • 星号(*)匹配零个或多个任意字符。
  • [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
  • 问号(?)只匹配一个任意字符;
  • 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt

windows 中创建 .gitignore 文件的方法:

1. 在项目根目录下面创建 gitignore.txt 文件
2. 把你需要排除的文件名保存到 gitignore.txt 文件
3. 在 cmd 中切换到该文件的目录
4. 执行命令 ren gitignore.txt .gitignore
 

查看已暂存和未暂存的更新

git diff 查看未暂存的更新

git diff --cached/git diff --staged 查看已暂存的更新

具体细节可以查看 https://blog.csdn.net/qq_26826585/article/details/102666398

 提交更新

暂存区域已经准备妥当可以提交了,提交之前注意检查还有什么文件没有 git add 过,否则提交的版本不会记录未暂存文件的修改。因此一般在提交前,使用 git status 查看一下。

git commit  可以提交更新,将会打开默认的编辑工具,在其中写入提交说明

git commit -m "提交说明"   直接提交并写入了提交说明 

git commit -a -m "提交说明"  跳过暂存直接将已跟踪文件暂存后提交

移除文件

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。

git rm 文件名   将文件从暂存区域移除,并连带将工作区域的文件移除

git rm -f 文件名  如果是删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f 

git rm --cached 文件名  将文件从暂存区移除,并保留工作区的文件。

其中文件名可以使用正则表达式匹配

查看提交历史

git log 按时间显示提交的校验码,日期,作者,提交说明等信息。

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

--pretty 选项很有用

--pretty = oneline 只显示提交校验码并在一行显示

--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    提交说明

其中,作者(author)提交者(committer)之间究竟有何差别,其实作者指的是实际作出修改的人,提交者指的是最后将此工作成果提交到仓库的人。

限制输出长度

git log -n  仅显示最近提交的 n 次记录

git --since=2.weeks  显示最近2周内的提交

还可以指定具体的日期 git --since=("2019-10-22")显示10-22之后的提交

此外还有

选项                       说明
-(n)                 仅显示最近的 n 条提交
--since, --after     仅显示指定时间之后的提交。
--until, --before    仅显示指定时间之前的提交。
--author             仅显示指定作者相关的提交。
--committer          仅显示指定提交者相关的提交。

如果要查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试脚本(位于项目的 t/ 目录下的文件)

$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attribute
acd3b9e - Enhance hold_lock_file_for_{update,append}()
f563754 - demonstrate breakage of detached checkout wi
d1a43f2 - reset --hard/read-tree --reset -u: remove un
51a94af - Fix "checkout --track -b newbranch" on detac
b0ad11e - pull: allow "git pull origin $something:$cur

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值