時々、コミットの準備ができていないが別のワークステーションまたはラップトップで完了する必要があるワークステーションで、コミットされていないコードを持つという問題に遭遇します。
「ソフトコミット」や、変更を別のマシンに転送して他の場所で動作させる他の方法など、この問題の解決策はありますか?
適切に実装されていない変更をコミットしてプッシュすることを強制されないようにしたいと思います。
git stash
...?
時々、コミットの準備ができていないが別のワークステーションまたはラップトップで完了する必要があるワークステーションで、コミットされていないコードを持つという問題に遭遇します。
「ソフトコミット」や、変更を別のマシンに転送して他の場所で動作させる他の方法など、この問題の解決策はありますか?
適切に実装されていない変更をコミットしてプッシュすることを強制されないようにしたいと思います。
git stash
...?
回答:
以下は、ローカルリポジトリが別のサーバー(たとえば、github)のリポジトリのクローンであることを前提としています。また、アップストリームサーバーに変更を加える権限があること。私の例では、このアップストリームリポジトリを「オリジン」と呼んでいます。実行git remote show
して他のリポジトリを一覧表示します。これにより、そのリポジトリの名前に関するヒントが得られる場合があります。
ブランチを作成することをお勧めします。別のマシンでブランチをチェックアウトできます。実際、作業を開始してすぐにブランチを作成する場合、安定したコードセットがなくても、ブランチに「コミット」し、作業の証跡とバックアップを作成できます。作業に満足したら、それを「マスター」ブランチにマージして戻すことができます。
git checkout -b MyNewBranch
git push origin MyNewBranch
git checkout MyNewBranch
git checkout master
git merge MyNewBranch
git branch
git branch -d master
は」ということに関して、私は混乱しています、それはgitにmasterブランチを削除するように頼まないのですか?? (とにかくgitブランチマニュアルを読むことで得られる印象です)
を使用git diff
してパッチを作成し、それを他のマシンに適用できます。または、一時コミットを作成してから、他のマシンからプルすることができます。他のマシンに一時ブランチを作成し、そこに一時コミットをプッシュしてから、ブランチを削除することもできます。
私のお気に入りの方法は2番目の方法です。一時的なコミットを作成してから、別のマシンに移動して次のようなことを行います。
$ git fetch ssh://first_machine/path/to/repo whatever_branch_i_was_working_on
$ git reset --hard FETCH_HEAD
$ git reset HEAD^
git format-patch
ですか?
git diff
。私が欠けているものはありますか?
git format-patch deadbee..badcab1e
- .patch
ナイスネームとコミットメッセージが保存された状態で、コミットごとにファイルを個別に作成します。
簡単なアプローチは、あなたが説明するものです。.git
隠しディレクトリとプロジェクトファイルを別のマシンにコピーし、そこでコミットして終了するか、そのまま作業を続けることができます。
.git
ディレクトリは、あなたのgitの履歴が保持されているので、実際のファイルと一緒にこれを保存すると、プロジェクト全体の歴史はそのまま維持しています。
元のマシンを永続的に使用している場合は、おそらくこのアプローチをお勧めします。
他の人が答えたように、Gitを使用すると、個人ブランチの未完成のコードを気にする必要はありません。ただし、何らかの理由で、未完成の作業がメインのレポに触れることを本当に望まない場合は、Gitの分散された性質を利用できます。
git bundle
中央リポジトリなしで簡単に変更を渡すことができるという簡単なツールがあります。まず、レポジトリのクローンを作成します。
git clone https://github.com/octocat/Spoon-Knife.git working_copy_1
cd working_copy_1
いくつかの変更を加えて、一時的なブランチにコミットします。
git checkout -b tmp_branch
git commit -a -m "temporary changes"
次に、変更をバンドルします。
git bundle create ../tmp.bundle tmp_branch
これで、新しいマシンにメールで送信できるバンドルファイルが作成されました。そこでどのように使用しますか?新しい作業コピーを作成しましょう:
cd ..
git clone https://github.com/octocat/Spoon-Knife.git working_copy_2
cd working_copy_2
バンドルを別のリモートとして扱う必要があるため、バンドルから変更を取得できます
git remote add tmp ../tmp.bundle
git fetch tmp
全体のポイントはトレースを残さずに変更を転送することだったので、一時コミットを失うために作業コピーにそれらを押しつぶしたいと思います。
git merge tmp/tmp_branch --squash
あとは、一時的なリモートを削除するだけです。
git remote remove tmp
ビオラ!変更は、ブランチもコミットも残さずに、新しい作業コピーに転送されました!
しかし、本当に-このプロセスは非常に長くて面倒です。これはGitであり、SVNではありません。個人のブランチを中央リポジトリにプッシュしない理由はないはずです。