git操作详解

前言:一般公司git的master主干与线上代码保持一致,在使用git的时候,偶尔会发生一些莫名其妙的事情,很容易导致运营事故。so~ 总结一下经常使用的git命令以及git的一些小坑,方便日后查阅

日常开发中Git的一般使用步骤:

1. 位于master分支下,先同步为最新代码

2. 创建并切换到新的本地分支下处理新特性abc

3. 新特性abc处理完成,假设需要交接给同事b处理,那么推送本地分支为远程分支.

如果你时间紧急,可以直接使用下面的命令

【小技巧:分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。】



如果你有时间,可以看一下下面的坑出没

1.git add . or [git add -A] 这2个命令的作用是什么? 【注意:这2个命令在git版本不同的时候,作用不同】

在git 1.x 的时候,git add . 只会提交有修改的文件和新增的文件,git add -A 会提交所有修改的文件(包括被删除的文件)

在git 2.x 的时候,git add . 和git add -A 作用相同, 会提交所有修改的文件(包括被删除的文件)

也就是说,假如你的git版本是在1.x的时候,git add . 命令不会提交已删除的文件,在git 2.x 的时候,这2个命令都是提交被修改了的文件。

【友好提示:如果你当前git版本低于2.0,赶紧升级到2.0以上吧】

2. 推送本地分支到远程服务器,使用git push 是什么效果?

[如果你不了解下面的配置,后续直接在分支上直接使用 git push 是一个风险很高的行为。]

git版本的不同,或者被改变了git的全局配置config文件里面的push.default属性的时候,会使git push操作的默认行为不同

查看自己当前git版本的配置,在命令行中输入

vim ~/.gitconfig

可以看到push.default属性 在git 2.0之前,这个属性的默认被设为‘matching‘,2.0之后则被更改为了‘simple‘。

push.default 有以下几个可选值: nothing, current, upstream, simple, matching 其用途分别为:

● nothing - push操作无效,除非显式指定远程分支,例如git push origin develop

● current - push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支。

● upstream - push当前分支到它的upstream分支上

● simple - simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程upstream分支同名,否则会拒绝push操作。

● matching - push所有本地和远程两端都存在的同名分支。

注意 push.default = current可以在远程同名分支不存在的情况下自动创建同名分支,有些时候这也是个极其方便的模式,比如初次push你可以直接输入 git push 而不必显示指定远程分支。


4. 同事b处理完成后也推送同步到git服务器,此时我需要拉取同步远程分支feature_abc进行发布

git checkout feature_abc //切换到feature_abc分支下
git pull  //同步远程分支内容

[可能你会偶尔看到下面的提示]

There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> new1

对git来说,git pull = git fetch + git merge,如果我们没有设定当前分支关联的远程分支,它并不知道我们要合并哪个分支到当前分支,所以我们需要通过下面的代码指定当前分支的关联分支

git branch --set-upstream 当前分支 origin/远程分支   //这里的远程分支则根据场景选填主干master或者远程特性分支

5. 合并分支代码到主干

git checkout master // 切换到主干
git merge feature_abc --no-ff -m "pu:发布feature_abc新特性" // 合并代码到主干
git push //推送主干最新代码到git服务器,有冲突时解决冲突再push  

6. 删除该特性分支

git branch   //查看本地分支
git branch -a    //查看所有的分支,包括远程的
git branch -d feature_abc     //删除本地的某个分支
git branch -r -d origin/feature_abc    //删除本地的远程追踪分支【非删除远程分支】
git push origin :feature_abc   // 【注意 :前后】,删除远程库对应feature_abc分支

额外场景:

1. 当你在主分支误改了代码,该如何优雅的处理呢?

1.1 还未添加到暂存区/已添加到暂存区还未提交

这种情况比较好办,直接git checkout -b new_branch,这样你的改动会被带到新分支。然后把主分支的修改用git checkout --给恢复就行了。

另一种方法是先git stash,然后git checkout new_branch,再新分支git stash pop即可。这种方式最好理解,就是把改动先放到一个临时区域,让git先别管,到了正确的分支再拿出来。我经常用的就是这招。

2.2 已提交到本地仓库

这种情况就要有reset了,用git reset HEAD^撤销最近一次提交,如果有多次提交的话,查找到对应提交id进行reset就行。git默认的是mixed模式,即撤销暂存区,保留工作区。这样你再切分支也还能把改动带过去。当然加--soft也可以,这样能保留暂存区和工作区。

2.3已push到远程仓库

如果很不幸你已经把误修改给push了,你需要用到revert命令,先用git log查找到你误提交的commitId,然后git revert commitId,产生一次逆向提交,来对冲掉之前的。之后再push到远程就可以了。

时间: 2024-10-16 06:03:33

git操作详解的相关文章

【Git使用详解】Egit的常用操作详解

