質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.98%

データを変更せずブランチを切り替えたい

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,708
退会済みユーザー

退会済みユーザー

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 も初心者なのでどう開発環境を作っていいのかまったく分からないです…

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

基本的に、ブランチ切るとかチェックアウトとかはローカルリポジトリに対してやるもんで、
一通り操作が終わったあとに、リモートにpushするもんですぜ

リモートはあくまでリポジトリを保存しておく場所で、基本リモートを操作することは無いと思っておけばいいかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/10 13:56

    うーん…  別の入門サイトをいくつかよんでみたんですけど
    結局まだどういう手順で作業するのがいいのかわからない…

    おなじウェブアプリに対して複数の作業を並行でやっているときに

    ある作業ではファイル A をさわってて
    別の作業で ファイル B をさわってて

    作業フォルダを完全にわける(先にブランチをきる)と動作検証のときに毎回開発環境一式きりかえないといけなくなって
    仮想環境の立ち上げ直しをしないといけないので
    検証環境を起動したままにしようとするとどうしても同じフォルダのファイルをさわりたくなる

    で作業がおわった段階で A だけの差分を push したいってなったとき B に変更があったら毎回 B を保存して clone からやりなおし?
    さすがに世の中のエンジニアがそんなことしてるとは思えないんだけど

    git フォルダでは作業せずに
    もう1度作業フォルダにコピーしてそっちで作業したあと
    push 直前に develop を最新にして A のファイルだけ上書きして commit push やるのがいいのかな
    自分が思いつくのはこれくらいだけどそれって自分でバックアップとってるだけで git 使ってる意味がない気がします

    キャンセル

  • 2018/08/10 14:09

    Gitでは、ブランチという枝をいくつも作って、並行していくつもの修正を行えるようになってます
    で、プログラマごとにブランチを作って、それぞれ修正していきます
    各ブランチで修正が完了すれば、マスター(本流)ブランチに、それぞれのブランチの内容をマージ(統合)していきます

    Gitは突き詰めると難しいです。とにかくそこらのキーワードでぐぐって記事を読みまくらないと理解できませんね
    #私でも全容がわかっているとはとてもいえませんw

    キャンセル

  • 2018/08/17 00:07

    https://teratail.com/questions/141536
    から参照されてきたのでこっちに補足しておくと、

    >おなじウェブアプリに対して複数の作業を並行でやっているときに

    普通にbranchを分けて作業します。作業が行ったり来たりするときはcommit。必然的にcommt粒度が小さくなってよいです(gitはcommitをくっつけるのは簡単だけど分離させるのは大変なので小さすぎて困ることはない)。それでもcommitするまで行かないときはgit stashを使いますが、GUIなgitツールを使ってないとstashしていることを忘れがちです(いや、git ps1とかあるけどさ)。

    このとき複数のbranchで同じファイルをいじるとmergeが大変なので必然的に作業対象のファイルも小さくなっていきます。可読性まで向上するのでいいですね!

    まあ中にはsvnとかいう前世紀の(比喩)VCSの習慣に囚われた開発をしているところもあるのでそういうときは(察してください)

    キャンセル

0

まず、checkoutはブランチの切り替えです。ブランチ名の変更ではありません。
ワークスペース(ローカル上のファイル)がそのブランチの内容に上書きされます。

error: Your local changes to the following files would be overwritten by checkout:

このエラーメッセージは「コミットしてない変更があるよ。checkoutするとこのファイルの内容が上書きされちゃうからやめといたよ」と言っています。
なのでstashとかで一旦変更を退避して、変更が無いようにしてから改めてcheckoutし直せばいいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/10 10:57

    checkout は実際にデータの変更までされるんですか…
    最初に入門サイトをよんだときに checkout でブランチ名を変更して〜みたいなことをかいてるサイトがあったのでそういう認識をしていました
    そうなるとますます pull clone merge checkout の区別がつかなくなりそうです

    結論としては1度変更を退避なり破棄なりでデータ自体をリモートの状態にもっていくしかないんですね
    データはそのままリポジトリだけをリモートの状態にもっていって
    コミットするときに自分の変更ファイルだけを反映させたかったんですが…

    ありがとうございました
    今度から最初にブランチをするように気をつけます

    キャンセル

  • 2018/08/10 11:46

    > ブランチ名を変更して〜
    そんな説明があったんですか?「ブランチを変更して〜」ならまだわかりますが。

    > pull clone merge checkout の区別
    pull/merge/fetchの違いや、checkout/resetの違いなんかは難しいと聞きますが、それら(特にclone)の区別がつかないならどこか根本のところで間違った理解をされているような気がします。一度他の入門サイトなりで勉強してみてはどうでしょうか。
    コマンドに忌避感が無いなら https://git-scm.com/book/ja は読んだ方がいいです。

    キャンセル

  • 2018/08/17 00:01

    なんかgit checkout -bのことかなと邪推

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る