频道栏目
首页 > 程序开发 > 软件开发 > Vc > 正文
关于GIT VCS的使用(公司资料)
2016-04-23 09:21:30      个评论    来源:args_的博客  
收藏   我要投稿
 

附件是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要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

c.1)列出所有远程主机

git remote

c.2)查看远程主机的网址。

git remote -v

origingit@github.com:jquery/jquery.git(fetch)

origingit@github.com:jquery/jquery.git(push)

上面命令表示,当前只有一台远程主机,叫做origin,以及它的网址。

c.3)自定义主机名

克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

git clone -o jQueryhttps://github.com/jquery/jquery.git

git remote

jQuery

上面命令表示,克隆的时候,指定远程主机叫做jQuery。

c.4)查看某主机的详细信息

git remote show

c.5)添加远程主机

git remote add <主机名> <网址>

c.6)删除远程主机

git remote rm <主机名>

 

d、fetch

一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。

d.1)取回全部分支

git fetch <远程主机名>

d.2)取回指定分支

git fetch

 

e、push

将本地分支推送到远程主机

git push <远程主机> <本地分支>:<远程分支>

将本地分支(比如master)推送到远程主机的某一分支上(比如master)

git push xxx.git branch1:branch1

将本地的branch1分支推送到xxx.git的branch1,如果xxx.git上不存在branch1,就会被创建一个。

 

git push xxx.git test:master

将本地的test分支推送到xxx.git上,并作为其master分支

 

git push xxx.git :test

推送一个空分支到xxx.git的test分支,即删除xxx.git上的test分支

默认情况下,git push并不会把tag标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。
1.push单个tag,命令格式为:git pushorigin [tagname]
例如:
git push origin v1.0#将本地v1.0的tag推送到远端服务器
2.push所有tag,命令格式为:git push[origin] --tags
例如:
git push --tags

git push origin --tags

f、pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。

git pull <远程主机名> <远程分支名>:<本地分支名>

此处与push命令刚好相反。

git pull origin next:master

取回origin主机的next分支,与本地的master分支合并

 

5、文件归档 git archive

a、基于最新提交建立归档文件:

git archive -o latest.zip HEAD

b、只将目录 src和 doc归档

git archive -o partial.zip HEAD src doc

6、git tag

git tag有两种形式:轻量型和带注释的标签。

 

列出所有标签

git tag

 

创建轻量级标签

git tag

 

创建带注释的标签

git tag–a -m

 

查看某tag处的文件

git checkout tag_name

此时,可查看该tag时刻的文件,但处理一种分离的分支(detached),不能够提交,仅能查看,拷贝。若需要在此tag基础上修改文件,可从此处新建一个分支:gitchechout–b tag_name,然后在新建的分支上工作,即可提交。

 

查看某标签:

git show tag_name

 

7、附:常用命令

git配置(config):

gitversion#查看版本

 

gitconfig-l#查看当前配置

gitconfig --global user.name "Dean"#设置用户名,邮箱

gitconfig --global user.emailg.xiangyu1990@gmail.com#设置用户名,邮箱

gitconfig --global alias.cicommit#设置git命令的别名

gitconfig --global alias.cocheckout#设置git命令的别名

git仓库(repository):

#创建一个本地的git仓库并命名:

git initdemo

 

#克隆一个远程的git仓库到指定路径:

gitclonehttps://github.com/a396901990/android.git/path/workpsace

git分支(branch):

gitbranch#查看分支

gitremote show origin #查看所有分支

gitbranch #创建新分支

gitcheckout #切换到分支

gitcheckout -b #创建并切换到新分支

gitbranch -d #删除分支(-D强删)

gitbranch -m #本地分支重命名

git添加(add):

git add #将本地指定文件名或目录(新增和修改,没有删除)的文件添加到暂存区

git add. #将本地所有的(新增和修改,没有删除)文件添加到暂存区

git add-u #将本地的(修改和删除,没有新增)文件添加到暂存区

git add-A #将本地所有改动添加到暂存区(git add-A = git add . + git add -u)

git add-i #打开一个交互式界面按需求添加文件

git删除/重命名(rm/mv):

git rm#删除文件

git rm-r#删除文件夹

