文档章节

Git的使用

z
 zhouyc
发布于 2015/07/25 08:32
字数 1728
阅读 194
收藏 8

廖雪峰的博客

Git基础

为什么是用git

离线工作,比如在客户现场修正的代码,能够进行本地版本管理,然后合并到中央共享repository中

优秀的分支管理,特别有利于变更比较多的场合,或者新机能比较多的情况。

可以把当前的作业暂存,进行bug的修正,然后取出暂存内容继续工作(工作进度保存)

速度快,创建分支,提交代码,checkout代码等

查看某处提交的文件列表

先确定提交的Hash值

git log -s

确定出要查询的提交的ID和前一次提交的id,执行diff命令查看提交的文件

git diff --name-only   beforeid..queryid

查询最近一次提交的文件内容

git diff --name-only  commit_id..HEAD

查看删除的文件(added:A,Copied:C,Deleted:D,Modified:M,Renamed:R)

git diff --name-only --diff-filter=D v3.1.0.201310021548-r..HEAD


添加文件到stage

git add -u     将所有修改过的文件添加到stage,批量添加

git add -A    把所有修改过的,新追加的,删除的都添加到Stage

git ssh url:

git clone gituser@192.168.0.103:reponame.git


使用Git之前,先配置以下两个内容

git config --global user.name "username"

git config --global user.email "email"

git config --global color.ui true

git log

git log --graph --pretty=oneline --abbrev-commit


撤销修改的方式

1)撤销工作目录中的内容,就是放弃自上次add到staging以后,在工作目录下修改的内容。

可以使用git checkout和git reset命令实现。

checkout的实现方式(单个文件?)

1)用stage中的内容覆盖工作区中的内容

git checkout -- a.txt    

(注意:如果stage中有a.txt,则用stage中的文件覆盖工作区中的文件,否则用history中的内容覆盖,优先级)

2)用history中的内容覆盖工作区中的内容(同时,stage中的内容也会被覆盖,保持一致,递归更新)

git checkout HEAD a.txt


git reset的实现方式 (方便的方式只有一种)

1)用history中的内容覆盖工作区中的内容,stage中的内容也会被清空,3个地方保持一致[被跟踪文件]

    git reset --hard HEAD   

     如果要保存工作区和history中的内容完全一致,执行git clean -f

总结:

    保持working,stage,history中一致的方法

    1)git checkout HEAD a.txt

     2) git reset --hard HEAD a.txt


用history中的内容覆盖Stage中的内容,不影响工作区的内容

git reset  HEAD files 


撤销提交的内容?

有两种方式,git reset和git revert

1)git reset HEAD~1   (把HEAD指针指向前次的提交,放弃当前的提交,尽量不要在public repository使用,会导致不一致)

2)git revert <commit-id> ,其中commit-id就是要被放弃的commit-id

3)修改提交的内容

     git commit -amend


git的branch操作

查看分支:git branch

创建分支:git branch <name>

基于某个commit上创建分支:git branch <name> <commit_id>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

git checkout -b <name> <commit_id>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

git branch  显示当前repository中的分支列表

创建新的分支并切换到dev分支

git branch dev

git checkout dev

两命令等价下面的一个命令

git checkout -b dev

删除分支

git branch -d  <name>

git branch -D <name>  [强制删除]

Checkout分支

git checkout <branch>

技巧方法:

一次添加多个文件到stage,然后排出个别文件

git add *.java

git reset HEAD rm.java

git diff:是查看working tree与index file的差别的。 git diff --cached:是查看index file与commit的差别的。 git diff HEAD:是查看working tree和commit的差别的


添加远程仓库

列举当前本地repository关联的远程repository

git remote -v

git branch -r

添加远程repository

git remote add origin git@github.com:youraccount/reposigory.git

删除对远程仓库的引用

git remote rm origin

