查看已暂存和未暂存更新

如果要看尚未暂存的文件更新了哪些部分,可以使用不加参数的 diff 命令:

1
git diff

若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用下面命令:

1
2
git diff --cached
git diff --staged (Git 1.6.1 及更高版本)

跳过使用暂存区域

Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

1
git commit -a -m 'added new benchmarks'

移除文件

要从 Git 中移除某个文件,就必须要从暂存区域移除,然后提交。

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

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在“Changed buft not updated” 部分(也就是未暂存清单)看到:

1
2
3
4
5
6
7
8
9
$ rm grit.gemspec
$ git status
# On branch master
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
#
# deleted: grit.gemspec
#

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f (即 force)才能删除文件。

我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但文件保留。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 .a 编译文件,不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 –cached 选项即可:

1
$ git rm --cached readme.txt

移动文件

在 Git 中对文件改名可以使用如下:

1
git mv file file1

如果查看状态信息,也会看到是重命名操作:

1
2
3
4
5
6
7
8
9
10
$ git mv README.txt README
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: README.txt -> README
#

其实,运行 git mv 就相当于运行了下面三条命令:

1
2
3
$ mv README.txt README
$ git rm README.txt
$ git add README

撤销操作

有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 –amend 选项重新提交:

1
$ git commit --amend

如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,而所提交的文件快照和之前的一样。

如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 –amend 提交:

1
2
3
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

上面的三条命令最终得到一个提交,第二个提交命令修正了第一个的提交内容。

取消暂存文件

可以使用 git reset HEAD … 的方式取消暂存

1
2
$ git add a
$ git reset HEAD a

取消对文件的修改

如果对文件进行修改后,并且查看了 git status 后会显示如下:

1
2
3
4
5
6
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: benchmarks.rb
#

所以取消对文件的修改,可以使用:

1
git checkout -- <file>...

查看当前的远程库

使用 git remote 命令,会列出每个远程库的简短名字。当克隆某个项目完成后,至少会看到一个名称为 origin 的远程库,Git 默认使用这个名字来表示你所克隆的原始仓库。

1
2
$ git remote
origin

也可以加上 -v 选项,来显示对应克隆地址:

1
2
$ git remote -v
origin git://github.com/schacon/ticgit.git

添加远程仓库

要添加远程仓库,可以指定一个简单的名字,如下:

1
2
3
4
5
6
$ 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

现在可以用字串 pb 指代对应的仓库地址了。比如说,要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行 git fetch pb:

1
$ git fetch pb

推送数据到远程仓库

实现这个任务的命令很简单: git push [remote-name] [branch-name]。如果要把本地的 master 分支推送到 origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字),可以运行下面的命令:

1
$ git push origin master

查看远程仓库信息

我们可以通过命令 git remote show [remote-name] 查看某个远程仓库的详细信息,比如要看所克隆的 origin 仓库,可以运行:

1
2
3
4
5
6
7
8
$ git remote show origin
* remote origin
URL: git://github.com/schacon/ticgit.git
Remote branch merged with 'git pull' while on branch master
master
Tracked remote branches
master
ticgit

远程仓库的删除和重命名

对远程仓库的重命名可以使用如下方式:

1
2
3
4
$ git remote rename pb paul
$ git remote
origin
paul

对远程仓库的重命名,也会使对应的分支名称发生变化,原来的 pb/master 分支现在成了 paul/master。

对远程仓库的删除可以使用如下方式:

1
2
3
$ git remote rm paul
$ git remote
origin

—EOF—