ブランチを作成せずに、マスターブランチ上でコードを書いてしまった
万が一、ブランチの作成を忘れても解決する手段はふたつあります。
- 書いているコードを作成したブランチに引き継ぐか
- 0からコードを書き直すか
以下の状況は、トピックブランチの作り忘れによりmasterブランチで作業を進めている例です。
こんな時は、ひとまずこの状態からブランチ(例ではブランチ作成忘れ)を作成します。すると以下のような選択肢が出てきます。
表記 | 意味 |
---|---|
Leave my changes on master | 元のブランチで書いていたコードを保留にして、新しいブランチで0からコードを書く |
Bring my changes to (ブランチ名) | 元のブランチで書いていたコードを新しいブランチに引き継ぐ |
上記の例で言うと、「元々別のブランチで作成したかったのでBring my changes to ブランチ作成忘れ」を選択することになります。そうすると、さきほどの変更修正は新しいブランチへ移動します。
では、Leave my changes on masterを選んだら、今まで書いていたコードは消えるのか?というと
これは保留になっています。
一度masterブランチに戻ってみるとStashed Changesと書かれた記述が増えています。
ここをクリックし、Restroというボタンを押すと、コードの復旧ができます。
ファイルの同時編集をした場合
複数人で作業していたり、複数のブランチにまたがって作業をすると出てくるファイルの同時修正というものがあります。
これをコンフリクトと言います。
コンフリクト発生時のポイントを把握しましょう。
- なぜ、コンフリクトが発生したのかを明確にすること。
- 同じ原因のコンフリクトを発生させないこと。
- 複数人での開発でコンフリクトが発生した場合は、独断で解消しようとせず他のファイル編集者と相談して解消すること。
ではここからはコンフリクトの発生状況を見て行きます。
同じファイルを別の人がすでに修正していてマージできない
2つブランチで同じファイルを作業してしまったため、マスターファイルの辻褄が合わず、コンフリクトが発生することがあります。
すると、ブラウザエディタ上でマージしようとすると、このような画面が出ます。
解決法
上記に出ている「Resolve conflicts」をクリックします。
すると以下のような画面が出るので、ここで修正をしていきます。
コンフリクトの対象ファイルが複数ある場合は、左側に表示されます。
解消したいファイル名をクリックすると、そのファイルの内容が表示されます。
また、対象が複数の場合は、ファイルごとに「Mark as resolved」をクリックする必要があります。
この画面では通常通り修正ができますので、ここで本来の表記になおします。
できたら「Mark as resolved」をクリックします。
画面が切り替わり、「Commit merge」と表示されるのでクリックします。
これで通常のmerge画面に戻れます。
最後にマスターブランチでのpullを忘れずに。
誤った情報をプッシュしてしまった
gitではpushした情報をローカルリポジトリに戻すことはできないです。
「pushする前の作業中のブランチは正しいか」必ず確認することが大切です。
それでも間違った時、ローカルにその情報は戻せませんが、リモートになる誤ったcommit情報の取り消しはできます。
解決法
commitを消すにはrevertを使います。
revertは、commitを削除するのではなく、「指定するcommitを取り消すためのcommit」を追加で行います。
commitされた変更と逆になる変更を追加することで、commitを取り消します。
例えば以下のAファイルが間違えてpushしたファイルだとします。
<button>
<%= link_to 'button', '#' %>
</button>
こっちが正しい形のBファイルだとします。
<header>TopPage</header>
<button>
<%= link_to 'button', '#' %>
</button>
TopPage を追加したかったけど忘れてしまった、みたいなパターンです。
すでにAファイルがpushされた状態です。これを取り消したい場合、現時点でBファイルの形に編集します。
編集後、commit + pushします。
ブラウザを確認すると" TopPage "の削除が反映されてますが、これでは追加した意味が、、、
となってしまいます。
そこで必要になる作業がまだあります。
GitHubDesktopの「History」をクリックし、一つ前にcommitしたファイルを右クリックします。
選択肢が出てきますが、その中で一番上の「Revert this Commit」をクリックし、「Push origin」を押します。
これでリモートリポジトリを確認すると、Bファイルの形で戻っているはずなので確認しましょう。
まとめ
操作にミスが会ったときに、パニックになってさまざまなコマンドを打ちまくらないこと。
場合によっては貴重なコードが消えてしまう可能性もあり!