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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

BitBucket

BitBucketは無料のリポジトリ管理ホスティングサービスです。 MercurialとGitのVCSに対応しています。プライベートリポジトリを、制限なく作成することが可能です。

Q&A

2回答

10217閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

BitBucket

BitBucketは無料のリポジトリ管理ホスティングサービスです。 MercurialとGitのVCSに対応しています。プライベートリポジトリを、制限なく作成することが可能です。

0グッド

0クリップ

投稿2018/08/09 09:05

編集2018/08/13 08:18

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

投稿2018/08/09 09:25

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/09 09:49 編集

すいません checkout はローカルです リモートの作業(UI操作) は branch のみでコマンドはすべてローカルでうってると思ってください 最初に最低限教えてもらったのが clone の仕方とブランチの切り方で  itBucket 上で develop からブランチをきって fetch & checkout する ブランチの名前の付け方 push したあとはプルリクエストを出す というだけであとは調べてくださいということだったので… 今の開発現場が特殊なのでしょうか ただとりあえず指示は守らないといけないのでリモートでブランチを切るのは必須とさせてください 最終的に同じ状態のリモートリポジトリを再現できるのであればどういう手順でもいいとは思うのですが とりあえず現状ローカルのブランチ名が変えられなくてcommitもpushもできなくて困ってます ファイルをすべて保存して作業ディレクトリを消して clone し直してから 変更したファイルを戻すぐらいしか思いつかないのでその方向ですすめてますが、 今後同じ状態になった場合にどうすればいいのか教えていただけるとありがたいです
y_waiwai

2018/08/09 09:52

そうなったらcloneするしか、というかんじはしますが、、まあ、いろいろやればいろいろできるんでしょうけど。 まあ、ぐぐってGitの初心者向けの解説読みまくる、ってところでしょうか
退会済みユーザー

退会済みユーザー

2018/08/10 04:56

うーん…  別の入門サイトをいくつかよんでみたんですけど 結局まだどういう手順で作業するのがいいのかわからない… おなじウェブアプリに対して複数の作業を並行でやっているときに ある作業ではファイル A をさわってて 別の作業で ファイル B をさわってて 作業フォルダを完全にわける(先にブランチをきる)と動作検証のときに毎回開発環境一式きりかえないといけなくなって 仮想環境の立ち上げ直しをしないといけないので 検証環境を起動したままにしようとするとどうしても同じフォルダのファイルをさわりたくなる で作業がおわった段階で A だけの差分を push したいってなったとき B に変更があったら毎回 B を保存して clone からやりなおし? さすがに世の中のエンジニアがそんなことしてるとは思えないんだけど git フォルダでは作業せずに もう1度作業フォルダにコピーしてそっちで作業したあと push 直前に develop を最新にして A のファイルだけ上書きして commit push やるのがいいのかな 自分が思いつくのはこれくらいだけどそれって自分でバックアップとってるだけで git 使ってる意味がない気がします
y_waiwai

2018/08/10 05:09

Gitでは、ブランチという枝をいくつも作って、並行していくつもの修正を行えるようになってます で、プログラマごとにブランチを作って、それぞれ修正していきます 各ブランチで修正が完了すれば、マスター(本流)ブランチに、それぞれのブランチの内容をマージ(統合)していきます Gitは突き詰めると難しいです。とにかくそこらのキーワードでぐぐって記事を読みまくらないと理解できませんね #私でも全容がわかっているとはとてもいえませんw
yumetodo

2018/08/16 15:07

https://teratail.com/questions/141536 から参照されてきたのでこっちに補足しておくと、 >おなじウェブアプリに対して複数の作業を並行でやっているときに 普通にbranchを分けて作業します。作業が行ったり来たりするときはcommit。必然的にcommt粒度が小さくなってよいです(gitはcommitをくっつけるのは簡単だけど分離させるのは大変なので小さすぎて困ることはない)。それでもcommitするまで行かないときはgit stashを使いますが、GUIなgitツールを使ってないとstashしていることを忘れがちです(いや、git ps1とかあるけどさ)。 このとき複数のbranchで同じファイルをいじるとmergeが大変なので必然的に作業対象のファイルも小さくなっていきます。可読性まで向上するのでいいですね! まあ中にはsvnとかいう前世紀の(比喩)VCSの習慣に囚われた開発をしているところもあるのでそういうときは(察してください)
guest

0

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

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

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

投稿2018/08/09 10:24

u39ueda

総合スコア950

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/10 01:57

checkout は実際にデータの変更までされるんですか… 最初に入門サイトをよんだときに checkout でブランチ名を変更して〜みたいなことをかいてるサイトがあったのでそういう認識をしていました そうなるとますます pull clone merge checkout の区別がつかなくなりそうです 結論としては1度変更を退避なり破棄なりでデータ自体をリモートの状態にもっていくしかないんですね データはそのままリポジトリだけをリモートの状態にもっていって コミットするときに自分の変更ファイルだけを反映させたかったんですが… ありがとうございました 今度から最初にブランチをするように気をつけます
u39ueda

2018/08/10 02:46

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

2018/08/16 15:01

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問