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

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

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

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

Q&A

解決済

2回答

1367閲覧

masterブランチに変更したがマージせずにpushしてしまった場合

sanyagi_d_1

総合スコア10

Git

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

0グッド

0クリップ

投稿2020/03/08 12:42

Railsチュートリアル5章の勉強中にて、
$ git add -A
$ git commit -m "メッセージ"
$ git checkout master
$ git merge filling-in-layout
のところで
$ git merge
しか打なかったため、3章のwebアプリがHerokuにpushされてしまいました。

試したこと

git stash
git reset --hard
→error: The following untracked working tree files would be overwritten by checkout:
app/controllers/users_controller.rb
app/views/layouts/_footer.html.erb
app/views/layouts/_header.html.erb
test/controllers/users_controller_test.rb
test/integration/site_layout_test.rb
Please move or remove them before you switch branches.
要は5つのファイルがconfilctを起こしているのでしょうか?このような状況でfilling-in-layoutのブランチからmasterブランチにmergeする方法はありますか?

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

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

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

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

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

guest

回答2

0

5章というのはこれですね。

しか打なかったため、3章のwebアプリがHerokuにpushされてしまいました。

まずは落ち着いてください。
別にやるべき作業をやってないだけで、何も問題は発生していません。
これからやれば良いだけです。

安心する為に、少しGitの仕組みについて解説します。

まずGitというツールはファイルの世代管理ツールです。
git add [ファイル名]git commitで履歴に保存という形で履歴を積み上げます。

こうして積み上げた履歴は、何時でもgit logというコマンドで一覧として表示出来ますし、
git checkout [コミットのハッシュID]で当時のディレクトリ構成を再現して閲覧出来ます。

つまり、別に積み上げた履歴が消える訳でもなんでもありません。


$ git mergeしか打なかった

なーんだ、なら「早かれ遅かれ同じデータをマージしよう」としていたわけですね。

GitはSVN等の旧世代の世代管理ツールとは違う超最強のセールスポイントがあります。
それはマージがくっそ頭良くて、同時並行開発に極めて強いというポイントです。


ためしたこと

git stash git reset --hard

これらの作業は取り返しがつかないので、
試した内容の方がよほどやばいです。
幸いエラーが出て止まっていますので害はありません。

特にgit resetgit rebaseは積み上げたコミットを壊す行為なので
後戻り出来ません、今回の勉強用なら兎も角、業務では上司・先輩のよくわかっている人に相談しながらやってください。


5章の内容をざっくりみましたが、
まずはブランチ作ってますね。

Gitでバージョン管理をしているのであれば、これまでと同様、この時点で新しいブランチを作成するのがよいでしょう。

bash

1$ git checkout master 2$ git checkout -b filling-in-layout

これはmasterブランチのコミット履歴を起点にし、
masterブランチの複製でfilling-in-layoutを作るという命令になります。
その状態でmasterブランチでgit merge filling-in-layoutを実行しても何も起こりません。

何故か?
ゲームでLv50の勇者があるデータが1にあったとして、
2にデータをコピーして、ゲームを起動せずにまた1に保存し直したといってるわけですよね?
勇者のレベルはいくつですか?50に決まってますよね?

私がコマンド例を出しますので、それの通りに復旧して元の流れに戻ってください。

bash

1# 今作業中のブランチを確認する 2$ git branch 3* master <- *マークが今いるブランチの証 4 filling-in-layout 5 6# 現在のブランチを変える 7$ git checkout filling-in-layout 8 9# stashで退避したデータを戻す 10$ git stash pop 11 12$ git status 13# 編集したファイル内容が表示される 14 15# 業務では対象のファイルが何やっているかを確認したいから 16# 一括登録の-Aはあまり使わないかな 17$ git add [ファイル名] 18$ git add -A 19 20# 世代管理に追加 21$ git commit -m "メッセージ" 22 23# 世代が進んだ事を確認する(画面下部に:みたいな表示が出たらjkで上下スクロールし、qキーで脱出する) 24$ git log 25 26$ git checkout master 27 28$ git merge filling-in-layout

投稿2020/03/09 05:36

miyabi-sun

総合スコア21203

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

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

sanyagi_d_1

2020/03/09 08:15

回答ありがとうございます。実は朝に(master)$rm ファイル名で解決出来ていてお昼休憩に質問板更新しようとしたら無料wi-fiのエラーでつなげませんでした。。 なぜrmかと言うのは、checkoutしようとしたらエラーでmvかrmやれと言われたからです。
miyabi-sun

2020/03/09 08:19

なるほど、結局新規追加したファイルを`rm`コマンドで消去したんですね。 「しょうがないやり直すかぁ」というのもそれも一つの解決策だと思います。 業務でも消して作り直したほうが理解が進んでいる分、良いものが出来るので 時間的な成約がなければ書いたコードは諦めて消してしまうのも良いと思いますよ。
sanyagi_d_1

2020/03/09 08:25

今、自己解決方法を記入します。 チームで制作する場合はリーダーや自分より経験のある人に聞こうと思います。ありがとうございました。
guest

0

自己解決

$ git checkout filling-in-layoutで前のブランチに戻ろうとすると,
error: The following untracked working tree files would be overwritten by merge:
app/controllers/users_controller.rb
app/views/layouts/_footer.html.erb
app/views/layouts/_header.html.erb
test/controllers/users_controller_test.rb
test/integration/site_layout_test.rb
Please move or remove them before you merge.
となるので、
(master) $ rm app/controllers/users_controller.rb(以下4ファイル)
とするとcheckoutに成功。そこからmergeしました。
しょうもない質問でお騒がせして申し訳ありませんでした。

投稿2020/03/09 08:28

sanyagi_d_1

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問