<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
  <id>tag:github.com,2008:/blog/all</id>
  <link rel="alternate" type="text/html" href="https://github.com/blog"/>
  <link rel="self" type="application/atom+xml" href="https://github.com/blog/all.atom"/>
  <title>The GitHub Blog</title>
  <updated>2015-06-26T02:45:52+08:00</updated>
  <entry>
    <id>tag:github.com,2008:Post/2032</id>
    <published>2015-06-26T02:45:52+08:00</published>
    <updated>2015-06-26T02:45:52+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2032-mobile-file-finder"/>
    <title>Mobile File Finder</title>
    <category>ship</category>
    <content type="html">&lt;p&gt;The &lt;a href="https://github.com/blog/793-introducing-the-file-finder"&gt;GitHub File Finder&lt;/a&gt; is now available on your mobile device. Just click the "Jump to file" link on any repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/2567/8341351/26389bd6-1a79-11e5-98ff-da90172c03b2.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/2567/8341351/26389bd6-1a79-11e5-98ff-da90172c03b2.png" alt="mobile-file-finder" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars0.githubusercontent.com/u/2567?v=3&amp;s=60"/>
    <author>
      <name>tmm1</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2031</id>
    <published>2015-06-25T23:31:11+08:00</published>
    <updated>2015-06-25T23:59:24+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2031-announcing-atom-1-0"/>
    <title>Announcing Atom 1.0</title>
    <category>ship</category>
    <content type="html">&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/378023/8232151/5be2347e-1608-11e5-8e5c-157da28c9ce7.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/378023/8232151/5be2347e-1608-11e5-8e5c-157da28c9ce7.png" alt="" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub is pleased to announce that version 1.0 of the Atom text editor is now available from &lt;a href="https://atom.io"&gt;atom.io&lt;/a&gt;. Read the full behind the scenes story over on the &lt;a href="http://blog.atom.io/2015/06/25/atom-1-0.html"&gt;Atom blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The entire Atom team is attending &lt;a href="http://codeconf.com"&gt;CodeConf&lt;/a&gt; this week and will be presenting a session all about Atom 1.0 featuring &lt;a href="https://github.com/defunkt"&gt;Chris Wanstrath&lt;/a&gt;, &lt;a href="https://github.com/benogle"&gt;Ben Ogle&lt;/a&gt;, and &lt;a href="https://github.com/thedaniel"&gt;Daniel Hengeveld&lt;/a&gt;. Watch along tomorrow, June 26th, at 11AM EDT: &lt;a href="https://live-stream.github.com"&gt;https://live-stream.github.com&lt;/a&gt;&lt;/p&gt;

&lt;iframe width="640" height="390" src="https://www.youtube.com/embed/Y7aEiVwBAdk" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</content>
    <media:thumbnail url="https://avatars2.githubusercontent.com/u/671378?v=3&amp;s=60"/>
    <author>
      <name>kevinsawicki</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2030</id>
    <published>2015-06-24T01:02:06+08:00</published>
    <updated>2015-06-24T10:12:57+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2030-octicon-buttons-are-here"/>
    <title>Octicon Buttons Are Here!</title>
    <category>general</category>
    <content type="html">&lt;p&gt;Graphs, and pencils, and locks...Oh my! Now you can collect themed &lt;a href="https://octicons.github.com"&gt;Octicon&lt;/a&gt; buttons with the &lt;a href="http://github.myshopify.com/products/octicon-buttons"&gt;four
new button packs&lt;/a&gt; offered in the &lt;a href="http://github.myshopify.com/"&gt;GitHub Shop&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://github.myshopify.com/products/octicon-buttons"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/5945961/8299483/e7da3de6-192d-11e5-9613-bed81f1c890b.jpg" alt="Octicon Buttons" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars0.githubusercontent.com/u/5945961?v=3&amp;s=60"/>
    <author>
      <name>bfire</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2028</id>
    <published>2015-06-23T02:15:03+08:00</published>
    <updated>2015-06-23T02:15:03+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2028-rocio-delgado-is-a-githubber"/>
    <title>Rocio Delgado is a GitHubber!</title>
    <category>hire</category>
    <content type="html">&lt;p&gt;We're super excited to welcome Rocio Delgado to the Core Application Engineering team!&lt;/p&gt;

&lt;p&gt;Rocio joins us from the land of Java but will be rolling up her sleeves and diving into the backend of GitHub's Rails application, helping to improve its performance, scalability, and reliability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/382669/8263822/7f98769a-1693-11e5-8ae9-fdf3ba5a0f67.gif" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/382669/8263822/7f98769a-1693-11e5-8ae9-fdf3ba5a0f67.gif" alt="rocio" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Born and raised in Mexico, Rocio will be working for us now from New York City, where she has lived for the last four years. She is an avid yogi and loves to sing and dance - but only in private or with the octocat as a backup dancer &lt;img class="emoji" title=":smiley:" alt=":smiley:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f603.png" height="20" width="20" align="absmiddle"&gt; &lt;img class="emoji" title=":dancer:" alt=":dancer:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f483.png" height="20" width="20" align="absmiddle"&gt;&lt;/p&gt;

