LoginSignup
2
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-10-10

以前、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を設定している場合にビルドが走ってしまうなどの弊害はあるので注意して下さい。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2