附件是git完全图解。下面是基本命令的解释,主要有:add, reset, checkout, pull, push, fetch, clone, init, tag等。
Ps:在commit时,需要注意一定要加-m参数,写上commit messages,否则会打开vim强制你写一个。
关于git flow,网上也有一些最佳实践,比如:如何正确使用Git Flow
1、Git add 详解
add将当前工作区的改动保存到暂存区。
在一次commit之前,可以进行多次add。也就是说,可以只改动一点就add,一次commit即可。
git add
pathspec可以是一个确定的文件,也可以用统配符,比如 git add *.c将add所有.c后缀的文件;
git add-AstagesAll
git add .stagesnew and modified,without deleted
git add -ustagesmodified and deleted,without new
使用实例:
在修改文件后,使用git status显示:
$ git status
On branch master
Changes not staged forcommit:(下列修改未加入暂存区,不会被提交)
(use "gitadd
..." to update what will be committed)(使用gitadd
将修改加入暂存区)
(use "gitcheckout --
..." to discard changes in working d(使用git checkout --
取消以文件的修改,所有修改都会被清除,只会清除工作区的文件修改,已经提交到暂存区的修改不受影响,即将工作区的相关文件用暂存区的文件替换掉。)
modified: welcome.txt
no changes added tocommit (use "git add" and/or "git commit -a")
在使用git add .后,git status显示:
$ git status
On branch master
Changes to becommitted:(这些更改需要被提交)
(use "gitreset HEAD
..." to unstage)(如 果后悔了,可以使用git reset HEAD
命令,将文件移出暂存区,恢复到工作区,下次commit时将不提交该文件。 git reset HEAD命令会将暂存区的文件恢复成HEAD所指向的状态,即恢复到版本库里保存的状态,工作区的文件不受影响)
modified: welcome.txt
beichen2012@BEICHEN2012-PC/F/leargit (master)
另:
git checkout HEAD
命令:会用版本库中的文件替换暂存区和工作区中的文件,工作区的修改会被清除,暂存区未提交的修改也会被清除。
2、git reset
git reset是重置命令,其默认值是用HEAD指向的版本库来重置暂存区,很少直接操作工作区(--hard除外),所以重置一般是用来重置暂存区的。
命令格式:git reset[
] [
]
a、--hard,例如:git reset --hard
替换指针指向,引用指向新的提交ID
替换暂存区,将引用指向的新的版本库文件替换到暂成存区,即暂存区文件将与新的版本库文件保持一致
替换工作区,工作区文件将同新的版本库文件保持一致
使用--hard参数,将会把引用指向新的(历史的)提交ID,并把暂存区和工作区文件同步成新的版本库文件,暂存区和工作区的所有原文件将丢失 。
b、--soft,如:git reset --soft
此命令只会把版本库的引用指向改变,但不会改变暂存区和工作区。
例如:git reset --softHEAD^,此命令使用后,工作区和暂存区保持不变,但是引用ID向前回退一次,当对更改不满意时,撤销最新的提交以便重新提交。与此功能相同的一个命令是: git commit --amend ,用于对最新提交重新提交以修补错误的提交说明或错误的提交文件。
c、--mixed,如:git reset --mixed
或git reset
此命令会改变引用的指向,并重置暂存区,不影响工作区。
git reset或 gitreset HEAD:仅用于将HEAD指向的版本库区内容重置到 暂存区,工作区不受影响,相当于将之前 git add命令stage到暂存区的修改撤出暂存区。
git reset -- filename或gitreset HEAD filename:仅将 filename文件的改动撤出暂存区(仅将filename文件从版本库中重置到暂存区),暂存区中的其它文件不变。相当于对gitadd filename的反操作。
3、git checkout
git checkout的默认值是暂存区(这点与reset命令不同),此检出命令主要用来覆盖工作区(如果不省略
参数,也会覆盖暂存区文件)
a、gitcheckout
用于切换 分支
git checkout -b
新建分支,并切换到该分支
b、gitcheckout或git checkout HEAD:
汇总显示工作区、暂存区与HEAD的差异
c、gitcheckout -- filename
用暂存区的文件来覆盖工作区的文件
git checkout -- . 或 git checkout . :用暂存区的文件覆盖所有工作区的文件,相当危险。
d、git checkout HEAD^(或是其他的commit id)
用HEAD^(或是其他的commit id)指向的版本库中的文件,替换当前工作区的文件,当前的工作区处于一个detached HEAD(游离HEAD),此命令可用于查看版本库的某一历史文件;如果修改了文件,也不会被保存,如果想要保存 ,使用:git checkout -b new_branch_name,创建基于当前游离HEAD的分支 。
4、git init,remote, clone, pull, push, fetch
a、在本地建立服务器仓库(远端仓库)
mkdir xx.git
cd xx.git
git init --bare
--bare参数表明创建一个“裸”仓库,该仓库不包含工作目录,仅包含git的一系列版本历史记录文件,也就是说不能在此目录下工作(不能使用git status查看状态等,但是可以用gitk查看历史)。目的是为了防止服务器仓库有人在操作某一分支,客户端有人向同样的分支提交而造成提交失败等一冲突问题。
b、clone命令
格式:git clone
<本地目录名>
本地目录可以省略,则clone到当前目录
b.1)只clone某一分支
git clone–b
xxxx.git
默认则clone所有分支,但是只显示master分支;
b.2)clone所有分支
git clone xx.git
git branch–a //显示所有的分支(包括隐藏的分支)
git checkout–b
remote/origin/
//基于远程的branch分支创建本地branch分支并切换到branch分支
c、remote
为了便于管理,Git要求每个远程主机都必