&lt;p&gt;You can follow Rocio on GitHub as &lt;a href="https://github.com/rocio"&gt;@rocio&lt;/a&gt; and on Twitter as &lt;a href="https://twitter.com/rokkzy"&gt;@rokkzy&lt;/a&gt;.&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars3.githubusercontent.com/u/382669?v=3&amp;s=60"/>
    <author>
      <name>jesseplusplus</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2026</id>
    <published>2015-06-22T23:09:15+08:00</published>
    <updated>2015-06-22T23:33:14+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2026-student-hackathon-organizers-join-us-for-hackcon-at-github-hq"/>
    <title>Student hackathon organizers, join us for Hackcon at GitHub HQ</title>
    <category>conferences</category>
    <content type="html">&lt;p&gt;We're hosting &lt;a href="http://hackcon.io"&gt;Hackcon III&lt;/a&gt; at our San Francisco office on July 18th and 19th.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://hackcon.io"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/123345/8124060/1b465136-1110-11e5-8355-d0c5760bf332.png" alt="hackcon" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hackcon is the place to be for student hackathon organizers. The event is run by our friends at &lt;a href="http://mlh.io"&gt;Major League Hacking&lt;/a&gt; and will bring together 150 student leaders for two days of talks and workshops. Participants will share experience and best practices in everything from starting a campus group to producing large scale campus events.&lt;/p&gt;

&lt;p&gt;If you lead a student hacker community at your university, we'd love to see you at Hackcon. You can find more information about the event and pre-register at &lt;a href="http://hackcon.io/"&gt;hackcon.io&lt;/a&gt;. You can also check out the videos from &lt;a href="https://www.youtube.com/playlist?list=PLPDgudJ_VDUdqhQldG7SqXGxaj-FiLGmP"&gt;Hackcon I&lt;/a&gt; and &lt;a href="https://www.youtube.com/playlist?list=PLPDgudJ_VDUfQcMWbEgEsJS270FvfNGFG"&gt;Hackcon II&lt;/a&gt; on YouTube.&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars3.githubusercontent.com/u/123345?v=3&amp;s=60"/>
    <author>
      <name>johndbritton</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2029</id>
    <published>2015-06-22T20:11:13+08:00</published>
    <updated>2015-06-22T20:38:22+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2029-meetup-in-paris-france"/>
    <title>Meetup in Paris, France</title>
    <category>meetup</category>
    <content type="html">&lt;p&gt;A few days ago we &lt;a href="https://github.com/blog/2023-a-closer-look-at-europe"&gt;announced&lt;/a&gt; that "GitHub is growing in Europe". This growth is supported by GitHub teams based in UK, Germany, France, and the Netherlands.
The team in France is organizing a meetup with system integrator &lt;a href="http://openwide.fr/"&gt;Open wide&lt;/a&gt;. The Paris-based consultancy has a long history with open source software and an established track record of successful projects in various industries. The event will be held at their headquarters in Paris on July 7th, 2015.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/9470327/8281424/29f654d0-18e8-11e5-9fc5-13d76e8b845f.jpg" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/9470327/8281424/29f654d0-18e8-11e5-9fc5-13d76e8b845f.jpg" alt="06876946-photo" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Among GitHub customers in France, &lt;a href="http://tech.m6web.fr"&gt;M6Web&lt;/a&gt;, a successful media company, has been using GitHub for more than two years and they'll be presenting their use cases at this meetup.&lt;/p&gt;

&lt;h2&gt;Details&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Date : July 7th, 2015 from 6:00 PM to 8:00 PM&lt;/li&gt;
&lt;li&gt;You can register &lt;a href="http://si.openwide.fr/Evenement-La-collaboration-au-coeur-du-developpement-logiciel"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Language : French&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Once registered, you'll receive an email before the event with all details&lt;/em&gt;&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars0.githubusercontent.com/u/9470327?v=3&amp;s=60"/>
    <author>
      <name>asseh</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2027</id>
    <published>2015-06-20T00:43:57+08:00</published>
    <updated>2015-06-20T00:44:15+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2027-codeconf-updates-meet-greet-and-workshop-tickets"/>
    <title>CodeConf Updates: Meet &amp; Greet and Workshop Tickets</title>
    <category>conferences</category>
    <content type="html">&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/4154342/8258112/331e2444-1667-11e5-8e3a-d14384941fd5.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/4154342/8258112/331e2444-1667-11e5-8e3a-d14384941fd5.png" alt="codeconf-twitter-topheader" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://codeconf.com/"&gt;CodeConf&lt;/a&gt; is next week, and I couldn't be more excited to bring the open source community together to exchange ideas and have some fun in Nashville. There are a few updates I'd like to share: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;On June 24, the day before the conference, we'll be hosting a &lt;strong&gt;meet &amp;amp; greet&lt;/strong&gt; for attendees who would like to register early. This event is free and open to the public, so if you aren't attending CodeConf but live in the Nashville area and would like to stop by, &lt;a href="http://www.ticketbase.com/events/codeconf-2015"&gt;grab a ticket here&lt;/a&gt;. We'll be congregating on the second floor of &lt;a href="http://theacmenashville.com/"&gt;Acme Feed &amp;amp; Seed&lt;/a&gt; downtown beginning at 5:30pm &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;workshop schedule&lt;/strong&gt; has been updated, and I have opened up more space in each session for those interested. If you'd like to snag one of the newly available tickets, &lt;a href="http://www.ticketbase.com/events/codeconf-2015"&gt;go for it!&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's still time to grab a CodeConf ticket. &lt;a href="http://codeconf.com/"&gt;Take a look at the website for the full schedule of sessions, workshops, and sponsors.&lt;/a&gt; I hope to see you in Nashville. &lt;/p&gt;</content>
    <media:thumbnail url="https://avatars2.githubusercontent.com/u/4154342?v=3&amp;s=60"/>
    <author>
      <name>kelseyschimm</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2025</id>
    <published>2015-06-17T23:20:31+08:00</published>
    <updated>2015-06-20T02:18:36+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2025-patchwork-nashville"/>
    <title>Patchwork Nashville</title>
    <category>meetup</category>
    <content type="html">&lt;p&gt;We're excited to announce that our next &lt;a href="https://patchwork.github.io"&gt;Patchwork hack night&lt;/a&gt; will be on Tuesday, June 23, and will be co-hosted with our friends at &lt;a href="http://deavor.co"&gt;Deavor Co-Working&lt;/a&gt; in Nashville. &lt;img class="emoji" title=":tada:" alt=":tada:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f389.png" height="20" width="20" align="absmiddle"&gt; &lt;img class="emoji" title=":metal:" alt=":metal:" src="https://assets-cdn.github.com/images/icons/emoji/metal.png" height="20" width="20" align="absmiddle"&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/57594/8210351/97751558-14df-11e5-8a7d-fc9a01b5e0a1.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/57594/8210351/97751558-14df-11e5-8a7d-fc9a01b5e0a1.png" alt="deavor" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHubbers &lt;a href="https://github.com/elizabethn" class="user-mention"&gt;@elizabethn&lt;/a&gt; and &lt;a href="https://github.com/jlord" class="user-mention"&gt;@jlord&lt;/a&gt;, as well as local community mentors, will be on hand to walk you through the &lt;a href="https://guides.github.com/activities/hello-world/"&gt;Hello World&lt;/a&gt; tutorial, answer your questions, help you create your first open source project, and achieve your first merged Pull Request.&lt;/p&gt;