获取远程仓库的master分支的内容(origin代表远程仓库,master代表获取的分支

git pull origin master  (先更新,再推送)

git push -u origin master


在本地创建dev分支,并关联远程dev分支(或创建?)

如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。


$ git push origin test:test           // 提交本地test分支作为远程的test分支
(test:test左边的为本地分支,右边为远程分支)
$ git branch --set-upstream-to=origin/test  //本地分支和远程分支进行关联处理

如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。

$ git push origin :test              // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
git checkout -b dev origin/dev
git branch --set-upstream-to=origin/dev

获取远程仓库的特定分支(本地已经有别的分支,但没有服务器上的分支,不会覆盖本地的其他分支)
git fetch origin uat
git checkout uat


在工作区中的文件,如果初始时未加入到任何一个分支中,则到在某个分支中提交后,则另外的分支中就看不到这个文件了。如果有未提交的文件(包括stage),则未提交的内容在各个分支的状态保持一致


在一个分支上保留当前的工作,切换到其他的分支进行作业,作业完后,返回当前分支,取出缓存的工作,继续。。

1)在dev分支上开发,暂存dev的working,stage中的内容。

git stash

2)切换到master分支,创建but修复分支,修复bug,合并到master

git checkout master

git checkout -b fix101

git checkout master

git merge --no-ff  -m 'fix bug 101' fix101

3)切换到dev分支,取出缓存的作用,继续后面的工作

git checkout dev

git stash pop

git stash list

备注:引用了廖老大的内容,主要是为了自己使用时能集中参考

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name


git标签

  • 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

  • git tag -a <tagname> -m "blablabla..."可以指定标签信息;

  • git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;

  • 命令git tag可以查看所有标签。



© 著作权归作者所有

共有 人打赏支持
z
粉丝 2
博文 50
码字总数 15358
作品 0
大连
私信 提问
git文章列表

关于gitlab默认clone协议 Git实现从本地添加项目到远程仓库 翻翻git之---一个简单的标签控件 LabelView (随手发了两张小宝宝的玩耍照) Git 项目推荐 | Java 版微信普通号机器人 翻翻git之---...

d_watson
2016/04/20
26
0
Git 教程 - Git 基本用法

Git 是当前最流行的版本控制程序之一,文本包含了 Git 的一些基本用法 创建 git 仓库 初始化 git 仓库 mkdir project # 创建项目目录 cd project # 进入到项目目录 git init # 初始化 git 仓...

floger
2011/12/27
0
0
STM32开发 -- Gerrit的详细使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29350001/article/details/87004721 一、gerrit简介 参看:维基百科 - Gerrit Gerrit,一种开放源代码的代...

聚优致成
02/11
0
0
Git、GitHub、Idea集成使用

Git环境搭建-客户端 https://git-scm.com/ 下载Git,目前最新版本是Git-2.15.0-64-bit.exe; 安装过程如下: 备注: 图标组件(Addition icons) : 选择是否创建桌面快捷方式; 桌面浏览(Window...

KCCK17
2017/11/07
0
0
项目托管至GitHub上

1、免费申请一个github帐号:www.github.com; 2、下载git 1.7.6,百度之,http://git-scm.com/(git的主页)貌似已经被墙; 3、在github首页,点击页面右下角“New Repository”,填写项目名...

boonya
2016/01/06
72
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 帝国对 Python 的渗透能成功吗?哈哈

引子 Java 帝国已经成立20多年,经过历代国王的励精图治,可以说是地大物博,码农众多。 可是国王依然不满足,整天想着如何继续开拓疆土, 这一天晚上他又把几个重臣招来商议了。 IO大臣说:...

边鹏_尛爺鑫
49分钟前
4
0
分布式事务解决方案框架(LCN)

什么是XA接口 XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口...

群星纪元
今天
6
0
linux 操作系统 常用命令和软件安装

1.系统时间更新 ntpdate time.windows.com 2.传送文件 rsync -av /home/data/a.dat -e ssh root@192.168.0.100:/home 3.传送文件夹 scp -r /home/data root@192.168.0.100:/home 4.JDK安装 ......

WJtiny
今天
2
0
pg_lightool基于basebackup的单表恢复和块恢复

开源软件pg_lightool,实现了基于wal日志的块恢复。详情参见博客:https://my.oschina.net/lcc1990/blog/1931485。由于wal日志中FPW的不确定性,它不能作为一个数据库恢复的解决方案。目前对...

movead
今天
2
0
对比剖析Swarm Kubernetes Marathon编排引擎

Docker Native Orchestration 基本结构 Docker Engine 1.12 集成了原生的编排引擎,用以替换了之前独立的Docker Swarm项目。Docker原生集群(Swarm)同时包括了(Docker Engine \/ Daemons)...

Linux就该这么学
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部