Pro Git

img

简介

  • 状态:已读
  • 作者:Scott Chacon
  • 链接:http://git-scm.com/book

安装配置

mac下安装很方便,使用brew直接安装

brew install git

安装完成以后记得配置一下,最好不要乱变。我之前交到github上的代码各种名字都有,非常混乱...

git config --global user.name "SuYan"
git config --global user.email suyan0830@gmail.com

配置修改的文件其实是~/.gitconfig里的参数,也可以直接拿vim打开变更

Git基础

初始化项目

创建一个新项目

git init
git add README
git commit -m "initial project version"

如果不是从本地初始化项目,那么可以从远程克隆一个项目过来,例如从github上

git clone git://github.com/schacon/grit.git
git clone git://github.com/schacon/grit.git mygrit

文件更改、提交和回退

git的3种状态

untracked状态

untracked状态即未由git管理

mkdir test && cd test && git init && touch README && git status

将untracked转为tracked状态

git add README && git status

从tracked状态转成untracked

git rm README --cached

unmodified状态和modified状态

unmodified状态是一个文件已经成为git管理的对象,而且已经提交过

git commit -m "add README file" && git status

之后就是unmodified状态了,这个时候可以进行文件修改和删除功能。删除一个文件可以:

git rm -f README
rm README

移动文件

git mv file_from file_to

修改文件直接显示成为modified状态

echo "sss" > README

查看修改

git diff

从modified状态回到unmodified状态

git checkout -- README

staged状态

staged状态指提交到版本控制库里

git commit -m "add README file" && git status

直接从modified状态进入staged状态

git commit -a -m "add README file" && git status

查看最新一次提交的修改

git diff -cached

查看最近两次更改/更新

git log -p -2
git log -2

提交完成后,文件进入staged暂存区,同时进入unmodified状态。如果想将REAMDE文件从staged状态回到提交前的modified状态

git reset HEAD README

再次修改如果不想重新生成commit,可以利用

git commit --amend

使用下面命令可以查看文件提交历史纪录

git log

回退到某次commit状态

git reset --hard HEAD^^
git reset --hard HEAD~2
git reset --hard as123s

忽略文件

在每个git控制的库中,都可以增加一个.gitignore文件来控制例外的文件,即不想被git控制的一些临时文件或私有文件。它的文件格式如下:

# 注释将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件
# 不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 忽略 doc 目录下的所有 .txt 文件
# 会忽略 doc/notes.txt 
# 但不包括 doc/server/arch.txt
doc/*.txt

远程仓库

查看远程仓库(如果仓库来自clone的话)

git remote -v

增加远程仓库(如果想提交到某远程仓库)

git remote add myremote git://github.com/schacon/grit.git

删除某远程仓库

git remote rm myremote

抓取远程仓库代码

git fetch myremote
git pull 

提交代码到远程仓库

git push myremote master