自己新浪博客转移

【GIT上手篇】-1-基本操作(初始化仓库,添加、提交文件)

   创建(初始化)一个GIT库

   init 命令

 

说明:用于仓库的初始化

参数:--bare 创建一个纯仓库(不含缓存区和工作目录,服务器一般采用这种形式)

操作:

   从本地工作目录添加文件到缓存区

   add 命令

 

说明:文件从工作目录添加到缓存区(包括新增文件和修改文件)

参数:  . 提交工作目录中的所有未删除文件到缓存区(包括新增文件和修改文件)

-A 提交工作目录中所有文件到缓存区(包括新增文件、修改文件和删除文件)

-u 提交工作目录中已有文件的变更(包括修改文件和删除文件)

操作

   从缓存区添加文件到本地库

   commit 命令

 

说明:文件从缓存区添加到本地库中

参数:-m 添加注释

--amend 更改最新一次的提交,不生成新的commit

-am 对已跟踪的文件可以从工作目录直接提交到库中

操作:

【GIT上手篇】-2-基本操作(修改、删除文件,查看文件状态)

 

   删除已提交的文件

   rm 命令

 

说明:用于删除已提交的文件(删除文件将直接进入缓存区,可直接提交)

参数:--cached 直接从缓存区删除文件,但是保留工作目录中的文件

操作:

   重命名文件或目录

   mv 命令

 

说明:重命名文件或目录(git mv 原文件名新文件名)

参数:无

操作:

   查看文件状态

   status 命令

 

说明:查看文件状态

参数:无

操作:

【GIT上手篇】-3-撤销修改(工作目录、暂存区、本地库)

 

如何撤销本地工作目录的修改?

本地修改文件HelloWorld.txt和test/linkHelloWorld.txt,git status输出如下

撤销HelloWorld.txt的修改

git checkout -- 文件名(包含路径)

撤销本地全部修改

git checkout .

如何撤销已放入暂存区(Index区)的修改?

本地修改文件HelloWorld.txt和test/linkHelloWorld.txt,新增文件sometime.txt,并全部加入暂存区(Index区)

Git已经提示使用git reset HEAD 来取消暂存区修改

(给git status加上-s参数,可以通过简单模式查看状态,第一列本地库和暂存区的差异,第二列暂存区和工作目录的差异)

不添加参数,撤销所有暂存区中的修改

另外可以使用git rm --cached 文件名,可以从暂存区移除文件,使该文件变为未跟踪的状态,同时下次提交时从本地库中删除

Tips.没有带参数的git reset命令,默认执行--mixed参数,即用reset版本库到指定版本,并重置暂存区,在上面的命令中

指定的目标版本是HEAD,即当前版本,所以实际上没有任何修改,仅仅是重置暂存区。

如何撤销已经提交到本地库的修改?

本地修改文件HelloWorld.txt和test/linkHelloWorld.txt,并已经commit到本地库

这时候就要用到刚才的git reset命令,只不过这次要将回退到的版本设定为当前提交的前一次,即HEAD^

【GIT上手篇】-4-查询操作(历史记录、差异、帮助)

 

   查询历史提交信息

   git log 命令

 

说明:查询历史提交信息,默认包括commit哈希值、修改人、修改时间和注释信息

参数: --oneline:单行显示历史信息,包括7位的commit哈希值和注释信息的首行

-数字:显示指定条数的log信息,可以跟任意整数

--graph --all:以图形的方式显示多条分支的历史信息,一般配合--oneline参数执行

--stat:显示每次提交的文件变动列表

-p:显示每次文件变动的具体内容

文件名:显示某个文件的历史变动

提交范围:显示某一个范围的提交,使用提交的哈希值标识(git log fwj9e8..HEAD  显示从fwj9e8到最新点的信息)

操作:

--oneline

--graph --all

--stat

-p

图形化工具:gitk

   显示差异内容

   git diff 命令

 

说明:显示差异内容,默认比较本地工作目录和暂存区的差异