git rm--cached #从版本库中删除文件,但不删除文件

 

git mv #文件重命名

git提交(commit):

gitcommit -m"comment"#提交暂存区中的内容(已经add)并添加注释

gitcommit -a#把修改的文件添加到暂存区(不包括新建(untracked)的文件),然后提交。

gitcommit--amend#修改提交的commit(没有push)

gitcommit --amend -m "comment" #修改commit注解

git差异(diff):

gitdiff#查看工作目录(workingtree)暂存区(index)的差别

git diff--cached #查看暂存起来的文件(stage)与并未提交(commit)的差别

git diff--staged #同上

git diffHEAD#查看最后一次提交之后的的差别(HEAD代表最近一次commit的信息)

git diff--stat#查看显示简略结果(文件列表)

git diffcommit1 commit2 #对比两次提交的内容(也可以是branch,哈希值)

git查看历史(log):

git log

git log-3 #查看前3次修改

git log--oneline #一行显示一条log

git log-p #查看详细修改内容

git log--stat #查看提交统计信息

git log--graph #显示何时出现了分支和合并等信息

git查看状态(status):

gitstatus#查看你的代码在缓存与当前工作目录的状态

gitstatus -s #将结果以简短的形式输出

gitstatus --ignored #显示被忽略的文件

git存储(stash):

gitstash#保存当前的工作进度

gitstash save "message" #保存进度加说明

gitstashlist#显示进度列表

gitstashpop#恢复最新保存的工作进度,并将恢复的工作进度从存储的列表中删除

gitstashapply #恢复最新保存工作进度,但不删除

gitstashdrop#删除一个进度,默认删除最新的

gitstash clear#删除所有

git重置(reset):

gitreset --mixed #同不带任何参数的gitreset一样,重置暂存区,但不改变工作区

gitreset --soft#回退到某个版本,不改变暂存区和工作区(如果还要提交,直接commit即可)

gitreset --hard#彻底回退到某个版本,替换暂存区和工作区,本地的源码也会变为上一个版本的内容

 

gitreset#将之前用git add命令添加到暂存区的内容撤出暂存区(相当于git add-A 的反向操作)

gitresetHEAD# HEAD效果同上,因为引用重置到HEAD相当与没有重置

gitreset filename #将文件撤出暂存区(相当于git addfilename的反向操作)

gitresetHEAD^ #引用回退一次(工作区不变,暂存区回退)

gitreset --soft HEAD~3 #引用回退三次(工作区不变,暂存区不变)

git撤销(revert):

gitrevertcommit#撤销指定commit

gitrevertHEAD#撤销上一次commit

gitrevert -no-edit HEAD #撤销上一次并直接使用默认注释

gitrevert -nHEAD#撤销上一次但不commit

git合并(merge):

gitmerge#合并

gitmerge --no-ff #采用no fastforward的合并方式,这种方式在合并的同时会生成一个新的commit

gitmerge--abort#尽量回退到merge前的状态(可能会失败)

git重新基变(rebase):

gitrebase #

gitrebase --continue #执行rebase出现冲突解决后,执行该命令会继续应用(apply)余下的补丁

gitrebase --skip #跳过当前提交

gitrebase --abort #终止rebase,分支会回到rebase开始前的状态

git获取/拉(fetch/pull):

gitfetch#从远程获取最新版本到本地,不会自动merge

 

gitpull#从远程获取最新版本并merge到本地

git pull--rebase #暂存本地变更,合并远程最新改动,合并刚刚暂存的本地变更(不产生无用的merge的同步)

git推(push):

git pushorigin master #将本地分支推送到origin主机的master分支

git push-u origin master # -u指定origin为默认主机,后面就可以不加任何参数使用git push了

git push-f origin # -f强推,在远程主机产生一个"非直进式"的合并(non-fast-forwardmerge)

git push--all origin #将所有本地分支都推送到origin主\

点击复制链接 与好友分享!回本站首页
相关TAG标签 资料 公司
上一篇:MVC和MVVM详解
下一篇:Git 在团队中的最佳实践--如何正确使用Git Flow
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训

版权所有: 红黑联盟--致力于做实用的IT技术学习网站