<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Git on F嘉阳</title><link>https://blog.fjy8018.top/tags/git/</link><description>Recent content in Git on F嘉阳</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 17 Mar 2020 15:11:29 +0800</lastBuildDate><atom:link href="https://blog.fjy8018.top/tags/git/index.xml" rel="self" type="application/rss+xml"/><item><title>Git工作使用笔记</title><link>https://blog.fjy8018.top/archives/240/</link><pubDate>Fri, 13 Mar 2020 14:08:00 +0800</pubDate><guid>https://blog.fjy8018.top/archives/240/</guid><description>&lt;img src="https://blog.fjy8018.top/images/recovered/7029ed877105a9b0efec.png" alt="Featured image of post Git工作使用笔记" /&gt;&lt;h2 id="分离头指针"&gt;&lt;a href="#%e5%88%86%e7%a6%bb%e5%a4%b4%e6%8c%87%e9%92%88" class="header-anchor"&gt;&lt;/a&gt;分离头指针&#10;&lt;/h2&gt;&lt;p&gt;当前分支图&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313100955490" class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="244" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313100955490.png" width="266"&gt;&lt;/p&gt;&#10;&lt;p&gt;切换到之前的某一次提交&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313101041682" class="gallery-image" data-flex-basis="418px" data-flex-grow="174" height="506" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313101041682.png" width="882"&gt;&lt;/p&gt;&#10;&lt;p&gt;执行命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git checkout de11fa87ea&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;提示，当前位于“分离头指针”状态&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313101137934" class="gallery-image" data-flex-basis="346px" data-flex-grow="144" height="611" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313101137934.png" width="882"&gt;&lt;/p&gt;&#10;&lt;p&gt;分支图&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313101230748" class="gallery-image" data-flex-basis="242px" data-flex-grow="101" height="245" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313101230748.png" width="248"&gt;&lt;/p&gt;&#10;&lt;p&gt;注意&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;在分离头指针状态下没有绑定分支&lt;/li&gt;&#10;&lt;li&gt;产生的commit不会被保存&lt;/li&gt;&#10;&lt;li&gt;分支切换后在分支图中看不到该commit&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;一段时间&lt;/strong&gt;后会被git自动清除&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;使用场景&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;尝试性做一些变更，可以随时丢弃&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;此处演示分离头指针丢失commit的情况和补救措施&lt;/p&gt;&#10;&lt;h3 id="丢失commit"&gt;&lt;a href="#%e4%b8%a2%e5%a4%b1commit" class="header-anchor"&gt;&lt;/a&gt;丢失commit&#10;&lt;/h3&gt;&lt;p&gt;使用IDE修改文件并提交，忽略所有警告，修改后分支图如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313101811004" class="gallery-image" data-flex-basis="273px" data-flex-grow="113" height="272" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313101811004.png" width="310"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时接到其他需求，需要切换分支进行紧急修复&lt;/p&gt;&#10;&lt;p&gt;执行命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git checkout master&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;分支切换成功，并弹出提示和告警&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Warning: you are leaving 1 commit behind, not connected to&#10;any of your branches:&lt;/p&gt;&#10;&lt;p&gt;199ac20 游离状态修改文件&lt;/p&gt;&#10;&lt;p&gt;If you want to keep it by creating a new branch, this may be a good time&#10;to do so with:&lt;/p&gt;&#10;&lt;p&gt;git branch &lt;new-branch-name&gt; 199ac20&lt;/p&gt;&#10;&lt;p&gt;Switched to branch &amp;lsquo;master&amp;rsquo;&#10;Your branch is up to date with &amp;lsquo;origin/master&amp;rsquo;.&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313101817932" class="gallery-image" data-flex-basis="703px" data-flex-grow="293" height="282" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313101817932.png" width="827"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时查看分支图，刚才的commit已经不可见&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313102044269" class="gallery-image" data-flex-basis="296px" data-flex-grow="123" height="252" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313102044269.png" width="311"&gt;&lt;/p&gt;&#10;&lt;h3 id="补救"&gt;&lt;a href="#%e8%a1%a5%e6%95%91" class="header-anchor"&gt;&lt;/a&gt;补救&#10;&lt;/h3&gt;&lt;p&gt;此时发现刚才的commit十分重要，可根据git的提示进行补救&lt;/p&gt;&#10;&lt;p&gt;执行命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git branch hot-fix 199ac20&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再次查看分支图，可见commit已经恢复&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313102203644" class="gallery-image" data-flex-basis="274px" data-flex-grow="114" height="267" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313102203644.png" width="305"&gt;&lt;/p&gt;&#10;&lt;h2 id="本地分支操作"&gt;&lt;a href="#%e6%9c%ac%e5%9c%b0%e5%88%86%e6%94%af%e6%93%8d%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;本地分支操作&#10;&lt;/h2&gt;&lt;p&gt;以下操作仅适用于本地分支，无远程分支协同工作的情况&lt;/p&gt;&#10;&lt;h3 id="修改当前commit的messageamend"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e5%bd%93%e5%89%8dcommit%e7%9a%84messageamend" class="header-anchor"&gt;&lt;/a&gt;修改当前commit的message——&lt;code&gt;amend&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;当前分支图&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313102633268" class="gallery-image" data-flex-basis="270px" data-flex-grow="112" height="264" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313102633268.png" width="298"&gt;&lt;/p&gt;&#10;&lt;p&gt;执行命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git commit --amend&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;自动弹出编辑器&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313102714191" class="gallery-image" data-flex-basis="592px" data-flex-grow="246" height="344" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313102714191.png" width="849"&gt;&lt;/p&gt;&#10;&lt;p&gt;修改后保存并关闭编辑器即可，输出如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313102735178" class="gallery-image" data-flex-basis="1445px" data-flex-grow="602" height="92" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313102735178.png" width="554"&gt;&lt;/p&gt;&#10;&lt;p&gt;再次查看分支图&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313102751917" class="gallery-image" data-flex-basis="234px" data-flex-grow="97" height="310" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313102751917.png" width="303"&gt;&lt;/p&gt;&#10;&lt;h3 id="修改前面某次commit的messagerebase"&gt;&lt;a href="#%e4%bf%ae%e6%94%b9%e5%89%8d%e9%9d%a2%e6%9f%90%e6%ac%a1commit%e7%9a%84messagerebase" class="header-anchor"&gt;&lt;/a&gt;修改前面某次commit的message——&lt;code&gt;rebase&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;现计划修改如下message&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313102837128" class="gallery-image" data-flex-basis="496px" data-flex-grow="206" height="145" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313102837128.png" width="300"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用IDE拷贝其父提交的SHA值&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313102938536" class="gallery-image" data-flex-basis="731px" data-flex-grow="304" height="124" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313102938536.png" width="378"&gt;&lt;/p&gt;&#10;&lt;p&gt;执行命令，&lt;code&gt;-i&lt;/code&gt;表示交互式执行&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git rebase -i 199ac203c90f881024c6870d56517df9e2080841&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;自动弹出编辑器&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313103103273" class="gallery-image" data-flex-basis="289px" data-flex-grow="120" height="745" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313103103273.png" width="898"&gt;&lt;/p&gt;&#10;&lt;p&gt;同时包含提示操作&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;Rebase 199ac20..bfe2b7f onto 199ac20 (3 commands)&lt;/p&gt;&#10;&lt;p&gt;Commands:&#10;p, pick &lt;commit&gt; = use commit&#10;r, reword &lt;commit&gt; = use commit, but edit the commit message&#10;e, edit &lt;commit&gt; = use commit, but stop for amending&#10;s, squash &lt;commit&gt; = use commit, but meld into previous commit&#10;f, fixup &lt;commit&gt; = like &amp;ldquo;squash&amp;rdquo;, but discard this commit&amp;rsquo;s log message&#10;x, exec &lt;command&gt; = run command (the rest of the line) using shell&#10;b, break = stop here (continue rebase later with &amp;lsquo;git rebase &amp;ndash;continue&amp;rsquo;)&#10;d, drop &lt;commit&gt; = remove commit&#10;l, label &lt;label&gt; = label current HEAD with a name&#10;t, reset &lt;label&gt; = reset HEAD to a label&#10;m, merge [-C &lt;commit&gt; | -c &lt;commit&gt;] &lt;label&gt; [# &lt;oneline&gt;]&#10;. create a merge commit using the original merge commit&amp;rsquo;s&#10;. message (or the oneline, if no original merge commit was&#10;. specified). Use -c &lt;commit&gt; to reword the commit message.&lt;/p&gt;&#10;&lt;p&gt;These lines can be re-ordered; they are executed from top to bottom.&lt;/p&gt;&#10;&lt;p&gt;If you remove a line here THAT COMMIT WILL BE LOST.&lt;/p&gt;&#10;&lt;p&gt;However, if you remove everything, the rebase will be aborted.&lt;/p&gt;&#10;&lt;p&gt;Note that empty commits are commented out&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;由此可见“变基”支持很多操作，此处需要使用的是&lt;code&gt;reword&lt;/code&gt;，修改目标提交的命令为&lt;code&gt;r&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313103140977" class="gallery-image" data-flex-basis="1121px" data-flex-grow="467" height="83" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313103140977.png" width="388"&gt;&lt;/p&gt;&#10;&lt;p&gt;保存并关闭编辑器，会自动弹出新编辑器界面&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313103156452" class="gallery-image" data-flex-basis="531px" data-flex-grow="221" height="466" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313103156452.png" width="1032"&gt;&lt;/p&gt;&#10;&lt;p&gt;修改后保存并关闭即可，输出如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313103234131" class="gallery-image" data-flex-basis="1508px" data-flex-grow="628" height="115" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313103234131.png" width="723"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看分支图&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313103250780" class="gallery-image" data-flex-basis="590px" data-flex-grow="245" height="122" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313103250780.png" width="300"&gt;&lt;/p&gt;&#10;&lt;h3 id="整理连续多个commitrebase"&gt;&lt;a href="#%e6%95%b4%e7%90%86%e8%bf%9e%e7%bb%ad%e5%a4%9a%e4%b8%aacommitrebase" class="header-anchor"&gt;&lt;/a&gt;整理连续多个commit——&lt;code&gt;rebase&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;现计划合并3个commit&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313104229297" class="gallery-image" data-flex-basis="615px" data-flex-grow="256" height="122" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313104229297.png" width="313"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用IDE拷贝其父SHA值&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313104256202" class="gallery-image" data-flex-basis="664px" data-flex-grow="276" height="138" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313104256202.png" width="382"&gt;&lt;/p&gt;&#10;&lt;p&gt;执行命令&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git rebase -i 199ac203c90f881024c6870d56517df9e2080841&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此处使用&lt;code&gt;squash&lt;/code&gt;，官方介绍如下&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;s, squash &lt;commit&gt; = use commit, but meld into previous commit&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;修改内容如下，说明将中间两个合并进第一个commit中&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313104553536" class="gallery-image" data-flex-basis="987px" data-flex-grow="411" height="95" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313104553536.png" width="391"&gt;&lt;/p&gt;&#10;&lt;p&gt;保存后关闭，会弹出新的编辑器界面，提示可以输出合并commit的message&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313104708882" class="gallery-image" data-flex-basis="269px" data-flex-grow="112" height="754" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313104708882.png" width="846"&gt;&lt;/p&gt;&#10;&lt;p&gt;编写message&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313104849690" class="gallery-image" data-flex-basis="593px" data-flex-grow="247" height="229" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313104849690.png" width="566"&gt;&lt;/p&gt;&#10;&lt;p&gt;保存后关闭，提示修改成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313105805083" class="gallery-image" data-flex-basis="1339px" data-flex-grow="557" height="119" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313105805083.png" width="664"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看分支图&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313105829642" class="gallery-image" data-flex-basis="293px" data-flex-grow="122" height="306" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313105829642.png" width="374"&gt;&lt;/p&gt;&#10;&lt;h2 id="分支合并策略"&gt;&lt;a href="#%e5%88%86%e6%94%af%e5%90%88%e5%b9%b6%e7%ad%96%e7%95%a5" class="header-anchor"&gt;&lt;/a&gt;分支合并策略&#10;&lt;/h2&gt;&lt;p&gt;演示不同分支合并策略效果，当前的分支图如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584157562406" class="gallery-image" data-flex-basis="684px" data-flex-grow="285" height="362" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584157562406.png" width="1033"&gt;&lt;/p&gt;&#10;&lt;p&gt;现在将hot-fix合并进master&lt;/p&gt;&#10;&lt;h3 id="gitlab默认合并策略merge-commit"&gt;&lt;a href="#gitlab%e9%bb%98%e8%ae%a4%e5%90%88%e5%b9%b6%e7%ad%96%e7%95%a5merge-commit" class="header-anchor"&gt;&lt;/a&gt;GitLab默认合并策略——&lt;code&gt;merge commit&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;gitlab默认合并请求使用的策略&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584157617890" class="gallery-image" data-flex-basis="368px" data-flex-grow="153" height="614" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584157617890.png" width="943"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584157635041" class="gallery-image" data-flex-basis="331px" data-flex-grow="138" height="520" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584157635041.png" width="719"&gt;&lt;/p&gt;&#10;&lt;p&gt;由于没有冲突，可以线上直接合并&lt;/p&gt;&#10;&lt;p&gt;其对应执行的命令如下&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Fetch and check out the branch for this merge request&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git fetch origin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git checkout -b hot-fix origin/hot-fix&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Review the changes locally&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; Merge the branch and fix any conflicts that come up&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git fetch origin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git checkout origin/master&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git merge --no-ff hot-fix&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; Push the result of the merge to GitLab&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git push origin master&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;合并完成&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584157751505" class="gallery-image" data-flex-basis="356px" data-flex-grow="148" height="407" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584157751505.png" width="605"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看分支图，故当前分支会影响特性分支并产生新的提交&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584157894622" class="gallery-image" data-flex-basis="653px" data-flex-grow="272" height="383" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584157894622.png" width="1043"&gt;&lt;/p&gt;&#10;&lt;h3 id="gitlab合并提交策略"&gt;&lt;a href="#gitlab%e5%90%88%e5%b9%b6%e6%8f%90%e4%ba%a4%e7%ad%96%e7%95%a5" class="header-anchor"&gt;&lt;/a&gt;GitLab合并提交策略&#10;&lt;/h3&gt;&lt;p&gt;提交合并请求的时候勾选策略&lt;code&gt;Squash commits when merge request is accepted&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584158031481" class="gallery-image" data-flex-basis="515px" data-flex-grow="214" height="426" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584158031481.png" width="915"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584158086855" class="gallery-image" data-flex-basis="342px" data-flex-grow="142" height="503" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584158086855.png" width="717"&gt;&lt;/p&gt;&#10;&lt;p&gt;其对应执行的命令如下（与默认策略一致）&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Fetch and check out the branch for this merge request&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git fetch origin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git checkout -b hot-fix origin/hot-fix&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Review the changes locally&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; Merge the branch and fix any conflicts that come up&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git fetch origin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git checkout origin/master&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git merge --no-ff hot-fix&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Step 4.&lt;/strong&gt; Push the result of the merge to GitLab&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git push origin master&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;合并成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584158157862" class="gallery-image" data-flex-basis="337px" data-flex-grow="140" height="478" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584158157862.png" width="672"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看分支图，可见其影响特性分支，会产生新的提交，同时覆盖特性分支最后一次提交&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584158250648" class="gallery-image" data-flex-basis="599px" data-flex-grow="249" height="421" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584158250648.png" width="1051"&gt;&lt;/p&gt;&#10;&lt;h3 id="分支合并策略squash-merge"&gt;&lt;a href="#%e5%88%86%e6%94%af%e5%90%88%e5%b9%b6%e7%ad%96%e7%95%a5squash-merge" class="header-anchor"&gt;&lt;/a&gt;分支合并策略——&lt;code&gt;squash merge&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;GitHub支持&lt;code&gt;squash merge&lt;/code&gt;合并策略，此处通过命令行执行测试&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git merge --squash origin/hot-fix&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git commit -m &lt;span class="s2"&gt;&amp;#34;squash commit&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看分支图，特性分支不变，目标分支合并提交后产生一条提交，效果与GitLab合并提交类似，但命令使用方式不同&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584158902921" class="gallery-image" data-flex-basis="646px" data-flex-grow="269" height="391" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584158902921.png" width="1054"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;注意：&lt;code&gt;squash merge&lt;/code&gt;会变更提交者作者信息，这是一个很大的问题，后期问题追溯不好处理&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="变基合并策略rebase-merge"&gt;&lt;a href="#%e5%8f%98%e5%9f%ba%e5%90%88%e5%b9%b6%e7%ad%96%e7%95%a5rebase-merge" class="header-anchor"&gt;&lt;/a&gt;变基合并策略——&lt;code&gt;rebase merge&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;该策略也是GitHub支持的合并策略，可能会产生较多冲突&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584159613476" class="gallery-image" data-flex-basis="319px" data-flex-grow="133" height="788" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584159613476.png" width="1050"&gt;&lt;/p&gt;&#10;&lt;p&gt;选择合并策略，最后一种即变基合并策略&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584159638818" class="gallery-image" data-flex-basis="368px" data-flex-grow="153" height="601" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584159638818.png" width="924"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584159659905" class="gallery-image" data-flex-basis="704px" data-flex-grow="293" height="359" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584159659905.png" width="1054"&gt;&lt;/p&gt;&#10;&lt;p&gt;合并成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584159671515" class="gallery-image" data-flex-basis="1209px" data-flex-grow="504" height="217" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584159671515.png" width="1094"&gt;&lt;/p&gt;&#10;&lt;p&gt;查看分支图，其产生的三次提交即变基合并的结果，不会影响特性分支，也不会变更提交人，类似&lt;code&gt;cherry pick&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="1584159735805" class="gallery-image" data-flex-basis="519px" data-flex-grow="216" height="486" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/1584159735805.png" width="1051"&gt;&lt;/p&gt;&#10;&lt;h2 id="分支回滚策略"&gt;&lt;a href="#%e5%88%86%e6%94%af%e5%9b%9e%e6%bb%9a%e7%ad%96%e7%95%a5" class="header-anchor"&gt;&lt;/a&gt;分支回滚策略&#10;&lt;/h2&gt;&lt;p&gt;回滚策略分为两种，一种是合并后回滚，一种是普通提交回滚，不同回滚策略操作方法不同&lt;/p&gt;&#10;&lt;h3 id="普通提交回滚"&gt;&lt;a href="#%e6%99%ae%e9%80%9a%e6%8f%90%e4%ba%a4%e5%9b%9e%e6%bb%9a" class="header-anchor"&gt;&lt;/a&gt;普通提交回滚&#10;&lt;/h3&gt;&lt;p&gt;当前分支图，计划回滚最新提交&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317114811482" class="gallery-image" data-flex-basis="757px" data-flex-grow="315" height="168" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317114811482.png" width="530"&gt;&lt;/p&gt;&#10;&lt;p&gt;直接在IDE中执行&lt;code&gt;revert&lt;/code&gt;操作即可&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317114905943" class="gallery-image" data-flex-basis="536px" data-flex-grow="223" height="236" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317114905943.png" width="528"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317114935874" class="gallery-image" data-flex-basis="213px" data-flex-grow="88" height="849" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317114935874.png" width="754"&gt;&lt;/p&gt;&#10;&lt;p&gt;回滚会产生新的提交，回滚结束&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317114957310" class="gallery-image" data-flex-basis="1044px" data-flex-grow="435" height="122" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317114957310.png" width="531"&gt;&lt;/p&gt;&#10;&lt;h3 id="合并后回滚"&gt;&lt;a href="#%e5%90%88%e5%b9%b6%e5%90%8e%e5%9b%9e%e6%bb%9a" class="header-anchor"&gt;&lt;/a&gt;合并后回滚&#10;&lt;/h3&gt;&lt;p&gt;此时分支图，使用&lt;code&gt;merge commit&lt;/code&gt;方式进行过一次合并，此时不想要合并的结果，想恢复到未合并状态&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317115211900" class="gallery-image" data-flex-basis="679px" data-flex-grow="283" height="189" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317115211900.png" width="535"&gt;&lt;/p&gt;&#10;&lt;h4 id="错误操作直接执行revert"&gt;&lt;a href="#%e9%94%99%e8%af%af%e6%93%8d%e4%bd%9c%e7%9b%b4%e6%8e%a5%e6%89%a7%e8%a1%8crevert" class="header-anchor"&gt;&lt;/a&gt;错误操作——直接执行&lt;code&gt;revert&lt;/code&gt;&#10;&lt;/h4&gt;&lt;p&gt;此时IDE已经不支持通过revert进行回滚合并操作，通过命令行强行执行&lt;/p&gt;&#10;&lt;p&gt;查找SHA值&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317115622215" class="gallery-image" data-flex-basis="418px" data-flex-grow="174" height="506" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317115622215.png" width="882"&gt;&lt;/p&gt;&#10;&lt;p&gt;回滚&lt;code&gt;merge&lt;/code&gt;需要加上&lt;code&gt;-m&lt;/code&gt;参数git就知道到底要revert哪一个merge&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ git revert -n 25d7b405a4d50fe1b36019d90276973a8ed9160d -m &lt;span class="m"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;回滚后做一次commit即可，使用默认的message后如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317120022233" class="gallery-image" data-flex-basis="1413px" data-flex-grow="588" height="145" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317120022233.png" width="854"&gt;&lt;/p&gt;&#10;&lt;p&gt;验证回滚结果，使用两个提交进行差异比对&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317122223636" class="gallery-image" data-flex-basis="1467px" data-flex-grow="611" height="139" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317122223636.png" width="850"&gt;&lt;/p&gt;&#10;&lt;p&gt;无差异，回滚看似成功了&lt;/p&gt;&#10;&lt;img src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317122240317.png" alt="image-20200317122240317" style="zoom:50%;" /&gt;&#10;&lt;p&gt;此时在原分支做了修复后再进行合并&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317141053618" class="gallery-image" data-flex-basis="795px" data-flex-grow="331" height="192" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317141053618.png" width="636"&gt;&lt;/p&gt;&#10;&lt;p&gt;报无法合并，因为分支已经进行过合并&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317141147054" class="gallery-image" data-flex-basis="2378px" data-flex-grow="991" height="89" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317141147054.png" width="882"&gt;&lt;/p&gt;&#10;&lt;h4 id="正确操作reset"&gt;&lt;a href="#%e6%ad%a3%e7%a1%ae%e6%93%8d%e4%bd%9creset" class="header-anchor"&gt;&lt;/a&gt;正确操作——&lt;code&gt;reset&lt;/code&gt;&#10;&lt;/h4&gt;&lt;p&gt;使用reset操作到上一次提交&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317141254057" class="gallery-image" data-flex-basis="685px" data-flex-grow="285" height="223" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317141254057.png" width="637"&gt;&lt;/p&gt;&#10;&lt;p&gt;使用&lt;code&gt;--hard&lt;/code&gt;参数，丢弃后续的commit&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317141341299" class="gallery-image" data-flex-basis="349px" data-flex-grow="145" height="295" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317141341299.png" width="430"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317141418080" class="gallery-image" data-flex-basis="1060px" data-flex-grow="441" height="144" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317141418080.png" width="636"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时继续进行操作，并支持重新合并&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200317141504021" class="gallery-image" data-flex-basis="644px" data-flex-grow="268" height="237" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200317141504021.png" width="636"&gt;&lt;/p&gt;&#10;&lt;h2 id="禁止类操作"&gt;&lt;a href="#%e7%a6%81%e6%ad%a2%e7%b1%bb%e6%93%8d%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;禁止类操作&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;说明：禁止类说明是对开发人员禁止，而该命令在必要时候依然需要由配置管理员使用&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="push--f"&gt;&lt;a href="#push--f" class="header-anchor"&gt;&lt;/a&gt;&lt;code&gt;push -f&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;官方使用说明&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;-f, &amp;ndash;force force updates&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;原因：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;默认情况下远端分支若能顺利合并（fast forward），则会顺利合并&lt;/li&gt;&#10;&lt;li&gt;若远端分支产生冲突，则会停止push，同时提示错误，要pull到本地处理冲突后重新push&lt;/li&gt;&#10;&lt;li&gt;加&lt;code&gt;-f&lt;/code&gt;之后，本地分支会强行推送到远端，若本地分支落后于远端分支也&lt;strong&gt;不会弹出提示&lt;/strong&gt;，由此导致远程&lt;strong&gt;commit丢失&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;适用场景：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;远程分支已经混乱，本地分支符合需要，需要强制整理远程分支&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="公共分支禁止rebase"&gt;&lt;a href="#%e5%85%ac%e5%85%b1%e5%88%86%e6%94%af%e7%a6%81%e6%ad%a2rebase" class="header-anchor"&gt;&lt;/a&gt;公共分支禁止&lt;code&gt;rebase&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;此处对场景进行模拟，正常情况下，多位开发者对公共分支&lt;code&gt;common-branch&lt;/code&gt;进行修改，分支图如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313144526583" class="gallery-image" data-flex-basis="725px" data-flex-grow="302" height="123" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313144526583.png" width="372"&gt;&lt;/p&gt;&#10;&lt;p&gt;另一开发者在本地修改后执行变基操作，此处以修改历史提交message为例&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313150137509" class="gallery-image" data-flex-basis="653px" data-flex-grow="272" height="144" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313150137509.png" width="392"&gt;&lt;/p&gt;&#10;&lt;p&gt;变基&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313150232682" class="gallery-image" data-flex-basis="1129px" data-flex-grow="470" height="106" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313150232682.png" width="499"&gt;&lt;/p&gt;&#10;&lt;p&gt;录入变基信息&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313150328135" class="gallery-image" data-flex-basis="472px" data-flex-grow="197" height="610" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313150328135.png" width="1202"&gt;&lt;/p&gt;&#10;&lt;p&gt;变基成功&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313150426190" class="gallery-image" data-flex-basis="1076px" data-flex-grow="448" height="153" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313150426190.png" width="686"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时查看本地分支图，可见产生了新的分支路径，同时远程message并没有变化，故rebase对存在远程分支的情况无效&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313150514493" class="gallery-image" data-flex-basis="488px" data-flex-grow="203" height="191" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313150514493.png" width="389"&gt;&lt;/p&gt;&#10;&lt;p&gt;变基后推送到远端分支，提示需要合并，选择“合并”&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313150709744" class="gallery-image" data-flex-basis="608px" data-flex-grow="253" height="183" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313150709744.png" width="464"&gt;&lt;/p&gt;&#10;&lt;p&gt;合并后分支图如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313151107792" class="gallery-image" data-flex-basis="788px" data-flex-grow="328" height="185" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313151107792.png" width="608"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时其他开发者修改文件后并&lt;code&gt;fetch&lt;/code&gt;远程分支查看变更情况如下&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313151245155" class="gallery-image" data-flex-basis="561px" data-flex-grow="234" height="217" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313151245155.png" width="508"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时&lt;strong&gt;无法&lt;/strong&gt;对远程分支进行&lt;code&gt;push&lt;/code&gt;操作&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313151349842" class="gallery-image" data-flex-basis="1169px" data-flex-grow="487" height="175" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313151349842.png" width="853"&gt;&lt;/p&gt;&#10;&lt;h4 id="处理方法"&gt;&lt;a href="#%e5%a4%84%e7%90%86%e6%96%b9%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;处理方法&#10;&lt;/h4&gt;&lt;p&gt;pull远程分支在本地合并后重新推送，此时在本地再产生一次合并&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313151452121" class="gallery-image" data-flex-basis="499px" data-flex-grow="208" height="245" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313151452121.png" width="510"&gt;&lt;/p&gt;&#10;&lt;p&gt;此时可以成功推送&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="image-20200313151550190" class="gallery-image" data-flex-basis="635px" data-flex-grow="264" height="294" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://gitea.fjy8018.top/fjy8018/images/raw/branch/blog/img/image-20200313151550190.png" width="778"&gt;&lt;/p&gt;&#10;&lt;p&gt;由此一来一回操作导致大量不必要的合并操作，并可能导致大量冲突，并且&lt;strong&gt;没有解决问题&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="警告类操作"&gt;&lt;a href="#%e8%ad%a6%e5%91%8a%e7%b1%bb%e6%93%8d%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;警告类操作&#10;&lt;/h2&gt;&lt;h3 id="reset---hard"&gt;&lt;a href="#reset---hard" class="header-anchor"&gt;&lt;/a&gt;&lt;code&gt;reset --hard&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;官方对&lt;code&gt;reset&lt;/code&gt;操作用法说明&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;usage: git reset [&amp;ndash;mixed | &amp;ndash;soft | &amp;ndash;hard | &amp;ndash;merge | &amp;ndash;keep] [-q] [&lt;commit&gt;]&#10;or: git reset [-q] [&lt;tree-ish&gt;] [&amp;ndash;] &lt;paths&gt;&amp;hellip;&#10;or: EXPERIMENTAL: git reset [-q] [&amp;ndash;stdin [-z]] [&lt;tree-ish&gt;]&#10;or: git reset &amp;ndash;patch [&lt;tree-ish&gt;] [&amp;ndash;] [&lt;paths&gt;&amp;hellip;]&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;-q, --quiet be quiet, only report errors&#10;--mixed reset HEAD and index&#10;--soft reset only HEAD&#10;--hard reset HEAD, index and working tree&#10;--merge reset HEAD, index and working tree&#10;--keep reset HEAD but keep local changes&#10;--recurse-submodules[=&amp;lt;reset&amp;gt;]&#10; control recursive updating of submodules&#10;-p, --patch select hunks interactively&#10;-N, --intent-to-add record only the fact that removed paths will be added later&#10;-z EXPERIMENTAL: paths are separated with NUL character&#10;--stdin EXPERIMENTAL: read paths from &amp;lt;stdin&amp;gt;&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;原因：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;在分支上执行该操作会丢失目标commit以后的所有commit&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;适用场景&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;用于分支回滚且不打算保留其后的所有变更&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>