参数:

--cached:比较暂存区和本地库的差异

HEAD:比较本地工作目录和本地库的差异

指定版本号:比较本地工作目录和指定版本的差异

默认使用传统的diff和patch方式显示差异内容

--- a/first_new :比较原文件

+++ b/first_new :比较目标文件

@@ -5,3 +5,4 @@ :原文件第5行开始的3行,目标文件第5行开始的4行

+ :目标文件中存在的内容

- : 原文件中存在的内容

   查看git帮助信息

   git help 命令

 

说明:显示系统自带的git帮助文档

【GIT上手篇】-5-分支基本操作(创建、切换、维护)

 

   查看当前库中分支

   git branch 命令

 

说明:查看当前git库中的分支

参数: -a:查看git库中的所有分支(本地和远程)

-r:查看git库中的远程分支

   创建新分支

   "git branch 分支名 [commit ID] " 命令

 

说明:基于commitID即某一个全球版本号拉出新分支,如果没有commitID则基于当前分支的HEAD拉出新分支

示例: git branch new

git branch new 5f11e77

  切换到指定分支

   "git checkout 分支名" 命令

 

说明:切换到指定分支上

示例: git checkout new

  创建新分支,同时切换到新分支

   "git checkout -b 分支名 [commit ID] " 命令

 

说明:基于commitID即某一个全球版本号拉出新分支,如果没有commitID则基于当前分支的HEAD拉出新分支,同时切换到新分支上

示例: git checkout -b new = git branch new + git checkout new

Tips:HEAD指代当前提交,HEAD^ HEAD~ HEAD~1都指向当前提交的父节点,

比如示例中的命令可以写成:git checkout -b HEAD^

  维护分支

   git branch 命令

 

说明:维护分支,包括删除和重命名

参数: -d:删除已合并的分支

-D:强制删除分支(未合并的分支只能通过这种方式删除)

-m:重命名分支

-M:强制重命名分支(未合并的分支只能通过这种方式重命名)

删除分支例

重命名分支例

【GIT上手篇】-6-分支进阶操作(合并分支、使用Gitk查看历史)

 

·    什么是Gitk

 

Gitk是一款linux上显示git历史记录的图形化工具,具有查看历史信息、建立分支、浏览版本库文件,比较差异等功能

命令:gitk --all 显示所有分支的历史信息

   合并分支

   “git merge [目标分支] ” 命令

 

说明: 合并分支(默认合并到当前分支,所以必须先切换到要merge到的分支上再执行命令)

参数:无

执行命令行之后,可通过Gitk工具查询

1、原版本图,当前在brtest2分支上

$ git merge brtest1

2、新版本图,brtest1和brtest2合并到了一个新的节点(黄色标识)

   挑选分支并合并提交

   cherry-pick 命令

 

说明:挑选分支并合并提交(合并一条分支上的某几次提交,而并非全部,可以通过提交的哈希值来指定需要合并哪几次提交)

参数: -n 挑选但并不提交(即需要手动执行commit命令)

执行命令行之后,可通过Gitk工具查询

原版本图

新版本图,在brtest2分支上合入了branch2所指向的那次提交,即 zhushi

   合并分支(在视图中显示在一条分支的修改)

   rebase 命令

 

说明:另一种合并方式,结果和merge操作一样,但是对版本图来说,并不会出现分叉再合并的样子,就好像是在一条分支上做的修改(如果想移动哪个分支,就要先切换到这个分支上)。

执行命令行之后,可通过Gitk工具查询

原版本图

将br1分支rebase到master分支,结果等于merge两条分支,但版本图更加清晰。

新版本图

关于rebase命令更详细的介绍可以参见:初识rebase命令——Notes Link

 

【GIT上手篇】-7-如何解决冲突?

   如何解决冲突?

   冲突的产生有多种原因,比如不同文件都修改了同一行;不同分支文件被重命名为不同名字;在一条分支上文件被删除,在另一条分支上文件被修改等等,