常用操作 操作 说明 Fetch 从远程获取最新版本到本地,不会自动merge Merge 可以把一个分支标签或某个commit的修改合并现在的分支上 Pull 从远程获取最新版本并merge到本地相当于fetch+merge Push 将本地分支的更新,推送到远程主机 Merge tool 当你的代码产生了冲突可以通过此工具快速的对比 Switch to 将当前分支切换到其它分支或标签 Commit 将更改提交到本地库中 Rebase 可以把在一个分支里提交的改变移到另一个分支里重放一遍 Re

【Git】Git远程操作详解

Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Git远程操作. git clone git remote git fetch git pull git push 本文针对初级用户,从最简单的讲起,但是需要读者对Git的基本用法有所了解.同时,本文覆盖了上面5个命令的几乎所有的常用用法,所以对于熟练用户也有参考价值. 一.git clone 远程操作

[转]Git远程操作详解

Git 是目前最流行的版本管理系统,学会 Git 几乎成了开发者的必备技能. Git 有很多优势,其中之一就是远程操作非常简便.本文详细介绍 5 个 Git 命令,它们的概念和用法,理解了这些内容,你就会完全掌握 Git 远程操作. git clone git remote git fetch git pull git push 本文针对初级用户,从最简单的讲起,但是需要读者对 Git 的基本用法有所了解.同时,本文覆盖了上面 5 个命令的几乎所有的常用用法,所以对于熟练用户也有参考价值. 一.

Git应用详解第二讲:Git删除、修改、撤销操作

前言 前情提要:Git应用详解第一讲:Git分区,配置与日志 在第一讲中我们对Git进行了简单的入门介绍,相信聪明的你已经了解Git的基本使用了. 这一讲我们来进一步深入学习Git应用,着重介绍Git的一些常见操作,包括:删除文件.比较文件.撤销修改.修改注释与查看帮助文档. 一.删除文件 1.git rm <file> 该命令用于删除版本库中的文件:删除工作区和暂存区中的文件都会报错: 若用该指令删除工作区中的文件,会报找不到文件的错误: 若用该指令删除暂存区中的文件,报如下错误: 所谓版本

Git应用详解第三讲:本地分支的重要操作

前言 前情提要:Git应用详解第二讲:Git删除.修改.撤销操作 分支是git最核心的操作之一,了解分支的基本操作能够大大提高项目开发的效率.这一讲就来介绍一些分支的常见操作及其基本原理. 一.分支概述 在开发当中,往往需要分工合作.比如:小红开发A功能,小明开发B功能,小刚开发C功能.如何才能做到三者并行开发呢?git为我们提供的分支功能就能实现这一需求,如下图所示: 在实际的开发过程中,master分支是用来发布项目稳定版本的.新的功能往往是在一个新建的分支上进行开发,等到新功能开发完毕并经

Git命令详解(一)-个人使用

原文  http://blog.csdn.net/magicharvey/article/details/12431867 本文暂时不会涉及到团队如何使用Git的内容,而是从个人的角度探讨如何用好Git. 约定 绿色的5位字符表示提交的ID,分别指向父节点.分支用橘色显示,分别指向特定的提交.当前分支由附在其上的标识. 这张图片里显示最后5次提交,是最新提交.分支指向此次提交,另一个分支指向祖父提交节点. git cat-file git cat-file -t,查看Git对象的类型,主要的gi

【Git使用详解】EGit使用详解

此系列文章写给那些打算使用Git或正在使用Git,但对Git还不是很理解的程序猿们,希望能帮助大家在学习和使用Git的过程中少走弯路,并以最少的时间和代价来熟悉Git,让Git能够辅助更多的开发者提高开发效率. Ps.使用Git已经很久了,回想当初使用Git的时候可谓是雾里看花,懵懵懂懂,没少犯错误,但我从未畏惧过错误,每一次错误的解决都是对我技术的提升和经验的积累. 下面是此系列文章的目录: [Git使用详解]Egit插件的安装图解 [Git使用详解]使用Egit克隆项目到本地图解 [Git使

【Git使用详解】Egit插件的安装图解

Egit插件安装主要有在线和离线两种方式,下面就分别讲解一下两种方式的具体步骤. 一.在线安装 1.打开Eclipse的Help>Install New SoftWare 如图: 2.在弹出的界面中的Work with:中输入如下网址:http://download.eclipse.org/egit/updates然后等待资源的加载. 在加载出的软件列表中选择Eclipse Git Team Provider. 如图: 3.然后Next>Finish. 如图:   4.等待插件安装完成,重启E

【Git使用详解】Egit使用过程中遇到的问题及解决办法

1.   Git错误non-fast-forward后的冲突解决 问题(Non-fast-forward)的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去.于是你有2个选择方式: 1.强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容 git push –f 如果你用的是Egit则可以在推送界面选择"Force Update All Specs"即可,如下图: 2.先把git的东西fetch到你本地然后merge后再push $ git fet