首页 > 代码库 > git基本技巧

git基本技巧

引用:

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  #查看最近提交信息
完整的提交信息
?
1
2
3
4
5
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:

  1. A与B的差别是那些删除的文件。我们可以创建一个补丁代表这些差别,然后吧补丁 打上:

    $ git diff B A | git apply
    
  2. 既然这些文件存在A,我们可以把它们拿出来:

    $ git checkout A foo.c bar.h
    
  3. 我们可以把从A到B的变化视为可撤销的变更:

    $ git revert B