Git总结

git在本地分为三个区域,工作区、暂存区和本地仓库,具体情况如下:

git的一般操作就是本地代码的修改提交回滚,以及与远程仓库的拉取、合并、提交等。

git fetch   从远程仓库上抓取分支到本机origin的dev分支上

git merge  将origin上的分支合并到工作区的dev分支上

git pull  相当于前两个命令合在一起

#切换到master分之后,将dev分支合并到master分支

git checkout master

git merge dev

当本地仓库向远程仓库push失败的时候,先从远程仓库上fetch下最新的代码merge到本地的分支上,然后才能push 

当fetch下来的代码与本地仓库的分支代码merge时发生冲突的话,需要解决掉冲突文件中的冲突再push。冲突文件这时已经被git程序更改,标记了冲突的位置。此时可以查看git status根据提示来操作,具体的做法:

1,若想回到没有更改前,即merge前,执行git merge --abort。再进行想要的操作。

2,可以直接更改冲突文件,然后git add file 然后git commit,再push

对于工作区、暂存区、本地仓库代码的差异比较

diff  用于对比差异

git diff 默认用于比较工作区和暂存区之间的差异

git diff --cached 和git diff --staged比较暂存区和本地仓库的差异 

git diff HEAD  是工作区与本地仓库的差异

查看帮助  git merge --help 或者git help merge

对于分支相关的操作

git branch 查看所有分支

git branch -v 查看所有分支详细信息

git branch  branchname 新建分支

git branch -d branchname 删除分支

git checkout branchname  切换分支

git checkout -b branchname 创建新分支并切换到新分支

git checkout -- filename 把工作区的修改撤销,还原到修改前的暂存区的文件的内容(如果修改前已经add到暂存区),或者还原到本地仓库的文件的内容(修改前没有add到暂存区)。即把暂存区或者本地仓库的最近一次的提交检出到工作区使文件的更改撤销,让文件回到最后一次add或commit的状态。

git checkout  versionid filename  可以将工作区某个文件还原到指定版本的那个文件的内容

具体场景:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,可以分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

在Git中,用HEAD表示当前版本,也就是最新的commit的那个版本。上一个版本就是HEAD^,上上一个版本就是HEAD^^。也可以用数字HEAD~,HEAD~2

关于reset的几个参数

git reset --mixed HEAD~   将HEAD指针指向上一个版本,同时将本地仓库改变后的HEAD的指向的内容覆盖到暂存区

git reset HEAD~  同上,默认是--mixed

git reset --hard HEAD~ 将HEAD指针指向上一个版本,同时将本地仓库HEAD的指向的内容同时覆盖到暂存区和工作区

git reset --soft HEAD~  只将本地仓库的HEAD指针指向上一个版本,其他不做改变。

对于回滚来说:

reset是针对的commit级别的操作,移动HEAD指针,同时可能会影响到暂存区和工作区

checkout改变的是工作区的内容,reset改变的可能是工作区、暂存区和HEAD指针的内容

git revert versionid  来使本地仓库的内容回到指定的版本内容。与reset的不同是,如果reset要回到以前的某个版本,则HEAD指针移到指定的版本的位置,此后的commit则不显示在git log里面了。而revert则是把它当做一次commit,即把工作区的内容修改成指定版本的内容然后add和commit了。

git cherry-pick versionid  经常用于将某个分支上的某次commit合并到master上,而分支的其他commit暂时不合并。(比如修复bug的commit)

git merge和git rebase

两者最终结果相似,都是将分支合并,不过合并过程和方式不同。

上图:执行git merge master,把master分支合并到dev分支上

若是执行git rebase,就会将原来dev的两次提交d和e添加到master分支后面,变成d‘和e’。若有冲突的话,修改后使用git add 和git rebase --continue即可。过程中任何时候可以使用git rebase --abort来终止rebase操作回到原来的状态

其余还有一些命令,比如git log、git config等等,不写了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOS 开发杂谈

学习笔记之git命令行的详细使用

git仓库,你可以简单理解成一个目录,这个目录里面的所有文件都可以被git仓库管理起来,每个文件的修改、删除,git都能跟踪,以便任何时刻都可以追踪历史,或者在...

1242
来自专栏我是东东强

Git工作区、版本库与暂存区

Git与其它版本控制系统如SVN的一个最大的不同之处就是发明了暂存区的概念,本文从创建Git版本库开始,依次描述了追踪文件、修改文件、丢弃修改、提交修改等基本G...

1172
来自专栏腾讯DevOps

Git 的一些事

假设远程分支上有2个提交,然后基于远程develop,再创建一个分支feature。

10.8K2
来自专栏Java成神之路

Git_学习_01_ 常用 Git 命令清单

一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。

1032
来自专栏吴老师移动开发

【iOS开发】Cocoapods详解-使用及创建私有库

CocoaPods现在是通过target来组织的,如果项目有多个target,可以写多个target为每个target引入不同的第三方库。 写法:

1095
来自专栏郭耀华‘s Blog

Git版本回退和撤销修改的区别

在阅读廖雪峰git教程时,对版本回退和暂存区撤销修改没太看懂,所以自己测试了一下。 版本回退: git reset --hard HEAD        这个命...

3167
来自专栏iOS 开发杂谈

git 奇技淫巧

和 revert 的区别:reset 命令会抹去某个 commit id 之后的所有 commit

1171
来自专栏人人都是极客

Git与Repo快速入门

版本控制 版本控制是什么已不用在说了,就是记录我们对文件、目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作。 一、原始版本控制 最原始...

33810
来自专栏散尽浮华

大话Git

Git是什么 Git是一个分布式版本控制系统。它可以很方便的记录你的每一次变动,而不需要每次都备份,还能让你和他人很方便的协同开发。这样你每次做了什么改动,瞄一...

2656
来自专栏阮一峰的网络日志

常用 Git 命令清单

我每天使用 Git ,但是很多命令记不住。 一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。 ? 下面是我整理的常...

2925

扫码关注云+社区

领取腾讯云代金券