&lt;h2&gt;No coding experience needed&lt;/h2&gt;

&lt;p&gt;Patchwork is a &lt;strong&gt;self-directed, hands-on workshop for learning Git and GitHub&lt;/strong&gt;. The atmosphere is casual and informal; it is &lt;strong&gt;not&lt;/strong&gt; an event full of presented tutorials and copious note-taking. You will be able to go at your own pace, with the help of a community mentor nearby in case you run into any trouble. Join us for a night of hacking and snacking and make some new friends while you're at it!&lt;/p&gt;

&lt;p&gt;Newcomers to Git and GitHub: you'll leave with a merged &lt;a href="https://help.github.com/articles/using-pull-requests/"&gt;pull request&lt;/a&gt;, a square on your &lt;a href="https://help.github.com/articles/viewing-contributions"&gt;contributions graph&lt;/a&gt;, and confidence to get more involved in the open source community. &lt;/p&gt;

&lt;p&gt;Mentors: if you've ever had a pull request merged, now is your chance to share the love and help someone else create magic. &lt;img class="emoji" title=":sparkles:" alt=":sparkles:" src="https://assets-cdn.github.com/images/icons/emoji/unicode/2728.png" height="20" width="20" align="absmiddle"&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Details:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For:&lt;/strong&gt; Git and GitHub beginners.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When?&lt;/strong&gt; Tuesday, June 23, 2015 6:30-9:30 pm&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where?&lt;/strong&gt; Deavor Co-Working, 305 Jefferson St #125, Nashville, TN 37208&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RSVP:&lt;/strong&gt; 

&lt;ul&gt;
&lt;li&gt;Want to learn Git and Github? RSVP as an &lt;a href="https://ti.to/github-events/patchwork-nashville"&gt;&lt;strong&gt;attendee&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Want to help guide future open source maintainers and contributors? RSVP as a &lt;a href="https://ti.to/github-events/patchwork-nashville"&gt;&lt;strong&gt;mentor&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Once registered, you'll receive an email before the event with more details.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Food and refreshments will be provided. If you have any food allergies, please let us know during registration.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This facility is wheelchair-accessible.&lt;/em&gt;&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars2.githubusercontent.com/u/57594?v=3&amp;s=60"/>
    <author>
      <name>ElizabethN</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2023</id>
    <published>2015-06-17T20:01:25+08:00</published>
    <updated>2015-06-17T20:01:25+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2023-a-closer-look-at-europe"/>
    <title>A closer look at Europe</title>
    <category>general</category>
    <content type="html">&lt;p&gt;Last week we opened our first &lt;a href="https://github.com/blog/2017-announcing-github-japan"&gt;international office in Japan&lt;/a&gt;. This week we thought we'd take a closer look at Europe, which happens to be the largest demographic of GitHub users around the world, representing 36% of site traffic.&lt;/p&gt;

&lt;p&gt;Around 32 million people visit GitHub each month, and most of this traffic comes from outside of the United States (74% in fact!).
The most active countries in Europe are Germany, the United Kingdom, and France, but if we look at users per capita we see a different story -- Sweden, Finland, and the Netherlands lead the way. London, Paris and Stockholm top the list of European cities most active on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/25/8152704/83b76acc-12d5-11e5-851c-3fa139ee3137.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/25/8152704/83b76acc-12d5-11e5-851c-3fa139ee3137.png" alt="Growth of most active European countries on GitHub" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goals of building better software are universal, and several European organizations are setting the example.
Companies like &lt;a href="https://enterprise.github.com/stories/sap"&gt;SAP&lt;/a&gt; and XS4ALL are driving innovation with software, while &lt;a href="https://alphagov.github.io/"&gt;The UK Government Digital Services&lt;/a&gt; and &lt;a href="https://government.github.com/community/"&gt;dozens of other European government agencies and services&lt;/a&gt; are developing new ways to serve citizens.&lt;/p&gt;

