如果该文件有暂存的版本,则恢复该版本,否则恢复上一次提交的版本。...,同时会产生一次revert commit记录。...git revert命令还有两个参数: --no-edit:执行时不打开默认编辑器,直接使用 Git 自动生成的提交信息。 --no-commit:只抵消暂存区和工作区的文件变化,不产生新的提交。...,第二步使用下面的命令,让Cherry pick过程继续执行: git cherry-pick --continue 当然也可以在发生代码冲突后,放弃合并,回到操作前的样子,执行命令: git cherry-pick...朋友们点【在看】是我持续更新的最大动力!
下方就来看一下如何在git上移动分支指针,下方左边是我们要完成的目标,右边是分支的初始化状态。需要做的事情如下: 将 bugFix 分支移动到C0上。...接下来我来看一下对 reset 后的分支进行push, 以及对 revert 分支后进行push。...3、交互式rebase实践 接下来我们来看一下在真正的git分支上是如何使用交互式rebase操作的。下方是做交互式rebase操作之前的分支关系。目前所在的分支是bugFix, 其中有4个提交。...点击回车键的话会弹出下方的vim编辑器来让你修改 f53560c 这个操作的commit message,修改完毕后进行保存即可。 ? 下方是在rebase合并时产生了冲突,我们需要对冲突进行解决。...解决完毕后,执行 git add 将冲突文件进行存储,并且执行git rebase --continue 来继续我们的rebase操作。 ?
git merge --abort //合并后导致冲突时才使用,撤销合并过程中的操作回到初始状态; 一个分支的个别提交合并到另一个分支 应用场景:在一个分支上做了修改commit , 结果发现本次修改也适用于其他分支...、或者bug修复;此时可以把本次提交单独合并到目标分支去,而不是执行git merge 合并; 也可以一次合并多个提交 git cherry-pick id1 id2 遇到冲突后,解决git add...git cherry-pick --continue git cherry-pick --abort//发生代码冲突后,放弃合并,回到操作前的样子; 变基 rebase 如下场景 分支1 、分支2...最后合并的结果,不在是时间顺序排。 此过程可能会出现冲突,解决相应的冲突,执行git add . ,此时不需要commit。然后继续 > git add ....我的本地暂存示例 撤销回滚 首先明确一点,根据工作区所处的不同状态,撤销的方式不同; git撤销操作主要有三种方式: git reset --soft 不删除工作空间的改动代码 ,撤销commit
可以看到 commitHash 和之前的不一样,但是提交时间还是保留之前的。 复制多个 以上是单个 commit 的复制,下面再来看看 cherry-pick 多个 commit 要如何操作。...cherry-pick 代码冲突 在cherry-pick多个commit时,可能会遇到代码冲突,这时cherry-pick会停下来,让用户决定如何继续操作。下面看看怎么解决这种场景。...可以看到 c 被成功复制,当进行到 d 时,发现代码冲突,cherry-pick中断了。这时需要解决代码冲突,重新提交到暂存区。...以上是完整的流程,但有时候可能需要在代码冲突后,放弃或者退出流程: 放弃 cherry-pick: git cherry-pick --abort 回到操作前的样子,就像什么都没发生过。...此选项指定主线的父编号(从1开始),并允许 revert 反转相对于指定父编号的更改 我的理解是因为合并提交是两条分支的交集节点,而 git 不知道需要撤销的哪一条分支,需要添加参数 -m 指定主线分支
提交时发生冲突,你能解释冲突是如何产生的吗?你是如何解决的? 开发过程中,我们都有自己的特性分支,所以冲突发生的并不多,但也碰到过。...诸如公共类的公共方法,我和别人同时修改同一个文件,他提交后我再提交就会报冲突的错误。...如果本次提交误操作,如何撤销?...如何查看分支提交的历史记录?查看某个文件的历史记录呢?...我们在本地工程常会修改一些配置文件,这些文件不需要被提交,而我们又不想每次执行git status时都让这些文件显示出来,我们该如何操作?
本文首发于政采云前端团队博客:我在工作中是如何使用 Git 的 https://www.zoo.team/article/how-to-use-git image.png 前言 最近在网上有个真实发生的案例比较火...如今,你看到的大部分服务器其实都是运行在 Linux 系统上,令人感到称叹的是,这位大神级别的程序员不仅创造了 Linux 系统。那 Linux 的代码是如何管理的呢?...Git 的工作区域和流程 要想弄懂 Git 是怎么对我们的代码进行管理的,那首当其冲的是了解 Git 的工作区域是如何构成的。...所以,我们的提交记录就会非常清晰,没有分叉,上面演示的是比较顺利的情况,但是大部分情况下,rebase 的过程中会产生冲突的,此时,就需要手动解决冲突,然后使用依次 git add 、git rebase...现在,依次执行以下两条指令 git cherry-pick e0bb7f3、git cherry-pick c9a3101,过程中,如果出现冲突,解决冲突后 进行 git add,接着执行 git cherry-pick
sash 命令能够将还未 commit 的代码存起来,让你的目录变得干净。应用场景:为什么要变得干净呢?...cherry-pick 代码冲突:在 cherry-pick 多个 commit, 可能会遇到代码冲突,这时 cherry-pick 会停下来,让用户决定如何继续操作,下面看看怎么解决这种场景。...切到 master 分支,使用区间的 cherry-pick。 可以看到 c 被复制成功,当进行到 d 时,发现代码冲突, cherry-pick 中断了,这时需要解决代码冲突,重新提交到暂存区。...以上是完整的流程,但有时候可能需要在代码冲突后,放弃或者退出流程:放弃 cherry-pick:回到操作前的样子,就像什么都没发生过。...,而 git 不知道需要撤销的哪一条分支,需要添加参数 -m 指定主线分支,保留主线分支的代码,另一条则被撤销。
该命令将保存本地修改,并恢复工作目录以匹配头部提交。 stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。 应用场景 我猜你心里一定在想:为什么要变干净?...cherry-pick 代码冲突 在cherry-pick多个commit时,可能会遇到代码冲突,这时cherry-pick会停下来,让用户决定如何继续操作。下面看看怎么解决这种场景。...可以看到 c 被成功复制,当进行到 d 时,发现代码冲突,cherry-pick中断了。这时需要解决代码冲突,重新提交到暂存区。...以上是完整的流程,但有时候可能需要在代码冲突后,放弃或者退出流程: 放弃 cherry-pick: git cherry-pick --abort 回到操作前的样子,就像什么都没发生过。...此选项指定主线的父编号(从1开始),并允许 revert 反转相对于指定父编号的更改 我的理解是因为合并提交是两条分支的交集节点,而 git 不知道需要撤销的哪一条分支,需要添加参数 -m 指定主线分支
,且push到了远程仓库 虽然我遇到的是第一种情况,那么当我解决这个问题之后,我很自然的就会想:如果遇到了另外两种情况我该怎么处理呢?...这样我们就相当于把修改的内容从一个分支移动到了另一个分支,是不是很简单呢。 上面那两个命令也是我解决这个问题中使用的命令。...这样就可以把之前保留的快照内容应用到当前的版本中了,在应用快照的过程中可能会产生冲突,这时候需要手动把冲突的内容处理一下,然后再次提交就可以了。...上面的内容主要是在我们新开发的功能还没有提交的情况下所做的一些处理,当我们开发的新功能已经在本地提交了的情况下,我们该如何处理呢?接下来我们就来探讨一下这个问题。...我们还有另外一个方法也能够将已提交到当前分支的功能添加到另一个分支上,那就是使用git cherry-pick命令。
3、git开发流程 同2一样git只是一种工具,他并没有什么工作流程。日常开发中我们为了更好的协作产生了一些git开发流程规范。这种规范或者风格叫git workflow。...git是基于分支管理的,默认分支就Master分支,争对于分支我们可以做那些操作呢?...为了记忆错乱避免混乱,我通常不用改操作,因为对于撤销完全可以用reset和restore,而对于分支切换可以用switch,他们从语义上来说更贴切。所以这个操作你可以不用,我也难得记!...以上这些就是操作某一个分支的基本命令,我们说了git是分支管理,那么多个分支呢。接下来我们就介绍一些多分支之间操作的命令。...# 把newbranch分支变基到master分支 git rebase newbranch git cherry-pick 当我们要合并某个分支上的特定提交版本,我们可以使用git cherry-pick
bugFix 在 git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。...整理提交记录 开发人员有时会说“我想要把这个提交放到这里, 那个提交放到刚才那个提交的后面”, 而接下来就讲的就是它的实现方式 cherry-pick 如果你想将一些提交复制到当前所在的位置 (HEAD...在远程仓库被修改且与你的本地工作有冲突的情况下, git push 就不知道该如何操作了。这种情况 (历史偏离) 有许多的不确定性,Git 是不会允许你 push 变更的。...git revert --abort # 结束撤销任务,恢复到撤销前的状态 git rm path # 演示如何撤销 rm 动作 git...Git 的 revert 命令撤销多次提交 [7]. git撤销merge,彻底学会git revert的用法 [8]. Git 如何优雅地回退代码,用 reset 还是 revert?
多个父提交:当有多个父提交记录的时候,该如何移动HEAD呢?...git merge merge产生一个特殊的提交记录,它包含两个唯一父提交,有两个父提交的提交记录本质上指 “我想把这两个父提交本身及它们的父提交集合都包含进来”。...解析:git rebase [branch]操作也是用来合并分支,但是合并时并不产生新的提交记录,而是复制那个分支下的所有提交记录加入到当前的分支下面,同样地,该操作不改变当前分支。...2> 解析:git cherry-pick方便我们选择所需的提交记录加入到某个分支下,使用git rebase -i启动rebase的交互模式也可以完成该任务,它甚至可以对提交记录进行排序...下图执行了git cherry-pick C2 C4,从图中可以看出该命令并没有去合并分支。 ?
使用 merge 合并,如果有冲突,会产生分叉;dev-* 分支多而杂,直接 merge 到 develop 会产生错综复杂的分叉,难以理清提交进度。...而 cherry-pick 只将需要的 commit 合并到 develop 分支上,且不会产生分叉,使 git 提交图谱(git graph)永远保持一条直线。...git reset --hard cc7b5be 上面的命令,commitId 是如何获取的?...也就是说,如果你的项目中有未提交的代码,使用该参数会直接删除掉,不可恢复,慎重啊!...如果你对 git 原理和命令行不是非常熟悉,切记不要用这个参数。 那撤回上一个版本的代码,怎么同步到远程更安全呢?
:执行shell命令(缩写:x) drop:我要丢弃该commit(缩写:d) # 一般使用如下方式将后面提交都合并到第一个提交上。...,方便以后查到这个提交是如何产生的。 -s,--signoff #在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。...处理冲突 # 用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。...git cherry-pick --continue # 发生代码冲突后,放弃合并,回到操作前的样子。...git cherry-pick --abort 发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。
(注意,不能修改master上已有的commit记录;由于重写了分支记录,推到远程分支必须push -f覆盖远程) Question3 如何优雅合并主干,遇到冲突如何处理。...feature/something // 用非fast-forward进行合并,这样git网络比较清晰 这里使用pull --rebase而不是pull的原因是因为,如果直接使用pull有可能产生多余多余的...次) Todo 查看 revert 一些回滚某几个分支的做法 Or git rebase -I xxx 撤销某一个文件的修改,还没有 add 的 git checkout [file] 撤销某一个文件的...add git reset HEAD [file] Cherry-pick 将 feature 分支的某个提交合进 develop。...sha 值是不一样的git checkout develop`` git log feature git cherry-pick
那 Git 相比于 svn 有什么优势呢?...通常会根据功能或版本建立不同的分支。 那分支有什么用呢?...同时 Git 也提供了撤销工作区和暂存区命令 撤销工作区改动: git checkout -- 文件名 清空暂存区: git reset HEAD 文件名 提交: 将改动文件加入到暂存区后就可以进行提交了...,命令行如下: git rebase 分支名/节点哈希值 与 merge 不同的是 rebase 合并看起来不会产生新的节点(实际上是会产生的,只是做了一次复制),而是将需要合并的节点直接累加,如下图...git checkout 分支名~N 将 HEAD 分离出来指向节点有什么用呢?
针对这些问题,今天我就将这几年对Git的认知和理解分享出来,尽可能的从本质去讲解Git,帮助你一步一步去了解Git的底层原理,相信读完本篇文章你便可以换种姿态,更加风骚得使用Git各种指令。...代表就是Git 那Git相比于svn有什么优势呢?...通常会根据功能或版本建立不同的分支。 那分支有什么用呢?...同时Git也提供了撤销工作区和暂存区命令 撤销工作区改动: git checkout -- 文件名 清空暂存区: git reset HEAD 文件名 提交: 将改动文件加入到暂存区后就可以进行提交了...与merge不同的是rebase合并看起来不会产生新的节点(实际上是会产生的,只是做了一次复制),而是将需要合并的节点直接累加 如图3-3 ?
git checkout master;git commit然后我们如何将master和bugFix两个分支合并呢?...为了撤销更改并分享给别人,我们需要使用git revert 3.移动提交记录(自由修改提交树) 3.1 git cherry-pick(git cherry-pick ) 如果你想将一些提交复制到当前所在的位置...你可以选择通过 fast-forward 快速合并到 master 分支上,但这样的话 master 分支就会包含我这些调试语句了。你肯定不想这样。 那我们如何做到只提交一个记录呢?...但是他们已经将那些提交推送到远程仓库了,因此你的工作就变成了基于项目旧版的代码,与远程仓库最新的代码不匹配了。 这种情况下, git push 就不知道该如何操作了。...因为这情况(历史偏离)有许多的不确定性,Git 是不会允许你 push 变更的。实际上它会强制你先合并远程最新的代码,然后才能分享你的工作。 如何解决问题呢?
,需要使用 git revert git reset HEAD^ # 撤销(删除)前一个提交 git revert HEAD # 以新增提交形式恢复到上一个提交 # 移动提交记录 git cherry-pick...rebase 或 git merge) cherry-pick 思路: 先切换到 main 分支 git checkout main 将要修改的提交摘到 main 分支 git cherry-pick...假设有一个场景,[feature/todo] 分支要合并到 master 主分支,那么用 rebase 或者 merge 有什么不同呢?...merge 特点:自动创建一个新的 commit 如果合并的时候遇到冲突,仅需要修改后重新 commit 优点:记录了真实的 commit 情况,包括每个分支的详情 缺点:因为每次 merge 会自动产生一个...注意:因为 git reset 是直接删除 commit 记录,从而会影响到其他开发人员的分支,所以不要在公共分支做该操作 git checkout 可以将 HEAD 移到一个新的分支,并更新工作目录
领取专属 10元无门槛券
手把手带您无忧上云