Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

作業途中の変更内容を保存する

More than 5 years have passed since last update.

以前、gitの作業状態を他のリポジトリにコピーするという記事を書きましたが、これは既にリポジトリに追加していあるファイルのみ有効で、まだ一度もステージしていないファイルについてはコピーできませんでした。最近、別のやり方でステージングしていないものも含めて変更内容を保存する方法を思いついたので書きます。

~/.gitscripts 以下に git-xxx というシェルスクリプトを作成することで git xxx というサブコマンドを追加できます。今回はそれを利用して git port というコマンドを作成します。

git-port
#!/bin/sh

date=`date "+%Y%m%d-%H%M%S"`
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
host=`hostname -s`

git checkout -b "wip-${date}"
git add .
git add -u

git commit -m "[WIP] temporary commit from ${branch} on ${host}"

gistにも投稿しています

このシェルスクリプトは、 WIP-日付-時刻 というブランチを作成し、現在の変更内容をコミットします。(WIPはWork In Progressの略です)
作成されたWIP-xxブランチをリモートにpushして、差分を移したい他の作業環境に移動したら、元のブランチとこのブランチの両方をpullします。
そして差分を適用したいブランチに切り替えて、このコミットをcherry-pickすれば、差分をそっくり適用することができます。
適用した後は git reset HEAD^1 でコミットを取り消せば、最新のコミットからの差分がステージされていない状態になるので、以後は作業を続行して任意のコミットを重ねることができます。
ただし、リモートリポジトリを経由するのでCIを設定している場合にビルドが走ってしまうなどの弊害はあるので注意して下さい。

nysalor
Rubyで仕事しています。宗派はEmacs教矢印キー派です。
http://blog.larus.jp/
r-n-i
二つのアプリ・サービス、CODE、Mycomment を開発・運営しています。ユーザーに対してはポイントが貯まる家計簿・ポイントが貯まる調査アンケートを提供し、顧客企業に対してはインターネットを活用したマーケティングリサーチ、販売促進プロモーションを提供しています。
https://r-n-i.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away