&lt;p&gt;Today, around 10% of GitHub employees are based in Europe, with a dozen new faces in the last year alone -- many of whom are focused solely on helping our European customers build great software.
A few of us are here in the UK for &lt;a href="http://londontechnologyweek.co.uk/"&gt;London Tech Week&lt;/a&gt; and &lt;a href="https://enterconf.com/"&gt;EnterConf&lt;/a&gt; in Belfast. There will be plenty more meetups ahead if we don't see you there.&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars2.githubusercontent.com/u/4590?v=3&amp;s=60"/>
    <author>
      <name>briandoll</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2024</id>
    <published>2015-06-17T03:48:18+08:00</published>
    <updated>2015-06-17T03:48:18+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2024-read-only-deploy-keys"/>
    <title>Read-only deploy keys</title>
    <category>engineering</category>
    <content type="html">&lt;p&gt;You can now create deploy keys with read-only access. A deploy key is an SSH key that is stored on your server and grants access to a single GitHub repository. They are often used to clone repositories during deploys or continuous integration runs. Deploys sometimes involve merging branches and pushing code, so deploy keys have always allowed both read and write access. Because write access is undesirable in many cases, you now have the ability to create deploy keys with read-only access.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/1144197/8164374/e76a0e24-1345-11e5-93b0-fd04b6a3446c.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/1144197/8164374/e76a0e24-1345-11e5-93b0-fd04b6a3446c.png" alt="viewing and adding deploy keys" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;New deploy keys created through GitHub.com will be read-only by default and can be given write access by selecting "Allow write access" during creation. Access level can be specified when &lt;a href="https://developer.github.com/v3/repos/keys/"&gt;creating deploy keys from the API&lt;/a&gt; as well.&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars2.githubusercontent.com/u/1144197?v=3&amp;s=60"/>
    <author>
      <name>mastahyeti</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2022</id>
    <published>2015-06-12T03:51:54+08:00</published>
    <updated>2015-06-12T03:51:54+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2022-an-updated-header-just-for-you"/>
    <title>An updated header, just for you</title>
    <category>ship</category>
    <content type="html">&lt;p&gt;Navigating what's most important to you on GitHub.com just got a little easier with our updated site header.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/98681/8116294/212a0ff0-1036-11e5-9450-b08d1cb7999c.jpg" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/98681/8116294/212a0ff0-1036-11e5-9450-b08d1cb7999c.jpg" alt="New GitHub header" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The new header gives you faster access to &lt;a href="https://github.com/blog/1901-managing-issues-and-pull-requests-across-repositories"&gt;your pull requests and issues dashboards&lt;/a&gt; from anywhere on the site. If you're unfamiliar with them, these dashboards list all of your open pull requests and issuesas well as those you've been mentioned in or are assigned toin one place. Use them to stay up to date on what needs to be done across your projects.&lt;/p&gt;

&lt;p&gt;Lastly, clicking your avatar now opens a new dropdown menu with links to your profile, account settings, and more. As a small bonus, we've also included a new &lt;em&gt;Your stars&lt;/em&gt; link for easy access to your starred repositories.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars2.githubusercontent.com/u/98681?v=3&amp;s=60"/>
    <author>
      <name>mdo</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2021</id>
    <published>2015-06-11T20:30:53+08:00</published>
    <updated>2015-06-11T20:43:29+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2021-lucia-escanellas-is-a-githubber"/>
    <title>Lucia Escanellas is a GitHubber!</title>
    <category>hire</category>
    <content type="html">&lt;p&gt;Ladies and gentlemen, may I introduce you to the newest member of the GitHub Enterprise support team in Europe: Lucia Escanellas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/959793/8052831/65b76372-0e8b-11e5-86bc-2d75cfe68ade.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/959793/8052831/65b76372-0e8b-11e5-86bc-2d75cfe68ade.png" alt="Lucia Escanellas" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lucia is from Montevideo, Uruguay where there are more cows than people (4:1 ratio), and has recently moved to Amsterdam, NL where there's more water than people (~100000:1 ratio). She studied physics at a University in Paris only to realize she'd prefer to read the whole computer science section from the local bookstore.&lt;/p&gt;

&lt;p&gt;If you bump into Lucia, she'll probably jump into any conversation in French, on Ruby or Rails, Static vs Dynamic programming languages, security, and kittens or cute dogs. When she's not computing, she likes to watch &lt;a href="https://www.youtube.com/user/TiranosTembladTV"&gt;Tiranos Temblad&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Be sure to follow her on &lt;a href="https://twitter.com/raviolicode"&gt;Twitter&lt;/a&gt; and &lt;a href="https://github.com/raviolicode"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Welcome to the team, Lucia!&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars1.githubusercontent.com/u/959793?v=3&amp;s=60"/>
    <author>
      <name>fooforge</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2020</id>
    <published>2015-06-11T00:39:42+08:00</published>
    <updated>2015-06-11T00:39:42+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2020-improved-organization-permissions"/>
    <title>Improved organization permissions</title>
    <category>ship</category>
    <content type="html">&lt;p&gt;Organizations have always been the best way for teams to work together and collaborate on code. We're happy to announce &lt;a href="https://github.com/orgs/improved-permissions?utm_source=github_site&amp;amp;utm_medium=blog&amp;amp;utm_campaign=organization-permissions"&gt;major improvements to GitHub organization permissions&lt;/a&gt;. These improvements include new customizable member privileges, fine-grained team permissions, and more open communication.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/orgs/improved-permissions?utm_source=github_site&amp;amp;utm_medium=blog&amp;amp;utm_campaign=organization-permissions"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/874145/8073289/cc2561da-0ed7-11e5-8bed-36f15367c914.png" alt="improved-organization-permissions" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The improved permissions system gives your organization the flexibility to work the way you want. Here are just a few highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(Opt-in) Members can view and mention all teams, even when they're not on those teams.&lt;/li&gt;
