Repo和Git 版本管理常用命令

来源:互联网 发布:北京哪个区最好知乎 编辑:程序博客网 时间:2024/06/10 20:06

转自:http://zyueqi.iteye.com/blog/1461466

GitCommand Quick Reference
本附录为Git常见命令快速参考。每节介绍一种操作类型。
这里会列出很多命令,而相应的解释却不多。对于还不熟悉Git的读者,可回头翻阅第1章“Git的版本控制之道”(第3页)。

A.1安装和初始化
Setupand Initialization

在使用Git之前,须要先进行配置。在使用一个新的版本库之前,须要先初始化。本节介绍与Git设置和初始化相关的命令。

配置全局用户名和电子邮件地址
prompt> gitconfig --global user.name "Your Name"
prompt> gitconfig --global user.email "wuhua0904@126.com"
为特定的版本库配置用户名和电子邮件地址

注意:你可以为每个版本库单独设置用户名和邮件地址。这使得用户可在不同项目中使用不同的用户名和/或不同的邮件地址。

prompt> cd/path/to/repo
prompt> gitconfig user.name "Your Name"
prompt> gitconfig user.email wuhua0904@126.com

在命令行中使用不同颜色显示不同内容
prompt> gitconfig --global color.ui "auto"

初始化新版本库
prompt> mkdir/path/to/repo:
prompt> cd/path/to/repo
prompt> gitinit
Initialized emptyGit repository in /path/to/repo/.git/
prompt>
...create file(s) for first commit ...
prompt> gitadd 
prompt> gitcommit -m 'initial import'
Createdinitial commit bdebe5c: initialimport. 

1 fileschanged, 1 insertions(+), 0 deletions(-)

createmode 100644 <somefile>

克隆版本库
prompt> gitclone <repository url
Initializerepo/.git
Initialized emptyGit repository in /work/<remoterepository>/.git/

将目录中的内容纳入Git版本控制
prompt> cd/path/to/existing/directory
prompt> gitinit
Initialized emptyGit repository in /path/to/existing/directory/.git
prompt> gitadd .
prompt> gitcommit -m "initial import of some project"

在本地版本库中设置远程版本库的别名
...from within the repository directory ...
prompt> gitremote add <remote repository><repository url>


A.2日常操作
NormalUsage

本节列出Git日常操作命令,对应于第4章“添加与提交:Git基础”(第41页)。

添加新文件或暂存已有文件上的改动,然后提交
prompt> gitadd <some file>
prompt> gitcommit -m "<somemessage>"

暂存已有文件上的部分修改
注意:[...]表示可选参数。

prompt> gitadd -p [<some file>[<some file> [and soon]]]
选择要提交的文本块……

使用交互方式添加文件
prompt> gitadd -i

暂存已纳入Git版本控制之下的文件的修改
prompt> gitadd -u [<some path>[<some path>]]

提交已纳入Git版本控制之下的文件的所有修改#s"
prompt> gitcommit -m "<some message>"-a

清除工作目录树中的修改
prompt> gitcheckout HEAD <some file>[<some file>]

取消已暂存但尚未提交的修改的暂存标识
prompt> gitreset HEAD <some file>[<some file>]

修复上一次提交中的问题

改动相关文件,并暂存……
prompt> gitcommit -m "<some message>"--amend

修复上一次提交中的问题,并复用上次的提交注释
prompt> gitcommit -C HEAD --amend


A.3分支
Branches
分支是Git的强项之一。本节介绍关于分支的各个命令。详细内容见第5章“理解和使用分支”(第55页)。

列出本地分支
prompt> gitbranch
列出远程分支
prompt> gitbranch -r

列出所有分支
prompt> gitbranch -a

基于当前分支(的末梢)创建新分支
prompt> gitbranch <newbranch>

检出另一条分支
prompt> gitcheckout <somebranch>

基于当前分支创建新分支,同时检出该分支
prompt> gitcheckout -b <new branch

基于另一个起点,创建新分支
你可以从版本库中的任何一个版本开始创建新分支。这个起始点可以用一条已有的分支名称、一个提交名称,或者一个标签名称来表
prompt> gitbranch <new branch><start point>

创建同名新分支,覆盖已有分支
prompt> gitbranch -f <some existing branch>[<start point>]

移动或重命名分支
只有当<newbranch>不存在时
prompt> gitcheckout -m <existing branch name><new branch name>

如果<newbranch>已存在,就覆盖它
prompt> gitcheckout -M <existing branch name><new branch name>

把另一条分支合并到当前分支
prompt> gitmerge <somebranch>

