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


20

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

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

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

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

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

前もって感謝します!



5
@DavidArno:クロスサイトの複製だとは思わない。StackOverflowの質問は「Can I do X」に関するもので、これは「Xは良い習慣ですか」に関するものです。少なくとも、問題の根本的な原因は異なります。
グレッグブルクハート

7
@DavidArnoで最後にチェックした「既にSOで回答済み」は、質問を終了する理由ではありません。
ラバーダック

回答:


28

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

面倒な未完成の作業をコミットしても構いません。トピックブランチで作業を行います。早期にコミットし、頻繁にコミットします。コードをいつコミットするかを読んでくださいいつコミットするかに関するいくつかのガイドライン。特にGitの場合は、トピックブランチにコミットし、必要な回数だけプッシュします。

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


6
私はそれをもっと強く言うでしょう:masterブランチで動作せ、常にtopicブランチを使用します。あなたが適切と思うようにそれにコミットし、恐れることなくそれを押してください。変更に満足したら、それをマスターにマージします。
9000

素晴らしいアドバイス!コミットにコメントを追加する必要があるため、大きな混乱が発生する可能性があり、文字通り「進行中のタスク」またはそのようなものになることがあると思います。そして、はい、私はこのブランチで一人で働いているので、あなたが言ったことはすべて理にかなっています!
レアンドロ


2
@Leandroコミットメッセージは、意味のある限りアトミックで明確でなければなりません。たとえば、WIPであっても、たとえば「ページリクエストを処理するためのコントローラーの追加-WIP」と言うことができます。コミットメッセージは、プロジェクトに対して行われた変更の検索可能な履歴も提供します。「WIP」の10回のコミットは、例えばユーザーの取り扱いを取り巻く変化を探している人の助けにはなりません。
ベン

7

スタッシュは、ブランチをいじりながら物を置く一時的な場所として、ローカルでの使用を目的としています。

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

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


1
慣れるのはお勧めしませんが、プッシュに--amendは必要--forceです。スローアウェイブランチにのみコミットすることをお勧めします。
leftaroundabout

1

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。これは明らかに理想的ではありません...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.