From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on sa.int.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-0.2 required=5.0 tests=AWL,BAYES_00, FH_DATE_PAST_20XX autolearn=no version=3.2.5 Date: Sat, 2 Jan 2010 12:21:40 +0200 From: Michael Shigorin To: ALT Linux Team development discussions Message-ID: <20100102102139.GE21598@osdn.org.ua> Mail-Followup-To: ALT Linux Team development discussions Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.4.2.1i Subject: [devel] [git-*] add --patch, stash, rebase --interactive X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Jan 2010 10:21:55 -0000 Archived-At: List-Archive: List-Post: On Fri, Jan 01, 2010 at 01:26:15PM +0300, Денис Смирнов wrote: > >> Переписывание истории -- один из очень ценных инструментов в > >> git, позволяющий публиковать красивые репозитории а не > >> нечитаемый кошмар :) > MS> Напомню также: http://tomayko.com/writings/the-thing-about-git > MS> (git add --patch, git rebase --interactive, git stash) > Вот к этим волшебным приемам пока не привык :( === git add --patch === Например, налепил на скору руку коммитов для фиксации состояния и читабельного git diff, а потом затарил на всякий, reset --soft на последний нормальный коммит, делаешь git status и смотришь: этот файлик целиком git add, а в этом правки, которые растащить по разным коммитам бы надо, вот его git add --patch и по hunk'ам принимаешь или оставляешь на потом. Набил будущий коммит в индекс, git commit и дальше по git diff. === git stash === Делаешь что-то и либо откладываешь, либо мысль пришла, либо заметил, что у майнтейнера гит обновился и надо бы сперва смержиться, а потом продолжать -- но ещё не дописал "до точки" и коммит делать не хочется, можно забыть потом переделать. Запихиваешь (stash) на "полку" всё незакоммиченное, делаешь мыслю, мержишь апстрим либо что ещё там -- и git stash apply, который сбегает в заначку и приспособит её поверх текущего состояния. Только в случае с "откладываешь" перед apply стоит git stash list, вдруг там больше одного набилось. === git rebase --interactive === А вот этого зверя раз или два попробовал, но у меня обычно не бывает надобности в том, что он позволяет -- в т.ч. редактирование последовательности коммитов, а также их слияние или разбиение -- перевод куска по ссылке со ссылки выше: Пусть надо переработать 10 последних патчей, делаем: $ git rebase -i HEAD~10 что запустит $EDITOR и покажет нечто вроде: # Rebasing 16d3800..14f3d11 onto 16d3800 # # Commands: # pick = use commit # edit = use commit, but stop for amending # squash = use commit, but meld into previous commit # # If you remove a line here THAT COMMIT WILL BE LOST. # pick 6270640 Simplify write_tree using strbuf's. pick 27c528a Further strbuf re-engineering. pick fd82c9a Eradicate yet-another-buffer implementation in buitin-rerere.c pick eee488f More strbuf uses in cache-tree.c. pick 16878b5 Add strbuf_rtrim and strbuf_insert. pick e9081af Change semantics of interpolate to work like snprintf. pick 99c3ef5 Rework pretty_print_commit to use strbufs instead of custom buffers. pick 203db5d Use strbuf_read in builtin-fetch-tool.c. pick a20d939 Use strbufs to in read_message (imap-send.c), custom buffer--. pick 14f3d11 Replace all read_fd use with strbuf_read, and get rid of it. ~ ~ Здесь можно заменить pick на edit, если хочется поменять что-нибудь в коммите, или на squash, чтобы объединить его с тем, который строчкой выше. Подсказка не говорит явно, но возможно также и изменять порядок коммитов. -- ---- WBR, Michael Shigorin ------ Linux.Kiev http://www.linux.kiev.ua/