合并,但不提交
prompt> gitmerge --no-commit <somebranch>

拣选合并,并且提交
prompt> gitcherry-pick <commitname>

拣选合并,但不提交
prompt> gitcherry-pick -n <commitname>

把一条分支上的内容压合到另一条分支(上的一个提交)
prompt> gitmerge --squash <somebranch>

删除分支
仅当欲删除的分支已合并到当前分支时
prompt> gitbranch -d <branch todelete>

不论欲删除的分支是否已合并到当前分支
prompt> gitbranch -D <branch todelete>


A.4历史
History

这些命令用来显示版本库的历史信息,包括代码曾在哪里、谁在何时做了什么、修改的内容及其统计信息。详见第6章“查询Git历史记录”(第71页)。
显示全部历史记录
prompt> gitlog

显示版本历史,以及版本间的内容差异
prompt> gitlog -p

只显示最近一个提交
prompt> gitlog -1

显示最近的20个提交,以及版本间的内容差异
prompt> gitlog -20 -p

显示最近6小时的提交
prompt> gitlog --since="6 hours"

显示两天之前的提交
prompt> gitlog --before="2 days"

显示比HEAD(当前检出分支的末梢)早3个提交的那个提交
prompt> gitlog -1 HEAD
或者……
prompt> gitlog -1 HEAD
或者……
prompt> gitlog -1 HEAD

显示两个版本之间的提交
下面命令中的<startpoint>和<endpoint>可以是一个提交名称、分支名称、标签名称,或者它们的混合。
prompt> gitlog <startpoint>...<endpoint>

显示历史,每个提交显示一行,包括提交注释的第一行
prompt> gitlog --pretty=oneline

显示改动行数统计
prompt> gitlog --stat

显示改动文件的名称和状态
prompt> gitlog --name-status

显示当前工作目录树和暂存区间的差别
prompt> gitdiff

显示暂存区和版本库间的差别
prompt> gitdiff --cached

显示工作目录树和版本库间的差别
prompt> gitdiff HEAD

显示工作目录树与版本库中某次提交版本之间的差别
<startpoint>可以是一个提交名称、分支名称或标签名称。
prompt> gitdiff <start point>

显示版本库中两个版本之间的差别
prompt> gitdiff <start point><end point>

显示差别的相关统计
prompt> gitdiff --stat <start point>[<end point>]

显示文件中各个部分的修改者及相关提交信息
prompt> gitblame <some file>

显示文件中各个部分的修改者及相关提交信息,包括在该文件中复制、粘贴和移动内容等方面的情况。
prompt> gitblame -M <somefile>

显示文件中各部分的修改者及相关提交信息,包括在文件间移动内容方面的情况
prompt> gitblame -C -C <somefile>

显示历史时,显示复制和粘贴信息
prompt> gitlog -C -C -p -1 <somepoint>



A.5远程版本库
RemoteRepositories

开发人员之间通过远程版本库来共享工作成果,相互协作。本节介绍关于这些操作的命令,详见第7章“与远程版本库协作”(第91页)。

克隆远程版本库
prompt> gitclone <somerepository>

克隆远程版本库,但只下载其中最近200个提交的历史记录
prompt> gitclone --depth 200 <somerepository>

在本地版本库中设置远程版本库的别名
prompt> gitremote add <remote repository><repository url>

显示远程分支
prompt> gitbranch -r

基于远程分支创建本地分支
prompt> gitbranch <new branch><remote branch>

基于远程标签创建本地分支
prompt> gitbranch <new branch><remote tag>

从别名为“origin”的远程版本库中取来修改变化,但不合并到本地分支
prompt> gitfetch

从任意的远程版本库中取来修改变化,但不合并到本地分支
prompt> gitfetch <remoterepository>

从任意的远程版本库中取来修改变化,并合并到当前检出的本地分支
prompt> gitpull <remoterepository>

从别名为“origin”的远程版本库中取来修改变化,并合并到当前检出的本地分支
prompt> gitpull

把修改变化从本地分支推入远程版本库
prompt> gitpush <remote repository><local branch>:<remotebranch>

把修改变化从本地分支推入远程版本库中同名分支
prompt> gitpush <remote repository><local branch>

把修改变化从本地新建分支推入远程版本库
prompt> gitpush <remote repository><local branch>

把修改变化推入别名为“origin”的远程版本库
当远程版本库中已有同名分支时,这个命令会推入本地分支到远程版本库对应的分支中。如果远程版本库中尚无同名分支,则须使用gitpush <repository name><local branch>。
prompt> gitpush

在远程版本库中删除分支
prompt> gitpush <remote repository>:<remote branch>