&lt;li&gt;(Opt-in) Members can create repositories without help from an owner.&lt;/li&gt;
&lt;li&gt;Members can create new teams to self-organize with the people they work with.&lt;/li&gt;
&lt;li&gt;Owners can give just the right amount of access to contractors and interns by adding them to repositories without giving them the privileges of organization members.&lt;/li&gt;
&lt;li&gt;And many more! &lt;a href="https://github.com/orgs/improved-permissions?utm_source=github_site&amp;amp;utm_medium=blog&amp;amp;utm_campaign=organization-permissions"&gt;Learn about GitHub's improved organization permissions&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these new features give your organization the ability to work together seamlessly without everyone needing to be an owner.&lt;/p&gt;

&lt;p&gt;Once these features launch, organization owners will be able to turn on new permissions as needed. Simply opt-in when you're ready.&lt;/p&gt;

&lt;h2&gt;Early access&lt;/h2&gt;

&lt;p&gt;We're rolling out our improved permissions system to a select group of users who will be asked to provide feedback over a short survey as part of the program. If you're interested in being one of the first to try it out on GitHub.com, &lt;a href="https://github.com/orgs/improved-permissions?utm_source=github_site&amp;amp;utm_medium=blog&amp;amp;utm_campaign=organization-permissions"&gt;sign your organization up for early access&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the next few months, every organization on GitHub.com will have the improved permissions system.&lt;/p&gt;</content>
    <media:thumbnail url="https://avatars2.githubusercontent.com/u/874145?v=3&amp;s=60"/>
    <author>
      <name>connors</name>
    </author>
  </entry>
  <entry>
    <id>tag:github.com,2008:Post/2019</id>
    <published>2015-06-08T21:44:31+08:00</published>
    <updated>2015-06-08T21:44:31+08:00</updated>
    <link rel="alternate" type="text/html" href="https://github.com/blog/2019-how-to-undo-almost-anything-with-git"/>
    <title>How to undo (almost) anything with Git</title>
    <category>general</category>
    <content type="html">&lt;p&gt;One of the most useful features of any version control system is the ability to "undo" your mistakes. In Git, "undo" can mean many slightly different things.&lt;/p&gt;

&lt;p&gt;When you make a new commit, Git stores a snapshot of your repository at that specific moment in time; later, you can use Git to go back to an earlier version of your project.&lt;/p&gt;

&lt;p&gt;In this post, I'm going to take a look at some common scenarios where you might want to "undo" a change you've made and the best way to do it using Git.&lt;/p&gt;

&lt;h2&gt;
&lt;a id="undo-a-public-change" class="anchor" href="#undo-a-public-change" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Undo a "public" change&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You just ran &lt;code&gt;git push&lt;/code&gt;, sending your changes to GitHub, now you realize there's a problem with one of those commits. You'd like to undo that commit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git revert &amp;lt;SHA&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; &lt;code&gt;git revert&lt;/code&gt; will create a new commit that's the opposite (or inverse) of the given SHA. If the old commit is "matter", the new commit is "anti-matter"anything removed in the old commit will be added in the new commit and anything added in the old commit will be removed in the new commit. &lt;/p&gt;

&lt;p&gt;This is Git's safest, most basic "undo" scenario, because it doesn't &lt;em&gt;alter&lt;/em&gt; historyso you can now &lt;code&gt;git push&lt;/code&gt; the new "inverse" commit to undo your mistaken commit.&lt;/p&gt;

&lt;h2&gt;
&lt;a id="fix-the-last-commit-message" class="anchor" href="#fix-the-last-commit-message" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Fix the last commit message&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You just typo'd the last commit message, you did &lt;code&gt;git commit -m "Fxies bug #42"&lt;/code&gt; but before &lt;code&gt;git push&lt;/code&gt; you realized that really should say "Fixes bug #42".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git commit --amend&lt;/code&gt; or &lt;code&gt;git commit --amend -m "Fixes bug #42"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; &lt;code&gt;git commit --amend&lt;/code&gt; will update and replace the most recent commit with a new commit that combines any staged changes with the contents of the previous commit. With nothing currently staged, this just rewrites the previous commit message.&lt;/p&gt;

&lt;h2&gt;
&lt;a id="undo-local-changes" class="anchor" href="#undo-local-changes" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Undo "local" changes&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; The cat walked across the keyboard and somehow saved the changes, then crashed the editor. You haven't committed those changes, though. You want to undo everything in that filejust go back to the way it looked in the last commit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git checkout -- &amp;lt;bad filename&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; &lt;code&gt;git checkout&lt;/code&gt; alters files in the working directory to a state previously known to Git. You could provide a branch name or specific SHA you want to go back to or, by default, Git will assume you want to checkout &lt;code&gt;HEAD&lt;/code&gt;, the last commit on the currently-checked-out branch.&lt;/p&gt;

&lt;p&gt;Keep in mind: any changes you "undo" this way are &lt;em&gt;really&lt;/em&gt; gone. They were never committed, so Git can't help us recover them later. Be sure you know what you're throwing away here! (Maybe use &lt;code&gt;git diff&lt;/code&gt; to confirm.)&lt;/p&gt;

&lt;h2&gt;
&lt;a id="reset-local-changes" class="anchor" href="#reset-local-changes" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Reset "local" changes&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You've made some commits locally (not yet pushed), but everything is terrible, you want to undo the last three commitslike they never happened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git reset &amp;lt;last good SHA&amp;gt;&lt;/code&gt; or &lt;code&gt;git reset --hard &amp;lt;last good SHA&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; &lt;code&gt;git reset&lt;/code&gt; rewinds your repository's history all the way back to the specified SHA. It's as if those commits never happened. By default, &lt;code&gt;git reset&lt;/code&gt; preserves the working directory. The commits are gone, but the &lt;em&gt;contents&lt;/em&gt; are still on disk. This is the safest option, but often, you'll want to "undo" the commits &lt;em&gt;and&lt;/em&gt; the changes in one movethat's what &lt;code&gt;--hard&lt;/code&gt; does.&lt;/p&gt;

&lt;h2&gt;
&lt;a id="redo-after-undo-local" class="anchor" href="#redo-after-undo-local" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Redo after undo "local"&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You made some commits, did a &lt;code&gt;git reset --hard&lt;/code&gt; to "undo" those changes (see above), and &lt;em&gt;then&lt;/em&gt; realized: you want those changes back!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git reflog&lt;/code&gt; and &lt;code&gt;git reset&lt;/code&gt; or &lt;code&gt;git checkout&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; &lt;code&gt;git reflog&lt;/code&gt; is an amazing resource for recovering project history. You can recover &lt;em&gt;almost&lt;/em&gt; anythinganything you've committedvia the reflog.&lt;/p&gt;

&lt;p&gt;You're probably familiar with the &lt;code&gt;git log&lt;/code&gt; command, which shows a list of commits. &lt;code&gt;git reflog&lt;/code&gt; is similar, but instead shows a list of times when &lt;code&gt;HEAD&lt;/code&gt; changed.&lt;/p&gt;

