codecamp

9. Git 更改而非文件

Git 聚焦于文件的更改而非文件本身。当你说 Git 添加文件时, 你并非在告诉 Git 要添加文件到仓库。而是说 Git 应当对文件 的当前状态做记录以便稍后提交。

我们将尝试在本次实验中探索其中的差异。

初次更改:允许默认名称

如果命令行参数未提供,更改“Hello, World”程序来接受一个 默认值。

name = ARGV.first || "World"

puts "Hello, #{name}!"

添加更改

现在添加此次更改到 Git 的暂存区。

$ git add hello.rb

二次更改:添加注释

现在给“Hello, World”程序添加一行注释。

# Default is "World"
name = ARGV.first || "World"

puts "Hello, #{name}!"

检查当前状态

$ git status

你应该看到:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   hello.rb
#
# 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:   hello.rb
#

注意 hello.rb 在状态中被列了两次。第一次更改已被暂存,且 准备提交。第二次更改还未暂存。如果你现在提交,那么注释不 会保存到仓库中。

让我们试试看。

提交

提交暂存的更改,然后重新检查状态。

$ git commit -m "Added a default value"
$ git status

你应该看到:

$ git commit -m "Added a default value"
[master 582495a] Added a default value
 1 files changed, 3 insertions(+), 1 deletions(-)
$ git status
# On branch master
# 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:   hello.rb
#
no changes added to commit (use "git add" and/or "git commit -a")

status 命令将告诉你 hello.rb 还有未记录的更改,且不在暂存 区。

添加第二次更改

现在添加第二次更改到暂存区,然后执行 git status

$ git add .
$ git status

注意:我们使用当前目录(.)作为要添加的文件。这是一种 添加当前目录及其子目录下所有更改文件的习惯简写方式。 但因为它添加所有东东,所以在做 add . 前检查状态是一 个好主意,只是为了确定你没有添加不想要的文件。

我想你已经明白了 add . 这个技巧,但为了安全在余下的 教程中我们将继续直接添加文件。

你应该看到:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   hello.rb
#

现在第二次已经暂存,且准备提交。

提交第二次更改

$ git commit -m "Added a comment"
8. Git 提交更改
10. Git 项目历史
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }