web-dev-qa-db-ja.com

git stashを使用してプロジェクトの進行中の変更を保存し、それをgithubにプッシュして他のコンピューターでアクセスする必要がありますか?

私はプロジェクトのいくつかの機能に頻繁に取り組んでいますが、コミットするのに十分な前に休憩を取る必要があります。しかし、私は毎日2つの異なるコンピューターを使用してコーディングしています(私のラップトップと私の研究室のデスクトップ)。例:自宅で機能の作業を行っているので、立ち止まってラボに行きます。

クラウド同期(Dropboxなど)とGitHubリモート追跡を混在させたくありません。

他のコンピューターにプルして作業を続行する目的でのみ、以前にコードの未完成の(乱雑な)状態をコミットしました(そしてプッシュしました)。私はこれが悪い習慣だと確信しています。

しかし、今日、私はgit stash少しグーグルした後。それは私が必要とするものに対する完璧な解決策のようです。

ただし、ドキュメントに変更をプッシュした後でgithubに送信されるかどうかは記載されていません。さらに、必要なモビリティを実現するためのより効率的な方法があるかどうかを知りたいです。

前もって感謝します!

20
Leandro

他のコンピューターにプルして作業を続行する目的でのみ、以前にコードの未完成の(乱雑な)状態をコミットしました(そしてプッシュしました)。私はこれが悪い習慣だと確信しています。

厄介な未完成の作業をコミットすることは問題ありません。トピックブランチで作業を行います。早い段階でコミットし、頻繁にコミットします。いつコミットするかについてのガイドラインについては、 コードをいつコミットするか? を参照してください。特にGitの場合は、トピックブランチにコミットし、必要なだけプッシュします。

このトピックブランチがあなたのためだけのものである場合は、壊れたコードをコミットしてプッシュしてください。壊れたコードをpushingして他の人が使用しているブランチに延期するだけです。自由に独自のコードを壊してください。

28
Greg Burghardt

Stashesは、枝をいじりながら物事を置く一時的な場所として、ローカルでの使用を目的としています。

ブランチで作業しているのがあなただけなら、壊れたコードをコミットしても問題はありません。同様の状況でコミットが壊れた場合は、他の場所でプルした後、git reset HEAD~1を実行して元に戻します。もちろん、場所を変更するときは、pullsおよびpushes--forceを使用する必要があります。

または、最初のコミットまで待機してgit commit --amendを実行します。または、機能ブランチをコミットするときに、壊れたコミットをすべて破棄します。または、履歴に明確にマークされたいくつかの壊れたコミットについて心配する必要はありません。適切な停止場所に行くまで、離れない傾向があるためです。オプションはたくさんあります。

7
Karl Bielefeldt

stashは、作業ディレクトリをクリーンアップして「ブランチのジャムを解除」する以外は、本当に満足できるものではありません。すぐに状態をstash popに戻さないと、状況が非常に混乱します。

保存する必要のある実際の作業がある場合は、永続的なリポジトリエントリに適していなくても、コミットする必要があります。実際、バージョン管理下にない状態で作業ディレクトリを離れることはありません。すべての変更を一時的なコミットとして保存するために (非常に単純なPythonスクリプト を使用しています)。これを試してみたい場合は、次の手順に従ってください。

  1. いくつかの未完成の作業を完了し、職場を離れようとしているときに、 git-tmp-commit を実行します。すべての変更を自動的に新しい一意のブランチにコミットします。
  2. このブランチをリモートにプッシュします。
  3. 去れ。
  4. 続行する場合は、リモートからそのブランチのクローンを再度作成します。 ccd スクリプトを使用してこれを行います。このスクリプトは、実際にすべてを最初から一時フォルダにチェックアウトします。最新のブランチを自動的に選択します...しかし、リポジトリを既存のクローンからブランチtemporary-commits/original-branch/YYYY-MM-DD...を手動でフェッチしてチェックアウトすることもできます。
  5. 最後に、git-tmp-commit -rを使用して変更を「コミット解除」します。これにより、元のブランチに戻ります (例:master)一時的なコミットの変更を作業ディレクトリに残します。これにより、適切なコミットの時間になるまで(または、一時的に再度終了する必要がある場合)、ここで続行できます。

スクリプトの現在の記述方法、これはチェックアウトリポジトリにブランチmasterがない場合にのみ機能します。したがって、疑問がある場合は、git branch -d masterを使用する必要があります。これは明らかに理想的ではありません...

1
leftaroundabout