&lt;p&gt;Some caveats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;HEAD&lt;/code&gt; changes &lt;em&gt;only&lt;/em&gt;.&lt;code&gt;HEAD&lt;/code&gt; changes when you switch branches, make commits with &lt;code&gt;git commit&lt;/code&gt; and un-make commits with &lt;code&gt;git reset&lt;/code&gt;, but &lt;code&gt;HEAD&lt;/code&gt; does &lt;em&gt;not&lt;/em&gt; change when you &lt;code&gt;git checkout -- &amp;lt;bad filename&amp;gt;&lt;/code&gt; (from an earlier scenarioas mentioned before, those changes were never committed, so the reflog can't help us recover those.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;git reflog&lt;/code&gt; doesn't last forever. Git will periodically clean up objects which are "unreachable." Don't expect to find months-old commits lying around in the reflog forever.&lt;/li&gt;
&lt;li&gt;Your &lt;code&gt;reflog&lt;/code&gt; is yours and yours alone. You can't use &lt;code&gt;git reflog&lt;/code&gt; to restore another developer's un-pushed commits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/2077/6953866/f6b9f054-d891-11e4-8c53-838eff9f40ae.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/2077/6953866/f6b9f054-d891-11e4-8c53-838eff9f40ae.png" alt="reflog" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So... how do you use the reflog to "redo" a previously "undone" commit or commits? It depends on what exactly you want to accomplish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you want to restore the project's history as it was at that moment in time use &lt;code&gt;git reset --hard &amp;lt;SHA&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If you want to recreate one or more files in your working directory as they were at that moment in time, without altering history use &lt;code&gt;git checkout &amp;lt;SHA&amp;gt; -- &amp;lt;filename&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If you want to replay &lt;em&gt;exactly one&lt;/em&gt; of those commits into your repository use &lt;code&gt;git cherry-pick &amp;lt;SHA&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
&lt;a id="once-more-with-branching" class="anchor" href="#once-more-with-branching" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Once more, with branching&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You made some commits, then realized you were checked out on &lt;code&gt;master&lt;/code&gt;. You wish you could make those commits on a feature branch instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git branch feature&lt;/code&gt;, &lt;code&gt;git reset --hard origin/master&lt;/code&gt;, and &lt;code&gt;git checkout feature&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; You may be used to creating new branches with &lt;code&gt;git checkout -b &amp;lt;name&amp;gt;&lt;/code&gt;it's a popular short-cut for creating a new branch and checking it out right awaybut you don't want to switch branches just yet. Here, &lt;code&gt;git branch feature&lt;/code&gt; creates a new branch called &lt;code&gt;feature&lt;/code&gt; pointing at your most recent commit, but leaves you checked out to &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Next, &lt;code&gt;git reset --hard&lt;/code&gt; rewinds &lt;code&gt;master&lt;/code&gt; back to &lt;code&gt;origin/master&lt;/code&gt;, before any of your new commits. Don't worry, though, they are still available on &lt;code&gt;feature&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Finally, &lt;code&gt;git checkout&lt;/code&gt; switches to the new &lt;code&gt;feature&lt;/code&gt; branch, with all of your recent work intact.&lt;/p&gt;

&lt;h2&gt;
&lt;a id="branch-in-time-saves-nine" class="anchor" href="#branch-in-time-saves-nine" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Branch in time saves nine&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You started a new branch &lt;code&gt;feature&lt;/code&gt; based on &lt;code&gt;master&lt;/code&gt;, but &lt;code&gt;master&lt;/code&gt; was pretty far behind &lt;code&gt;origin/master&lt;/code&gt;. Now that &lt;code&gt;master&lt;/code&gt; branch is in sync with &lt;code&gt;origin/master&lt;/code&gt;, you wish commits on &lt;code&gt;feature&lt;/code&gt; were starting &lt;em&gt;now&lt;/em&gt;, instead of being so far behind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git checkout feature&lt;/code&gt; and &lt;code&gt;git rebase master&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; You could have done this with &lt;code&gt;git reset&lt;/code&gt; (no &lt;code&gt;--hard&lt;/code&gt;, intentionally preserving changes on disk) then &lt;code&gt;git checkout -b &amp;lt;new branch name&amp;gt;&lt;/code&gt; and then re-commit the changes, but that way, you'd lose the commit history. There's a better way.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git rebase master&lt;/code&gt; does a couple of things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First it locates the common ancestor between your currently-checked-out branch and &lt;code&gt;master&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Then it resets the currently-checked-out branch to that ancestor, holding all later commits in a temporary holding area.&lt;/li&gt;
&lt;li&gt;Then it advances the currently-checked-out-branch to the end of &lt;code&gt;master&lt;/code&gt; and replays the commits from the holding area &lt;em&gt;after&lt;/em&gt; &lt;code&gt;master&lt;/code&gt;'s last commit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
&lt;a id="mass-undoredo" class="anchor" href="#mass-undoredo" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Mass undo/redo&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You started this feature in one direction, but mid-way through, you realized another solution was better. You've got a dozen or so commits, but you only want some of them. You'd like the others to just disappear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git rebase -i &amp;lt;earlier SHA&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; &lt;code&gt;-i&lt;/code&gt; puts &lt;code&gt;rebase&lt;/code&gt; in "interactive mode". It starts off like the rebase discussed above, but before replaying any commits, it pauses and allows you to gently modify each commit as it's replayed. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;rebase -i&lt;/code&gt; will open in your default text editor, with a list of commits being applied, like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/2077/6953863/f6b1ab88-d891-11e4-97c1-e0630ac74e74.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/2077/6953863/f6b1ab88-d891-11e4-97c1-e0630ac74e74.png" alt="rebase-interactive1" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first two columns are key: the first is the selected command for the commit identified by the SHA in the second column. By default, &lt;code&gt;rebase -i&lt;/code&gt; assumes each commit is being applied, via the &lt;code&gt;pick&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;To drop a commit, just delete that line in your editor. If you no longer want the bad commits in your project, you can delete lines 1 and 3-4 above. &lt;/p&gt;

&lt;p&gt;If you want to preserve the &lt;em&gt;contents&lt;/em&gt; of the commit but edit the commit &lt;em&gt;message&lt;/em&gt;, you use the &lt;code&gt;reword&lt;/code&gt; command. Just replace the word &lt;code&gt;pick&lt;/code&gt; in the first column with the word &lt;code&gt;reword&lt;/code&gt; (or just &lt;code&gt;r&lt;/code&gt;). It can be tempting to rewrite the commit message right now, but that won't work&lt;code&gt;rebase -i&lt;/code&gt; ignores everything after the SHA column. The text after that is really just to help us remember what &lt;code&gt;0835fe2&lt;/code&gt; is all about. When you've finished with &lt;code&gt;rebase -i&lt;/code&gt;, you'll be prompted for any new commit messages you need to write.&lt;/p&gt;

&lt;p&gt;If you want to combine two commits together, you can use the &lt;code&gt;squash&lt;/code&gt; or &lt;code&gt;fixup&lt;/code&gt; commands, like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/2077/6953865/f6b605ca-d891-11e4-98cf-d567ca9f4edc.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/2077/6953865/f6b605ca-d891-11e4-98cf-d567ca9f4edc.png" alt="rebase-interactive2" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;squash&lt;/code&gt; and &lt;code&gt;fixup&lt;/code&gt; combine "up"the commit with the "combine" command will be merged into the commit immediately before it. In this scenario, &lt;code&gt;0835fe2&lt;/code&gt; and &lt;code&gt;6943e85&lt;/code&gt; will be combined into one commit, then &lt;code&gt;38f5e4e&lt;/code&gt; and &lt;code&gt;af67f82&lt;/code&gt; will be combined together into another. &lt;/p&gt;

&lt;p&gt;When you select &lt;code&gt;squash&lt;/code&gt;, Git will prompt us to give the new, combined commit a new commit message; &lt;code&gt;fixup&lt;/code&gt; will give the new commit the message from the first commit in the list. Here, you know that &lt;code&gt;af67f82&lt;/code&gt; is an "ooops" commit, so you'll just use the commit message from &lt;code&gt;38f5e4e&lt;/code&gt; as is, but you'll write a new message for the new commit you get from combining &lt;code&gt;0835fe2&lt;/code&gt; and &lt;code&gt;6943e85&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When you save and exit your editor, Git will apply your commits in order from top to bottom. You can alter the order commits apply by changing the order of commits before saving. If you'd wanted, you could have combined &lt;code&gt;af67f82&lt;/code&gt; with &lt;code&gt;0835fe2&lt;/code&gt; by arranging things like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/2077/6953864/f6b4a9d2-d891-11e4-9ac9-10039c031d06.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/2077/6953864/f6b4a9d2-d891-11e4-9ac9-10039c031d06.png" alt="rebase-interactive3" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
&lt;a id="fix-an-earlier-commit" class="anchor" href="#fix-an-earlier-commit" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Fix an earlier commit&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You failed to include a file in an earlier commit, it'd be great if that earlier commit could somehow include the stuff you left out. You haven't pushed, yet, but it wasn't the most recent commit, so you can't use &lt;code&gt;commit --amend&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git commit --squash &amp;lt;SHA of the earlier commit&amp;gt;&lt;/code&gt; and &lt;code&gt;git rebase --autosquash -i &amp;lt;even earlier SHA&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; &lt;code&gt;git commit --squash&lt;/code&gt; will create a new commit with a commit message like &lt;code&gt;squash! Earlier commit&lt;/code&gt;. (You could manually create a commit with a message like that, but &lt;code&gt;commit --squash&lt;/code&gt; saves you some typing.)&lt;/p&gt;

&lt;p&gt;You can also use &lt;code&gt;git commit --fixup&lt;/code&gt; if you don't want to be prompted to write a new commit message for the combined commit. In this scenario, you'd probably use &lt;code&gt;commit --fixup&lt;/code&gt;, since you just want to use the earlier commit's commit message during &lt;code&gt;rebase&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rebase --autosquash -i&lt;/code&gt; will launch an interactive &lt;code&gt;rebase&lt;/code&gt; editor, but the editor will open with any &lt;code&gt;squash!&lt;/code&gt; and &lt;code&gt;fixup!&lt;/code&gt; commits already paired to the commit target in the list of commits, like so:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.githubusercontent.com/assets/2077/6953862/f6a7a1d8-d891-11e4-8784-c32262ff54da.png" target="_blank"&gt;&lt;img src="https://cloud.githubusercontent.com/assets/2077/6953862/f6a7a1d8-d891-11e4-8784-c32262ff54da.png" alt="rebase-autosquash" style="max-width:100%;"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When using &lt;code&gt;--squash&lt;/code&gt; and &lt;code&gt;--fixup&lt;/code&gt;, you might not remember the SHA of the commit you want to fixonly that it was one or five commits ago. You might find using Git's &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;~&lt;/code&gt; operators especially handy. &lt;code&gt;HEAD^&lt;/code&gt; is one commit before &lt;code&gt;HEAD&lt;/code&gt;. &lt;code&gt;HEAD~4&lt;/code&gt; is four commits before &lt;code&gt;HEAD&lt;/code&gt; - or, altogether, five commits back. &lt;/p&gt;

&lt;h2&gt;
&lt;a id="stop-tracking-a-tracked-file" class="anchor" href="#stop-tracking-a-tracked-file" aria-hidden="true"&gt;&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;&lt;/a&gt;Stop tracking a tracked file&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You accidentally added &lt;code&gt;application.log&lt;/code&gt; to the repository, now every time you run the application, Git reports there are unstaged changes in &lt;code&gt;application.log&lt;/code&gt;. You put &lt;code&gt;*.log&lt;/code&gt; in the &lt;code&gt;.gitignore&lt;/code&gt; file, but it's still therehow do you tell git to to "undo" tracking changes in this file?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Undo with:&lt;/strong&gt; &lt;code&gt;git rm --cached application.log&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's happening:&lt;/strong&gt; While &lt;code&gt;.gitignore&lt;/code&gt; prevents Git from tracking changes to files or even noticing the existence of files it's never tracked before, once a file has been added and committed, Git will continue noticing changes in that file. Similarly, if you've used &lt;code&gt;git add -f&lt;/code&gt; to "force", or override, &lt;code&gt;.gitignore&lt;/code&gt;, Git will keep tracking changes. You won't have to use &lt;code&gt;-f&lt;/code&gt; to add it in the future.&lt;/p&gt;

&lt;p&gt;If you want to remove that should-be-ignored file from Git's tracking, &lt;code&gt;git rm --cached&lt;/code&gt; will remove it from tracking but leave the file untouched on disk. Since it's now being ignored, you won't see that file in &lt;code&gt;git status&lt;/code&gt; or accidentally commit changes from that file again.&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;That's how to undo anything with Git. To learn more about any of the Git commands used here, check out the relevant documentation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://git-scm.com/docs/git-checkout"&gt;checkout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://git-scm.com/docs/git-commit"&gt;commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://git-scm.com/docs/git-rebase"&gt;rebase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://git-scm.com/docs/git-reflog"&gt;reflog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://git-scm.com/docs/git-reset"&gt;reset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://git-scm.com/docs/git-revert"&gt;revert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://git-scm.com/docs/git-rm"&gt;rm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content>
    <media:thumbnail url="https://avatars0.githubusercontent.com/u/2077?v=3&amp;s=60"/>
    <author>
      <name>jaw6</name>
    </author>
  </entry>
</feed>
