0

私はセットアップした git ワークフローに喜んで慣れていました (または、その "gitting" はそれに慣れているのでしょうか?)、ちょうど今、ちょっとした障害に遭遇しました。dev ディレクトリと codebase ディレクトリ (私のライブ コード) があり、git リポジトリは dev ディレクトリにあります。マスター ブランチの現在のコードをデプロイするときの bash エイリアスがあります。

alias deploy='cd /my/path/codebase; git --git-dir=/my/path/dev/.git --work-tree=/my/path/codebase checkout -f master; cd -'

HEAD が master ブランチにある限り、問題なく動作します。しかし、ちょうど今、texlabels という別のブランチで作業していましたが、master の小さなバグを修正する必要がありました。そのため、すべてがコミットされていることを確認し、マスターをチェックアウトし、バグを修正し、修正をコミットしてから、デプロイを忘れないように texlabels ブランチに切り替えました。「問題ありません」と私は思いました。「エイリアスは明示的に master ブランチを要求しています。」確かに、私のコードベース ディレクトリは、本来あるべきものを正確に取得しました。しかし、現在、私の dev ディレクトリは git と同期していません。ファイルは texlabels ブランチと一致していますが、HEAD は master にあります。

すべてが安全にコミットされたことを知っていたので、別の「git checkout texlabels」を実行しようとしましたが、git グルはおそらくすでに知っているように、git は抗議して腕を組んだ:

エラー: 次のファイルに対するローカルの変更は、チェックアウトによって上書きされます:

...ファイル...

ブランチを切り替える前に、変更をコミットするか、隠しておいてください。

中止しています

ふん!texlabels を再度チェックアウトできるように、異なるファイルをコードベースから dev に手動でコピーできると思いますが、それはばかげているようです。そして、より大きな問題は、将来のために bash エイリアスに何を追加して、これが再び起こらないようにすることができるかということです。ええ、コミットしたらすぐにデプロイすることを忘れないでください。HEAD がどこにあるかを特定し、それをシェル変数に格納してから、現在持っているものを実行してから、HEAD を元の場所に戻す方法はありますか? または、HEAD をまったく移動せずにコードベース ディレクトリのファイルを取得する方法はありますか? エイリアスが、レポ ポインター、インデックス、または私の dev ディレクトリに正味の変更を加えることなく、最後のマスター コミットのファイルを取得できるとよいでしょう。

4

1 に答える 1

1

変更をスタッシュし、ブランチを変更して、スタッシュを再適用します。

git stash
git checkout texlabels
git stash apply

スクリプトを改善するには、次のことができると思います。

git archive master | tar x -C"/my/path/codebase"

これにより、master ブランチの内容がコピーされます。

于 2013-05-01T07:00:45.710 に答える