代码改变世界

Git笔记

2014-08-03 16:59  Loull  阅读(233)  评论(0)    收藏  举报

零、安装,设置参数

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

Git初次使用前需要一些简单配置,让系统记录一些类似用户名、邮箱之类信息,在提交代码时用于标识用户。Git的配置有3个不同的作用域,分别是system、global和repository。system域的配置影响整个机器上的全部用户,global域的配置影响一个用户的全部仓库,repository域的配置只影响当前仓库。较小作用域中的配置可以覆盖较大作用域中的同名配置,其效果参考C语言不同作用域的变量覆盖。

配置global域的用户名和邮箱:

git config --global user.name "Your Name Here"
git config --global user.email "your_email@example.com"

配置repository域的用户名和邮箱:

git config user.name "Your Name Here"
git config user.email "your_email@example.com"

一个经验是,将最常用的配置设置在global域中,将偶尔使用的配置设置在repository中。

 

一、初始化一个Git仓库,添加文件

使用git init命令。

添加文件到Git仓库,分两步:

  • 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件;

  • 第二步,使用命令git commit,完成。

$ git add readme.txt
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

 

 二、修改文件

继续修改readme.txt文件

$ 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:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

$ git diff readme.txt 

$ git add readme.txt
$ git commit -m "add distributed"

 

三、历史记录和回退

查看历史记录

$ git log
$ git log --pretty=oneline

回退

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交“ 3628164...882e1e0”(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

$ git reset --hard HEAD^

Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog

 

$ git reset --hard 3628164

 

 四、版本库

版本库(Repository):工作区有一个隐藏目录“.git”,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

 

五、删除文件

$ rm test.txt

Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且commit:

$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

现在,文件就从版本库中被删除了。

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- test.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,就是让这个文件回到最近一次git commit或git add时的状态。

git checkout -- file命令中的“--”很重要,没有“--”,就变成了“创建一个新分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

 

六、从远程库克隆

假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

首先,登陆GitHub,创建一个新的仓库,名字叫gitskills:

我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件:

现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md

 

注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了。

只要本地作了提交,就可以通过命令:

$ git push origin master

 

小结

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

 

七、总结

本地分支为master

远程分支为origin

添加文件:

  1、在工作区(本地目录下)添加文件。

  2、git add file到暂存库。

  3、git commit -m "..."到本地master。

  4、git push origin master推送master本地最近更新到github上的origin。

删除文件:

  1、工作区删除文件。

  2、从版本库中删除git rm file。

  3、git commit -m "..."。

  4、git push origin master。

 

参考:

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

版本回退

撤销修改

删除文件

添加远程库