引用:
http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/index.html
保存状态
$ git init #初始化git,在git命令行下通过ls -a可以看到.git文件 $ git add . #把所有的文件添加到git暂存区里
$ git reset --hard #恢复之前的版本
添加、删除、重命名
$git add readme.txt #添加
$git rm file #删除文件
$git mv file1 file2 #移动文件
撤销/重做
$git log -n #查看最近提交信息
完整的提交信息
commit 766f9881690d240ba334153047649b8b8f11c664 Author: Bob <bob@example.com> Date: Tue Mar 14 01:59:26 2000 -0800 Replace printf() with write().
$ git reset --hard 766f #来恢复到一个指定的提交状态,其中766f....是hash值,不用全输入。
$git checkout 82f5 #跳转到一个指定的状态
$ git checkout master #回到主分支
git reset --hard
: 加载一个旧记录并删除所有比之新的记录。git checkout
: 加载一个旧记录,但如果你在这个记录上玩,游戏状态将偏离第 一轮的较新状态。你现在打的所有游戏记录会在你刚进入的、代表另一个真实的分支里。
$ git checkout master~5 #回到倒数第五个保存状态
这些操作都不会提交新的记录,通过git log是无法查看到的。
撤销
$ git revert 1b6d #讲撤销给定哈希值的提交。本撤销被记录为一个新的提交,你可以通过运行 git log 来确认这一点。
下载文件
$ git clone git://server/path/to/files
到最新
$ git pull
我们已经做了什么?
找出自从上次提交之后你已经做了什么改变:
$ git diff
或者自昨天的改变:
$ git diff "@{yesterday}"
或者一个特定版本与倒数第二个变更之间:
$ git diff 1b6d "master~2"
输出结果都是补丁格式,可以用 git apply 来把补丁打上。也可以试一下:
$ git whatchanged --since="2 weeks ago"
练习
比方A,B,C,D是四个连续的提交,其中B与A一样,除了一些文件删除了。我们想把这 些删除的文件加回D。我们如何做到这个呢?
至少有三个解决方案。假设我们在D:
-
A与B的差别是那些删除的文件。我们可以创建一个补丁代表这些差别,然后吧补丁 打上:
$ git diff B A | git apply
-
既然这些文件存在A,我们可以把它们拿出来:
$ git checkout A foo.c bar.h
-
我们可以把从A到B的变化视为可撤销的变更:
$ git revert B