<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>
<title>Articles</title><link>https://blog.ummwhat.com/articles/</link><description>A personal journal about the web, everyday things, and paying attention.</description><language>en-US</language>
<atom:link href="https://blog.ummwhat.com/articles/feed.xml" rel="self" type="application/rss+xml"/>


<item><title>Git and SVN Notes</title><link>https://blog.ummwhat.com/articles/git-and-svn/</link><guid isPermaLink="false">2009-08-27-git-and-svn</guid><pubDate>Thu, 27 Aug 2009 12:27:13 -0400</pubDate>

<description>

&lt;p&gt;More for my own reference than anything else&amp;hellip;&lt;/p&gt;
&lt;p&gt;I have an SVN repository cloned locally. I&amp;rsquo;ve made a couple of changes in order for my application to run locally and I commited those all against the &amp;ldquo;dev&amp;rdquo; branch I set up.&lt;/p&gt;
&lt;p&gt;I then go off and do some actual work, which then needs to get sent back upstream to SVN. This is my workflow.&lt;/p&gt;
&lt;p&gt;Starting in the dev branch, with all of my changes committed&amp;hellip;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Because I should be making sure I have the newest stuff from SVN, just in case

&lt;div class=&#34;code-block&#34;&gt;&lt;div class=&#34;code-file&#34;&gt;bash&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git svn rebase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Switch over to the master, which should mimic SVN

&lt;div class=&#34;code-block&#34;&gt;&lt;div class=&#34;code-file&#34;&gt;bash&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Bring master up to date with the dev branch

&lt;div class=&#34;code-block&#34;&gt;&lt;div class=&#34;code-file&#34;&gt;bash&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Remove the commits I don&amp;rsquo;t want to push back to SVN

&lt;div class=&#34;code-block&#34;&gt;&lt;div class=&#34;code-file&#34;&gt;bash&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase -i git-svn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Because I&amp;rsquo;m paranoid and want to make sure only the commits I want are actually coming through

&lt;div class=&#34;code-block&#34;&gt;&lt;div class=&#34;code-file&#34;&gt;bash&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git svn dcommit --dry-run&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Commit it off to SVN

&lt;div class=&#34;code-block&#34;&gt;&lt;div class=&#34;code-file&#34;&gt;bash&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git svn dcommit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;changing-history&#34;&gt;Changing History&lt;/h2&gt;
&lt;p&gt;Revise the last 37 commits. Opens up a log in &lt;code&gt;$EDITOR&lt;/code&gt; where you can &amp;ldquo;squash&amp;rdquo; commits together&lt;/p&gt;

&lt;div class=&#34;code-block&#34;&gt;&lt;div class=&#34;code-file&#34;&gt;bash&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase -i HEAD~37&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;ndash;&lt;/p&gt;
&lt;h2 id=&#34;undoing-crazy-rebases&#34;&gt;Undoing crazy rebases&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Find the commit you want to bring back, copy its sha1 starter

&lt;div class=&#34;code-block&#34;&gt;&lt;div class=&#34;code-file&#34;&gt;bash&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reflog&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Boom, commit is back

&lt;div class=&#34;code-block&#34;&gt;&lt;div class=&#34;code-file&#34;&gt;bash&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git cherry-pick &amp;lt;sha1 starter /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description></item>
</channel></rss>