在合并的时候(merge,cherry-pick,rebase)都有可能产生冲突。

操作:遇到冲突,首先要编辑冲突文件,可以使用vi或者其他工具,冲突文件表现为以下样子

<<<<<< HEAD 到 ======= :代表本地分支的修改内容

======= 到 >>>>> 分支名:代表要合并的分支做的修改

编辑冲突文件删去多余的标示内容,保存退出即可,然后按以下方式继续完成合并操作。

【GIT上手篇】-8-如何全局忽略对某些文件的跟踪

 

·    在日常工作中,最常用的命令就是git status了,它被用来跟踪本地工作目录,暂存区(Index区)的变化,但是其中的某些文件是我们不希望出现在列表之中的,比如UltraEdit自动生成的*.bak文件,或者是某些编译过程中生成的诸如*.o这种对象文件,这时候可以通过设置忽略文件,来实现这种功能。

一、目录级忽略

 ————————————

.gitignore文件的作用范围是其所处的目录及子目录,可以放置于任何目录中。

比如在本地新建如下文件,通过git status看到的信息

在根目录cat一个.gitignore文件,添加 *.o *.bak,再执行git status发现.bak和.o都消失了。

注:添加.gitignore是为了把自己忽略了。

二、版本库级忽略

————————————

实际我们可以在版本库的根目录中,编辑一个.gitignore文件来实现这种功能,但是还有另外一种方法。

即在.git/info/exclude中设置文件忽略。

三、全局忽略

————————————

这个是用过设置Git的配置变量core.excludesfile来指定一个忽略文件实现的,它对本地所有的版本库都有效

·    忽略文件的书写范例

————————————

规则:

1.忽略文件中以#开头的内容为注释;

2.可以使用通配符,

符号

说明

*

匹配任意多的字符

?

匹配任意一个字符

[abc]

匹配a或者b或者c其中一个

!

取反,不忽略某些内容

例子:

符号

说明

*.a

忽略所有.a文件

!world.a

不忽略world.a文件

/tests

忽略tests目录中的所有内容,但是子目录中的tests文件夹不忽略

build/

忽略所有build目录

