質問: gitの使い方になれていなくてよくわからないので教えてください 最初に develop branch を clone してリポジトリ作成 ローカルの develop ブランチで作業 ひととおり作業完了したところで リモート (bitbucket) で feature/xxx とか適当にブランチをきって > > git fetch && git checkout feature/xxx > > > でリポジトリの名前をかえてから > > git add xxx > > > で反映させるファイルを選んで > > git commit -m 'コメント' > > > でブランチの中身を変更して > > git push > > > してプルリクエストをしたんですが そのまま次の作業を feature/xxx のブランチままやってしまって リモート (bitbucket) で develop から feature/yyy というブランチをきって > > git fetch && git checkout feature/yyy > > > でローカルの名前をかえようとしたところ > > error: Your local changes to the following files would be overwritten by checkout: > > > となってローカルブランチの名前を変更できなくなりました 1度ファイルを退避させてから pull して変更を破棄するしかないでしょうか あと本来 git ってどういう手順で使うのが正しいのでしょうか まだそれぞれのコマンドが何をするのかのイメージもあいまいで clone: データとブランチ名をローカルにもってくる branch: 新しいブランチ名を作る fetch: リモートで作ったブランチ名を origin(ローカルにあるリモートのキャッシュみたいなの?) にもってくる checkout: ローカルのブランチ名を変更する pull: リモートのデータをローカルにもってくる commit: ブランチに新しいデータを反映させる push: データをリモートに反映させる ぐらいの認識なんですがなんで名前を変更するだけの checkout ができないんでしょうか Windows でいうところの他のプログラムが使っているため変更できません みたいな感じでしょうか clone pull とあと使ったことがないけど merge もどう違うのかよくわかってないんですよね 追記: すいません やっぱり何も解決してなかったのでもうちょっと回答を待たせてください 作業中のファイル内容は一切変更せずにコミット履歴だけ特定のブランチのものに変更することはできないでしょうか (modifyがちらばってるけどcommitはできる状態) 作業中に急遽別の作業がはいった場合にあきらかに作業中の内容と依存関係がないとわかってるとき 動作中のテスト環境を壊さずにそのまま動作テストしてコミットプッシュしたいのです あと細かくコミットしすぎたのでコミットまとめようとして間違ってブランチ前のコミットまで消したときにコミット履歴だけ戻したいとか 追記: 案の定 docker を起動したままデータごとブランチをきりかえたところ docker コンテナが消せなくなってトラブルにはまってしまった docker でウェブ開発をしてる人はどうやって git でブランチをきりかえてるんでしょうか docker の設定ファイルやマウントしてるフォルダごとデータが変更されてしまったら 毎回 docker の設定からやりなおしになるしイメージファイルも戻ってしまうので データベースのマイグレーションや Gem のインストールをしなければいけなくなるし... 絶対こんな効率悪いことはしてないと思うんですけど docker も git も初心者なのでどう開発環境を作っていいのかまったく分からないです...
回答: まず、`checkout`はブランチの切り替えです。ブランチ名の変更ではありません。 ワークスペース(ローカル上のファイル)がそのブランチの内容に上書きされます。 > > error: Your local changes to the following files would be overwritten by checkout: > > > このエラーメッセージは「コミットしてない変更があるよ。checkoutするとこのファイルの内容が上書きされちゃうからやめといたよ」と言っています。 なので`stash`とかで一旦変更を退避して、変更が無いようにしてから改めて`checkout`し直せばいいです。