在本地版本库中删除所有远程版本库中已不存在的分支
prompt> gitremote prune <remoterepository>

在本地版本库中删除某个远程版本库的简称,以及该远程版本库相关的分支
prompt> gitremote rm <remoterepository>

A.6连接Git和SVN
Git toSVN Bridge

Git可以读取Subversion版本库中的数据,并把本地修改发送回Subversion版本库。这是Git区别于其他版本控制工具的必杀技之一。相关详细介绍请参见第10章“迁移到Git”(第131页)。
克隆SVN版本库的全部内容
prompt> gitsvn clone <svnrepository>

克隆具有标准结构的SVN版本库
下面命令适用于克隆标准结构的SVN数据库,也就是说,主干命名为trunk,其他分支都存放于branches目录下,标签都存放于tags目录下。
prompt> gitsvn clone -s <svnrepository>

克隆非标准结构的SVN版本库
prompt> gitsvn clone -T <trunk path>\
2]! W9 t7 X4 N) D; H# n( g4 I/ H
-b <branch path> \

+q- e& |5 k& n$ C1 }1 e
-t <tag path> \

7v. |9 `& `9 g, _* a

< svn repository>

克隆具有标准结构的SVN版本库中的某个版本(比如第2321版)
prompt> gitsvn clone -s -r 2321

克隆具有标准结构的SVN版本库,并对SVN中的分支添加前缀
prompt> gitsvn clone -s --prefix svn/ <svnrepository>

从上游SVN版本库中获得更新的内容,并依此在本地Git版本库中变基本地分支
prompt> gitsvn rebase

把修改变化推回上游SVN版本库
prompt> gitsvn dcommit

列出所有将推入上游SVN版本库的提交
prompt> gitsvn dcommit -n

显示SVN历史记录
prompt> gitsvn log

显示文件中各个部分的SVN的修改者及相关提交信息
prompt> gitsvn blame <some file>

 

 

转载二则:

1. 服务器版本下载:

repo init -u git@192.168.1.11:i700t_60501010/platform/manifest.git-b froyo_almond -m M76XXTSNCJNLYA60501010.xml

repo sync

repo forall -c git checkout --track origin/i700t_60501010 -b[你的本地分支]

或者:

git clone git@192.168.1.11:6120_gingerbread/Arm9-6120.git

git checkout --track origin/arm9_6120 -b [你的本地分支名]

 

2. 服务器新加仓库同步:

请按如下步骤取得Lanucher_wpon的代码:

1:~> cd I700T/.repo/manifest

2: I700T/.repo/manifest> git pull --rebase

3: I700T/.repo/manifest> cd ../..

4: I700T> repo syncplatform/packages/apps/Launcher_wpon

5:I700T> cd packages/apps/Launcher_wpon

6:I700T/packages/apps/Launcher_wpon> 

7:git checkout --track origin/froyo_almond -b [你的本地分支]

 

3. 上传本地修改到服务器

repo forall -c git pull --rebase      和服务器同步(要上传代码前,一般先进行此操作)

git add .    或git add 文件名         添加当前仓库修改的文件

git commit -m "..."                   在引号中添加你的修改记录

git push origin  本地分支名:froyo_almond     上传本地修改的代码

 

4. 设置一些默认的全局变量,对所有工程代码有效

git config --global user.name yourmail

git config --global user.email yourmail

git config --global push.default tracking    这样后续git push 后面不用带参数

 

5.查看修改记录

git log                    本地仓库修改记录

repo forall -c git log --since="2011-04-19" --until="2011-04-21"  按条件查看工程所有仓库修改记录

repo status             查看工程中所有仓库的修改状态(包括文件位置)

git status                查看仓库修改状态

 

6. 分支相关

git branch               查看本地branch

git branch -r            查看远程branch

git branch -a            查看所有branch

git branch -D  (-d)  (branchname)    删除branch

cat .git/config     可以查看本地branch一些信息

 

7. 修改恢复相关

git checkout filename1  filename2 ...         取消本地修改,和服务器同步

git stash  

git stash apply        先stash本地修改,然后执行git pull--rebase同步,最后再APPLY恢复自己的修改

git reset --soft head_commit 恢复到最后一次commit,保持代码修改

git reset --hard commit   恢复到指定一次commit,放弃之前所有修改

#回退a.py这个文件的版本到上一个版本  

git reset HEAD^ a.py 

git reset commitNO filename

 

8. 本地某仓库出问题了,不好闹腾时,删除之,并重新同步跟踪

project_folder/vendor/qcom$ rm -rf proprietary/                     进到相应目录,删除之

