关于GIT VCS的使用(公司资料)



附件是git完全图解。下面是基本命令的解释,主要有:add, reset, checkout, pull, push, fetch, clone, init, tag等。

Ps:在commit时,需要注意一定要加-m参数,写上commit
messages,否则会打开vim强制你写一个。

关于git flow,网上也有一些最佳实践,比如:http://www.cnblogs.com/cnblogsfans/p/5075073.html

1、Git
add 详解

add将当前工作区的改动保存到暂存区。

在一次commit之前,可以进行多次add。也就是说,可以只改动一点就add,一次commit即可。

git add<pathspec>

pathspec可以是一个确定的文件,也可以用统配符,比如 git
add *.c将add所有.c后缀的文件;

git add-A stages All

git add . stagesnew and modified, without deleted

git add -u stagesmodified and deleted, without new

使用实例:

在修改文件后,使用git status显示:

$ git status

On branch master

Changes not staged forcommit:(下列修改未加入暂存区,不会被提交)

(use "gitadd <file>..." to update what will be committed)(使用gitadd
<file> 将修改加入暂存区)

(use "gitcheckout -- <file>..." to discard changes in working d(使用git
checkout -- <file>取消以文件的修改,所有修改都会被清除,只会清除工作区的文件修改,已经提交到暂存区的修改不受影响,即将工作区的相关文件用暂存区的文件替换掉。 )

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 <file>..." to unstage)(如 果后悔了,可以使用git
reset HEAD<file>命令,将文件移出暂存区,恢复到工作区,下次commit时将不提交该文件。 git reset HEAD命令会将暂存区的文件恢复成HEAD所指向的状态,即恢复到版本库里保存的状态,工作区的文件不受影响)

modified:   welcome.txt

[email protected]/F/leargit (master)

另:

git checkout HEAD<file>命令:会用版本库中的文件替换暂存区和工作区中的文件,工作区的修改会被清除,暂存区未提交的修改也会被清除。

2、git
reset

git reset是重置命令,其默认值是用HEAD指向的版本库来重置暂存区,很少直接操作工作区(--hard除外),所以重置一般是用来重置暂存区的。

命令格式:git reset[<mode>] [<commit>]

a、--hard,例如:git
reset --hard <commit>

替换指针指向,引用指向新的提交ID

替换暂存区,将引用指向的新的版本库文件替换到暂成存区,即暂存区文件将与新的版本库文件保持一致

替换工作区,工作区文件将同新的版本库文件保持一致

使用--hard参数,将会把引用指向新的(历史的)提交ID,并把暂存区和工作区文件同步成新的版本库文件,暂存区和工作区的所有原文件将丢失 。

b、--soft,如:git
reset --soft <commit>

此命令只会把版本库的引用指向改变,但不会改变暂存区和工作区。

例如:git reset --softHEAD^,此命令使用后,工作区和暂存区保持不变,但是引用ID向前回退一次,当对更改不满意时,撤销最新的提交以便重新提交。与此功能相同的一个命令是:
git commit --amend ,用于对最新提交重新提交以修补错误的提交说明或错误的提交文件。

c、--mixed,如:git
reset --mixed <commit>或git reset<commit>

此命令会改变引用的指向,并重置暂存区,不影响工作区。

git reset或 gitreset HEAD:仅用于将HEAD指向的版本库区内容重置到
暂存区,工作区不受影响,相当于将之前 git add命令stage到暂存区的修改撤出暂存区。

git reset -- filename或gitreset HEAD
filename:仅将 filename文件的改动撤出暂存区(仅将filename文件从版本库中重置到暂存区),暂存区中的其它文件不变。相当于对gitadd filename的反操作。

3、git
checkout

git checkout的默认值是暂存区(这点与reset命令不同),此检出命令主要用来覆盖工作区(如果不省略<commit>参数,也会覆盖暂存区文件)

a、gitcheckout <branch>

用于切换 分支

git checkout -b <branch>

新建分支,并切换到该分支

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 <xxxx.git> <本地目录名>

本地目录可以省略,则clone到当前目录

b.1)只clone某一分支

git clone–b <branch> xxxx.git

默认则clone所有分支,但是只显示master分支;

b.2)clone所有分支

git clone xx.git

git branch–a    //显示所有的分支(包括隐藏的分支)

git checkout–b <branch>remote/origin/<branch>
  //基于远程的branch分支创建本地branch分支并切换到branch分支

c、remote

为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

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

git remote

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

git remote -v

origin [email protected]:jquery/jquery.git(fetch)

origin [email protected]: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 <name-origin>

c.5)添加远程主机

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

c.6)删除远程主机

git remote rm <主机名>

d、fetch

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

d.1)取回全部分支

git fetch <远程主机名>

d.2)取回指定分支

git fetch <origin> <master>

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 <v1.0>

创建带注释的标签

git tag–a <v1.0> -m <comments>

查看某tag 处的文件

git checkout tag_name

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

查看某标签:

git show tag_name