build/*.txt

忽略build目录下的.txt文件,但是对于类似build/server/test.txt文件不忽略

远程Git操作

 

Remote branch

————————————

每一个remote branch都会在本地表现为一个不可改变的静态branch,使用git branch -a可以看到,红色的就是remote branch。

不能够对这些branch进行改动,但是可以创建一个这些remote branch的tracking branch,如果注册了多个远程版本库,必须显

式的创建的本地跟踪分支。

git checkout -b b1 origin/b1

or

git checkout --track origin/b1

这时候,创建出来的local branch 就会被git看作是对应的remote branch的tracking branch。在执行git push的时候,local

branch的内容就会自动被push到它的tracking branch——必须是同名分支才可以省略,否则只能显示推送,格式:git push

远程版本库名 本地分支名:远程分支名

缺省的master就是origin/master的tracking branch。

本地的branch只能够通过向remote branch推送(push)数据的方式来和remote branch交互。如果想创建一个remote branch,就

需要创建一个branch,然后推送到服务器上——这里要注意跟上面的红字部分区分,如果想将一个远程分支在本地的非同名分支

的更新推送到它的远程分支上,必须严格遵守以上格式,如果省略了远程分支名,就变成了向远程服务器推送了一个新的分支。

git branch b2

git push origin b2

这两条命令创建一个本地branch b2,然后将它增加到remote branch。这时候运行 git branch -a,能看到有了一个新的remote

branch。

增加remote

git remote add remotename remote-url

【GIT进阶篇】-1-Repo命令

 

·    Repo是一个Google为了统一管理Android项目多个Git仓库而开发Python脚本,整合了将开发者提交的代码上传到Gerrit在线审核系统的命令,使得一些Android开发工作流中的工作变得自动化。

  Repo的常用命令都有哪些?

   repo init

说明:初始化repo仓库

参数:   -u:manifest清单库地址

-b: manifest清单库分支

-m:manifest.xml文件,不指定默认为default.xml

--repo-url:repo库地址

示例:repo init -u ssh://10.107.123.183/evergreen/manifest.git -b ever-master --repo-url=ssh://10.107.123.183/repo.git --no-repo-verify --repo-branch=stable

   repo sync

说明:下载同步版本库内容

参数: 不加参数的repo sync命令会把整个版本库同步到本地;

可以用类似 repo sync project1 project2 … 这样的命令来同步某几个项目(初次init后不可使用);

   repo start [分支名]

说明:创建本地分支(基于manifest文件中所指定的分支),同时只有start出来的分支上的修改才能提交到gerrit服务器

参数:--all:为所有的git库创建分支(推荐)

可以用类似 repo start 分支名 project1 project2 … 这样的命令来为某几个项目创建分支

   repo checkout [分支名]

说明:将本地所有的git库切换到某条分支上,该分支一定是start出来的分支,在同步前常使用本命令保证本地库都在同一分支上

   repo forall

说明:循环所有的git库执行一条git命令

参数:-c:必须,后面跟git命令

-p:可选,在输出命令结果前附上项目名,同时以less的分页形式显示

示例:repo forall -p -c "git log --sine='24 hours'" 检查所有库过去24小时的修改

   repo upload

说明:将本地start分支上的提交,上传到gerrit服务器上,每一个commit都是一个评审任务,如有多个库的提交,则需要编辑配置文件,去掉要上传的对象库前的注释符号#,保存即可

   repo download [项目名] [change]

说明:从Gerrit服务器下载指定的change,并反映在本地工作目录中。

示例:repo download platform/frameworks/base 1241  下载1241号修改

   repo help [命令名]

说明:显示repo命令的帮助信息

【GIT进阶篇】-2-Repo和Gerrit协作流程

 

Step 1. $ repo init

 

初始化repo使用repo init命令;

Tip.完成后会提示确认用户名密码是否正确,如果已经是域账号以及notesmail形式可以直接回车跳过,完成初始化;

Step 2. $ repo sync

同步服务器上代码;

Step 3$ repo start xx --all

批量新建分支。

Tip.要保证下载代码后第一个操作就是建立start分支,将需要上传的改动合入该分支,本地则可以根据需要建立私有分支,用于测试等操作;

Step 4进入相应的git库合入问题单或进行特性开发,使用git add,git commit等命令完成对本地库的提交;

Step 5$ repo sync

在完成一个问题单的合入,或者一个特性的开发之后,准备将改动上传到gerrit服务器进行代码评审时,首先要使用sync命令同步服务器的最新代码,本地解决冲突;

Step 6$ repo upload

提交本地修改到gerrit服务器,开发中的所有提交都要通过这个命令来进行;

如有多个库需要修改,会弹出文本编辑界面,取消要上传部分前面的注释符号‘#’,保存退出即可;

Step 7$ git commit --amend [–C HEAD]

当提交被拒绝时我们需要修改代码重新提交。在commit时我们需要使用以上命令;

--amend表示修改上次commit,不改变change-id,即在gerrit上原有change中添加一个新的patch-set,-C HEAD表示复用上一次提交的注释;

Step 8. $ git rebase --continue

当使用repo sync同步出现冲突中断时,首先进入冲突库,编辑冲突文件,然后使用git add 文件名添加到暂存区,git rebase --continue继续同步当前库,然后使用repo sync重新同步其他git库。

GIT基本操作指南搜集相关推荐

  1. git status怎么操作_新手 git 简明操作指南

    在工作中,我们可能需要采用 git 作为版本控制工具.所以对 git 的基本操作需要非常熟练,以至于我们能够应付工作上的需求.当然这里推荐一篇博文廖雪峰的git教程,有更详细的介绍.我这里对git的一 ...

  2. git基本命令操作指南

    克隆及提交 clone到本地 git clone address:address为需要clone的地址 git clone https://gitee.com/dromara/hutool.git g ...

  3. eclipse查看git地址_Git大文件管理:函数计算和OSS支持的Git LFS服务器

    此服务器支持Batch API和File Locking API.项目地址与文档: https://github.com/zhxxch/git-lfs-one/​github.com LFS 是个好东 ...

  4. Git LFS笔记(文档、博客、issue摘录)

    Git LFS 文章目录 Git LFS 1. What is Git LFS? 1.1 Creating a new Git LFS repository 1.2 Cloning an existi ...

  5. 读《MacTalk#183;人生元编程》及Mac经常使用软件

    引子 池建强的Blog:http://www.cnblogs.com/chijianqiang/ 用了1年多的黑苹果,是用Windows的思维用UI.用Linux的思维用Shell,折腾的是联想E49 ...

  6. 读《MacTalk·人生元编程》及Mac常用软件

    引子 池建强的Blog:http://www.cnblogs.com/chijianqiang/ 用了1年多的黑苹果,是用Windows的思维用UI,用Linux的思维用Shell,折腾的是联想E49 ...

  7. 2021前端面经-看这篇就够了(笔者靠这个拿到阿里和字节的offer)

    面试题梳理 梳理前端常见面试题及答案. 一.web 前端性能优化 性能评级工具(PageSpeed 或 YSlow) css CSS优化.提高性能的方法有哪些 多个css合并,尽量减少HTTP请求 将 ...

  8. 前端面经 - 看这篇就够了(笔者靠这个拿到阿里和字节的offer)

    转载自:alanyf https://juejin.cn/post/6948227795059212318 面试题梳理 梳理前端常见面试题及答案. 一.web 前端性能优化 性能评级工具(PageSp ...

  9. [git] 小乌龟工具TortoiseGit记住账号密码 ——简单版操作指南

    如何让小乌龟 记住用户名和密码的操作指南 问题描述 步骤1 步骤2 问题描述 在小乌龟的使用过程中,每次push或者pull都要重复输入账号密码,非常麻烦. 如果能记住账号密码就好了,这样就省去了时间 ...

最新文章

  1. sqlalchemy mysql配置中怎么设置utf8_sqlalchemy 的设置及使用
  2. Binder通信机制介绍
  3. iOS 事件传递响应链
  4. 使用自定义RadioButton和ViewPager实现TabHost效果和带滑动的页卡效果。
  5. Java中的binarySearch方法
  6. 修改jquery文件上传插件uploadify的英文为中文
  7. Django多表查询练习题
  8. mac os x 10.8 安装python-mysqldb
  9. 群赛 ZOJ3741(dp) ZOJ3911(线段树)
  10. 关于反射程序集的心得
  11. 假期作业python
  12. linux运维搭建官网,Linux运维学习之LAMP搭建个人博客网站
  13. oracle database link
  14. C#,VB.NET如何将Word转换为PDF和Text
  15. IDEA中SVN项目不同颜色含义
  16. Java多位数字强可读性写法(数字中间添加下划线分开)
  17. 前端工具之WebStorm安装破解和汉化
  18. 山西大学计算机科学与技术考研难吗,2021年山西大学计算机科学与技术(081200)考研专业目录_硕士研究生考试范围 - 学途吧...
  19. css3弹性盒模型兼容性,彻底弄懂css3的flex弹性盒模型
  20. ASP - 接收Post Json

热门文章

  1. 程序员六个赚外快的方法(建议收藏)
  2. 通证经济全国首次峰会隆重举行
  3. 安装了xp和vista两个版本后,删除vista系统
  4. jquery 验证Email邮箱格式的几个例子
  5. jquery验证手机号码、邮箱格式是否正确
  6. 网络工程师招聘笔试题汇总一
  7. 解决centos8下安装docker提示“为 repo ‘docker-ce-stable‘ 下载元数据失败“的问题
  8. 趣解ospf网络类型
  9. 双网卡访问外网和学校内网
  10. 2020年6月4日21点55分