project_folde$ repo sync platform/vendor/qcom/proprietary      重新reposync,后面路径名称可查看:

                                                                                 gedit .repo/manifest.xml

git branch -a   ----列举所有BRANCH

git branch -D 700_arm11_server

git branch -D 700_arm11_server_wifi --删掉所有本地branch

git checkout --track origin/froyo_almond -b 700_arm11_server  然后track远程branch,重新创建本地分支

 

9.tag的使用

git tag [tag_name][version],在对应版本上(一般用change的SHA1),创建tag 

git tag -l 列出当前tag 

git tag -d [tag_name] 删除tag 

有了tag以后,可以使用git checkout [tag_name] -b[branch_name]来检出对应tag时刻的代码。也可以用tagname来实现diff等功能。 

 

10. patch的使用

git diff filename1 filename2 ...               修改位置对比,查看源码

git diff > xxx.patch                            将修改的地方打成一个patch

git apply xxx.patch                            将patch打上

 

11. 后续有用到的命令继续添加

git revert 是撤销某次提交。git reset –hard,才是退回到以前的版本

git reset --soft commitNum     保存代码修改的reset,但这个时候无法使用git diff 进行比较修改的文件,必须:

git reset filename filename    这样就可以git diff查看

git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9b8e7b00c02b95b320f14b625663fdecf2d63e74c 查看某两个版本之间的差异

git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filenameb8e7b00c02b95b320f14b625663fdecf2d63e74c:filename查看某两个版本的某个文件之间的差异

  Git 命令别名

$ git config –global alias.co checkout // co将会成为checkout的别名

$ git config –global alias.br branch

$ git config –global alias.ci commit

$ git config –global alias.st status

$ git config –global user.name “username”

$ git config –global user.email username@mail.com

 

转载三则:

  1. 下载 repo 的地址: http://android.git.kernel.org/repo,可以用 wgethttp://android.git.kernel.org/repo或者 curl http://android.git.kernel.org/repo>~/bin/repo  来下载 repo , chmod a+x~/bin/repo 
  2. 用repo sync 在抓去 android source code 的时候,会经常出现一些错误导致 repo sync中断,每次都要手动开始。 可以用如下的命令,来自动重复:  $?=1;   while [ $? -ne 0 ] ;do  repo sync ; done
  3.  repo help [ command ] , 显示command 的详细的帮助信息内容
  4. repo init -u URL ,  在当前目录安装 repository,会在当前目录创建一个目录 ".repo"  -u 参数指定一个URL, 从这个URL中取得repository 的 manifest 文件。  repo init -ugit://android.git.kernel.org/platform/manifest.git

             可以用 -m参数来选择 repository 中的某一个特定的 manifest 文件,如果不具体指定,那么表示为默认的 namifest 文件(default.xml)   repo init -u git://android.git.kernel.org/platform/manifest.git -mdalvik-plus.xml

            可以用 -b 参数来指定某个manifest 分支。

             repo init-u git://android.git.kernel.org/platform/manifest.git -brelease-1.0

            可以用命令: repo help init 来获取 repo init 的其他用法

       4. repo sync [project-list]

           下载最新本地工作文件,更新成功,这本地文件和repository 中的代码是一样的。 可以指定需要更新的project ,如果不指定任何参数,会同步整个所有的项目。

          如果是第一次运行 repo sync , 则这个命令相当于 git clone ,会把 repository中的所有内容都拷贝到本地。 如果不是第一次运行 repo sync , 则相当于 git remote update;  git rebase origin/branch . repo sync 会更新 .repo 下面的文件。 如果在merge 的过程中出现冲突,这需要手动运行  git  rebase--continue

     5. repo update[ project-list ]

     上传修改的代码 ,如果你本地的代码有所修改,那么在运行 repo sync 的时候,会提示你上传修改的代码,所有修改的代码分支会上传到Gerrit (基于web 的代码review 系统), Gerrit受到上传的代码,会转换为一个个变更,从而可以让人们来review 修改的代码。

      6. repo diff [ project-list ]

       显示提交的代码和当前工作目录代码之间的差异。

      7. repo download  target revision

       下载特定的修改版本到本地, 例如:  repo downloadpltform/frameworks/base 1241 下载修改版本为 1241 的代码

      8. repo start newbranchname

       创建新的branch分支。 "." 代表当前工作的branch 分支。

      9.  repo prune [project list]

       删除已经merge 的 project

     10. repo foreach [ project-lists] -c command

      对每一个 project 运行 command 命令

     11. repo status

      显示 project 的状态

0 0
原创粉丝点击