7、附:常用命令

git配置(config):

gitversion                                                #查看版本

gitconfig-l                                              #查看当前配置

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

gitconfig --global user.email[email protected]     #设置用户名,邮箱

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 <branchname>         #创建新分支

gitcheckout <branchname>       #切换到分支

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

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

gitbranch -m <old> <new>       #本地分支重命名

git添加(add):

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

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

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

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

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

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

git rm<file>                  #删除文件

git rm-r<floder>             #删除文件夹

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

git mv<old_name> <new_name>    #文件重命名

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<branch_name>            #合并

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

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

git重新基变(rebase):

gitrebase <branch_name>    #

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主

时间: 2025-01-01 08:44:52

关于GIT VCS的使用(公司资料)的相关文章

git用法和相关推荐资料

git用法和相关推荐资料 用法 推荐资料 [1] https://git-scm.com/book/zh/v2/ git很全面的介绍 [2] http://marklodato.github.io/visual-git-guide/index-zh-cn.html 图解git,包含基本用法 原文地址:https://www.cnblogs.com/stephenix/p/9465382.html

IT公司资料持续更新

Atheros Atheros是一家年轻的公司,1999年由斯坦福大学的Teresa Meng博士和斯坦福大学校长,MIPS创始人John Hennessy博士共同在硅谷创办,公司已在全球拥有超过一千名员工. Atheros公司--802.11领域的先锋 中文名称:钰硕 该公司是基于OFDM的无线网络技术厂商,提供基于IEEE802.11a 5-GHz的芯片组,还拓展了蓝牙.GPS.以太网等领域的开发.Atheros的芯片被各大厂商所广泛采用,Netgear.D-Link.Intel等厂商均为A

Git --- 基本操作以及Git 特殊命令,公司常用命令

Git安装方式: window安装方式. 在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行: 安装包下载地址:http://msysgit.github.io/ 完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具. 在开始菜单里找到"Git"->"Git Bash",会弹出 Git

公司资料

原文地址:https://www.cnblogs.com/UTON/p/10078361.html

重学Git以及学习资料

工作这几年,git的操作还是停留在廖老师的git教程的基础水平.考虑到今后要逐渐承担更重要的工作内容,决定重新深入学习Git.首先是学习资料的选择,买过的实体书是<Git版本控制管理>,但之前看了是云里雾里的.还有另外一本书籍是<精通Git>,是Pro Git的翻译,官网有开源书.今天看了下豆瓣的评论,前者翻译的不太好,推荐看Pro Git.今天看了Pro Git的前40页,确实非常棒,今后书籍就以这本为主了,廖老师的教程基本可以作为历史了. 其它一些资源: 1.SourceTre

Git基础学习

Git是一款免费.开源的分布式版本控制系统(Version Control System,简称 VCS),用于敏捷高效地处理任何或小或大的项目.Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异.Git 并不保存这些前后变化的差异数据,而是把变化的文件作为快照后,创建索引指向最新的版本 一.工作流 在Git中文件会流转的三个工作区域里:工作目录,暂存区域,以及本地仓库(远程仓库).在 Git 内文件只有三种状态:已修改(

git超速掌握之一(基本使用)

前言: 无论你是运维.开发还是IT爱好者,都会听说github了吧?动不动哪位大神就说在github上有什么什么项目,我的github地址是xxxxx,甚至有自己个github在找新工作时都能给自己加分不少,甚至有人在github写书比如(跟老齐学python),所以github太有用了不得不学啊.. 其实本人15年的时候还在学搭建svn,当时公司也用的是svn,主要是测试发布代码 和自己部门存文档用,当时接触linux不久,现在掌握了git,感觉是从非rmb玩家到rmb玩家般的不同,嗯....

Git 学习笔记(二)

看完了 Git 的介绍后,也是时候动手尝试一下了,不过我们需要先安装好它.它有许多种安装方式,主要分两种,一种是通过编译源代码来安装:另一种是使用为特定平台预编译好的安装包,这里就不做赘述了. 配置 一般运行前,我们都需要配置下自己的 Git 工作环境.配置工作只需一次,以后升级时还会沿用现在的配置.当然,如果需要,你随时可以用相同的命令修改已有的配置.Git 提供了一个叫做 git config 命令专门用来配置或读取相应的工作环境变量. 用户信息配置,分别用来配置用户名和邮箱: $ git

配置多个 git 账号的 ssh密钥

背景 在工作中,我们通常会以 ssh 的方式配置公司的 git 账号,但是平时也会使用 github 管理自己的项目.因此,我们需要为自己的 github 创建一个新的 git 账号,这就需要生成新的 ssh 密钥.下面总结了创建多个互相独立的 ssh 密钥的步骤(以公司的和自己 github 的为例). 步骤(以 mac 为例) 在文件夹 ~/.ssh/ 下创建两个文件夹,分别为 company/ 和 github/,前者存放公司的 ssh密钥,后者存自己 github 的 ssh 密钥.下面