🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Git

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Q&A

解決済

2回答

3012閲覧

GitHubに間違えてプッシュしたものを修正したい

wawa226

総合スコア1

Git

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

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

0グッド

2クリップ

投稿2021/02/03 07:52

前提・実現したいこと

ファイル名を変更してpushしたが、GitHub上で「fuga-fuga.php→FugaFuga.php」とならず、
FugaFuga.phpが新しいファイルファイルして保存されてしまったものを戻して、ファイル変更の履歴としたい。

以下が上記の結果となった操作手順です。
###操作手順
①ファイル名を編集(アッパーキャメルケースへ変更)
A:hoge.php→Hoge.php
B:fuga-fuga.php→FugaFuga.php
②それらをコミット→プッシュ
③Bのみプッシュされた
(大文字小文字の変化を検知しない設定だったため。)
④大文字小文字の変化を検知する設定にした
⑤全てプッシュし直した
⑥GitHub上で「fuga-fuga.php→FugaFuga.php」とならず、
FugaFuga.phpが新しいファイルとしてプッシュされた

###予想
https://qiita.com/inductor/items/6d58afd9f6b741208439
を参考にさせていただきつつ、

予想では
①GitHub上でバージョンを戻す?
②ローカルにpullする
③コミットしなおす
④pushしなおす

とすればいいのかなと思っていのですが、間違っていたら余計ややこしいことになりそうなので
正解を知ってから試したいと思っています。

雑な操作の結果で招いてしまったことで大変お恥ずかしい限りではあるのですが、お答えいただけたら幸いです。

###環境
MacOSの標準のterminalです。

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

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

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

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

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

maisumakun

2021/02/03 07:55

間違った履歴を、消さなければならないのですか? (そうでないなら、通常は「正しいバージョンへ修正してコミットする」だけで済ませます)
wawa226

2021/02/03 08:06

ご意見ありがとうございます。 消す必要性は特にありません。 Git初心者でよくわかっていないのですが、 「正しいバージョンへ修正してコミットする」というのは、ローカルのバージョンを修正してリモートにpushすればいい。ということでしょうか。
maisumakun

2021/02/03 08:10

> 「正しいバージョンへ修正してコミットする」というのは、ローカルのバージョンを修正してリモートにpushすればいい。ということでしょうか。 そのとおりです。
wawa226

2021/02/03 08:14

わかりました。ありがとうございます。 今から実行してみます。
guest

回答2

0

ベストアンサー

1コミット分ならばgit commit --amendが便利です。

コミットの修正には git commit --amend が便利

しかし、この方法はコミット履歴の改ざんです。
Pushされた側のGitHub等のリポジトリサービスは
改ざんされたコミット履歴のPushをもらうと困るわけです。

なので強制Pushを使って
「良いから今から改変した歴史に合わせろ!」という命令を行う事になります。

bash

1# 追加でコードを修正したものをステージに上げる 2$ git add xxxx.file 3 4$ git commit --amend 5 6# -fオプションを行い強制Pushにする 7$ git push -f origin master

コミット履歴の改変は
自分一人しか触らないプロジェクトやブランチならば別に問題ありませんが、
他人も触る場合はかなりヤバいです。

下記はその内容と対策です。


一度失敗したコミット履歴をPushしてしまっている場合、
自分一人しか触らないプロジェクトやブランチ以外でコミット履歴を改ざんしてはいけません。

協業者がそのコミット履歴を落としているケースでは
自分と他人の所持しているコミット履歴が完全に分離してしまう為、
競合だらけで整合性を取ることが非常に難しくなってしまいます。

なので他人にPullされてしまっているケースでは
git revertという「やっぱりさっきのコミットは失敗だから無しにして!元のファイル達に戻して!」
という対消滅させるコミット履歴をぶつける事が一般的です。

こちらはコミット履歴に失敗コミットが残るので少々ダサいですが、
他のエンジニアがrevertのコミットを受け取れば、
Pullしてしまったコミットを打ち消してくれるのでコミット履歴の改ざんの問題は発生せず安全です。

必要に応じて使い分けてください。

投稿2021/02/03 09:39

編集2021/02/03 10:06
miyabi-sun

総合スコア21203

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

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

wawa226

2021/02/03 09:47 編集

ありがとうございます。他の方からご回答いただいた内容で試していますが、どうもうまくいきません。 ! [rejected] main -> main (non-fast-forward) 以下のようなエラーが出ます。 error: failed to push some refs to 'https://github.com/hogehoge/fugahoge.git hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. git revert を使う方法では、 ①git revert ②pull ③push という流れでしょうか。
miyabi-sun

2021/02/03 10:06

そういえば`-f`オプションに関して書き忘れていたなと思って追記しました。
wawa226

2021/02/03 10:15

ありがとうございます。 一応git revertの方法で進めたのですが、その際にも強制プッシュが必要でしょうか。
miyabi-sun

2021/02/03 11:01

revertの実態は修正したファイルの中身を昔のものに変更しますよという 普通のファイル上書きコミットと同じなので、強制プッシュは不要です。 普通にプッシュするだけで取り入れられるはずです。 強制プッシュの場合はPullを行わずに強制プッシュ revertの場合は普通のコミット履歴の積み重ねなので、Pull→Pushの流れを辿ってくださいね。
wawa226

2021/02/03 11:39

revert の後上記のようなエラーメッセージが出たのでpullしようとしたら以下のようなエラーメッセージが出ました。 error: Pulling is not possible because you have unmerged files. hint: Fix them up in the work tree, and then use 'git add/rm <file>' hint: as appropriate to mark resolution and make a commit. fatal: Exiting because of an unresolved conflict. 何か操作がまちがっていたのでしょうか。 もしそうならやり直す手段はありますか?
guest

0

投稿2021/02/03 08:04

y_waiwai

総合スコア88038

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

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

wawa226

2021/02/03 08:10

ご回答ありがとうございます。 こちらを参考にさせていただいて、 pushを取り消し→pushしなおすという手順で実行すればよろしいでしょうか。
y_waiwai

2021/02/03 08:38

そういうことですね
wawa226

2021/02/03 09:50

git revert [<commit>]でPushを取り消し、 git pushしようとしたら以下のエラーが出ました。 どこかでpullを挟むべきなのでしょうか。 ! [rejected] main -> main (non-fast-forward) 以下のようなエラーが出ます。 error: failed to push some refs to 'https://github.com/hogehoge/fugahoge.git hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問