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