Help us understand the problem. What is going on with this article?

【GitHub】端末がクラッシュ→別PCから開発を再開しようとしたらgit push出来なかったので対処した

はじめに

先日、メインのMacBookがクラッシュしたのでPCを変更するハメになりました:sob:

そこでGitHubのリモートリポジトリからデータを引っ張ってきて開発を再開するも、

git pushの段階でrejected

が出て詰まってしまったので解決まで対処した流れを共有します。

この記事が役に立つ方

  • メイン端末と別の端末から開発を進めようとしたらうまくgit push出来なくて詰まっている方

この記事のメリット

  • 急に端末がクラッシュしても(GitHubにデータがあれば)開発が再開出来る

環境

  • macOS Mojave バージョン10.14.6
  • シェル:zsh
  • Git:以下参照
❯ git --version
git version 2.21.0 (Apple Git-122.2)

対処した流れ 

1.リモートリポジトリのデータをダウンロード

まずはデータがないと始まりません。

自分のGitHubにあるデータを「Clone or Download」から「Download zip」でローカルにダウンロードし、所定のディレクトリに保存しました。

スクリーンショット 2019-11-20 1.24.49.png

スクリーンショット 2019-11-20 1.25.12.png

今思うとそもそもここは

git clone リモートリポジトリのURL

で引っ張っても良かったように思います。

2.git init

❯ git init
Initialized empty Git repository in /Users/作業ディレクトリ/.git/

3. ローカルで作業

いくつかファイルをいじり、キリがついたのでgit pushまでしようと考えました。

4.git add -A

❯ git add -A

addは完了。

5. git commit

❯ git commit -m "コミット名"

変更箇所が羅列される

commitも無事完了です。

6. 'git push'

❯ git push リモートリポジトリ名 master
fatal: 'リモートリポジトリ名' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

ここで「そんなリモートリポジトリなんてないよ!」と怒られました。

そういえば端末が変わっていたのでgit remote addでリモートリポジトリを指定しないといけないことを思い出します。

7. git remote add

❯ git remote add リモートリポジトリ名 リモートリポジトリのURL

リモートリポジトリのURLはGitHubから確認可能です。
これで無事リモートリポジトリの指定は完了しました。

8.2度目のgit push

❯ git push リモートリポジトリ名 master
To リモートリポジトリのURL
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'リモートリポジトリのURL'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

「リモートにローカルにはない変更が含まれているので、更新できません!」と怒られます。
あれ?でもリモートから引っ張ってきたのになんで?と疑問発生。

9.git push -f

❯ git push -f リモートリポジトリ名 master
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

最新はローカルで間違いはなかったので、-fオプションで強制的にpushしようとするも、次は「権限がありません!」と怒られました。

そういえば公開鍵の作成とデプロイがまだ済んでいないことに気付きます。

10.ssh-keygenで公開鍵を作成

❯ ssh-keygen -t rsa -C "メールアドレス"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/PCユーザー名/.ssh/id_rsa): /Users/PCユーザー名/.ssh/任意のファイル名
Enter passphrase (empty for no passphrase): ※パスフレーズを決めて入力(推奨。入力なしでEnterでも可。)
Enter same passphrase again: ※同じものを入力
Your identification has been saved in /Users/PCユーザー名/.ssh/任意のファイル名.
Your public key has been saved in /Users/PCユーザー名/.ssh/任意のファイル名.pub.
The key fingerprint is:
フィンガープリント
メールアドレス
The key's randomart image is:
+---[RSA 2048]----+
ランダムアートが表示される
+----[SHA256]-----+

11.pbcopy < ~/.ssh/任意のファイル名.pub

❯ pbcopy < ~/.ssh/任意のファイル名.pub

次のGitHubに公開鍵をデプロイする作業に向けて、さっき作成した公開鍵をpbcopyでクリップボードにコピーします。

12. GitHubに公開鍵をデプロイ

GitHub上での作業となります。
下記手順です。

スクリーンショット 2019-11-20 2.14.22.png

スクリーンショット 2019-11-20 2.14.31.png

スクリーンショット 2019-11-20 2.14.47.png

スクリーンショット 2019-11-20 2.14.53.png

スクリーンショット 2019-11-20 2.16.19.png

「Add key」を押して公開鍵のデプロイは完了です。

13.2度目のgit push -f

❯ git push -f リモートリポジトリ名 master
Enumerating objects: 166, done.
Counting objects: 100% (166/166), done.
Delta compression using up to 8 threads
Compressing objects: 100% (151/151), done.
Writing objects: 100% (166/166), 159.09 KiB | 1.05 MiB/s, done.
Total 166 (delta 15), reused 0 (delta 0)
remote: Resolving deltas: 100% (15/15), done.
To リモートリポジトリURL
 + XXXXXX...XXXXXX master -> master (forced update)

無事push完了!
これ以降、通常通りGit管理が出来る状態となりました:v:

おわりに

無事に復旧出来たので一安心!
ムダも多いかと思いますが、この手順を残したことがどなたかの参考になれば幸いです:relaxed:

今回、MacBookが急にシャットダウンを繰り返す現象が発生し、ハード面の問題のようでバックアップもとれず修理に出したのですが、ちゃんとGitHubに最新データを上げておいて良かった。
命拾いしました:sweat_smile:

参考にした記事

稚拙な記事ですが、自分の書いたものを見ながら解決しました。
【GitHub】15分調べても分からない人のためのSSH接続セットアップ方法 - Qiita

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away