Git GitHub について

Git GitHubでうまくいかなかったので記載しようと思います。
ちなみに、今回は、もりけん先生に教えていただいたgit cloneで作成してはいません…
次回に記事にします。

gitとgithubの違いについては、以下のリンクで調べました。
https://tech-blog.rakus.co.jp/entry/20200529/git#Git%E3%81%A8%E3%81%AF

※最初に注意することとして
ターミナルでgitを操作する場合、以後出てくるbranchの場所に注意すること!!
幹にあたるmasterなのか、branchを分けた枝で作業するのか…
移動は、git checkout “移動したいブランチの名”で移動可能

では、まず全体の流れです。

1,元々、作ってあったファイルをGitにあげるためにターミナルでGitにあげたいフォルダ(ここではaフォルダとする)へ行って”git init”と入力しました。

2、gitにaフォルダが登録され、
Initialized empty Git repository in /Users/sosukoipanda/a/.git/
という最後に.git/がついたコマンドが出ます。

3、ここから、GitHubに移って、新しいリモートリポジトリを作成します。
(下図のNEW Repositoryを選択してクリックして)

4、下図の画面になったら、上の四角の中に、フォルダ名(ここでは先ほどaとしました。)を入力します。
※これは、フォルダ名と、今回作成しようとしている四角の中のrepository nameはできれば同じ方がいいです。
何がなんだが分からなくなります。

5、2つ目の四角の”Initialize this repository with a README”はチェックを入れてください。
チェックすると何がいいのか…GitHubのリポジトリの初期化と、READMEファイルが作成でき、cloneがすぐにできるようになります。
cloneとは、羊のクローンのように同じデータを持った物をローカルリポジトリに作ります。
今回は別の方法ですが…

6、チェックができたら、下にある緑のcreate repository をクリックしてリポジトリを作成します。

それができたら、この今作ったリモートリポジトリとローカルリポジトリを連携させます。

7、下図を見て、まず、GitHub上で、作ったリポジトリの緑のcodeというボタンを押すと
git@github.com:xxxxx/xxxxxx.gitが表示されるので、それをコピーしてください。

8、先ほどコピーしたgit@github.com:xxxxx/xxxxxx.gitを
コマンドに貼り付けます。
git remote add origin git@github.com:xxxxx/xxxxxx.gitを入力してください。

9、git pull origin master をして、リモート上に作った情報をまず取得します。
このまま、git add → git commit → git push をすると、リモートとローカルとに差が出るので…

! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to ‘git@github.com:yasu-pro/chef.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 remote add origin git@github.comxxxx/xxxxxx.git
をして、git上にリモートリポジトリを作ったら、
git pull origin master をすること。

これで、ローカルリポジトリとリモートリポジトリを連携することができました。

10、ここから、htmlファイル,cssファイル,Javacriptファイルなどを変更して、
git add .(既存のファイルをステージングする)
git add –all (新規ファイルとかも含めて、ステージングする)

11、その後、ローカルリポジトリへあげるために、
git commit -m “コメントをここに入力”

12、さらに、ローカルリポジトリからリモートリポジトリへあげるために
git push origin head をする。

origin headの意味は、
・originは、git@github.com:xxxxx/xxxxxx.git でリモートのサーバー名のことです。
・headは、今いるところの先頭→つまり、ローカルリポジトリで一番新しいところのことです。

全体の流れ…

一番新しいところとは、
git commitをしていくとbranchという枝が伸びていきます。

青色の文字のgit checkout -b “ブランチ名”をすることで、枝をきるという表現をするようですが、枝が別れます。もちろんここで、作業をしてcommitすれば枝が伸びます。
で、それを、master branchにくっつける作業をします。それが緑色の文字のmergeです。

それが、写真では、一番下の○がファイルとして、一番新しい状態です。それを、リモートリポジトリにpushするというのが、流れです。

13、その後、GitHubへ行くとpullRequestという緑色のボタンが出ます。

pullRequestは、変更したコードをリポジトリに取り込んでもらうように依頼する機能です。

次に…

https://qiita.com/samurai_runner/items/7442521bce2d6ac9330b

さらにpullrequestの緑色のボタンを押した後、
GitHub上で、上図の写真の緑のボタンMerge pull request を押すことで、リモートリポジトリでmergeされます。

ちなみに、これをすることで、GitHubの草が生えます!!

例えば、下図のように…

ローカルリポジトリでmergeせずに、1回commitして、枝(branch)を伸ばした状態で、pushした場合。
リモートリポジトリには、赤い四角の内容がpushされます。
ここで、先ほど ”GitHubでpullRequestして、その後のmerge pull requestを押すとリモートリポジトリでmergeがおきます。” と書きました。
GitHub上で、merge pull requestを実行すると赤い丸の段階になります。つまり、黄色い丸のところができます。

ただ、merge pull requestしたら勝手にリモートリポジトリはmergeがおきますが、ローカルリポジトリは、mergeされていませんよね…(赤い四角の内容)

つまり、ローカルと、リモートの間で、ずれが生じます。これをなくすために
ローカルリポジトリをリモートリポジトリと同じにする必要があります。
それをするのが、git pullになります。
14、git pullすれば、ローカルの黄色い点線部分ができて、ローカルと、リモートの差がなくなります。
これは、もちろん、pullRequestや、merge pull requestをした後にローカルで作業をしていたら、また、リモートの内容と違うじゃないかと怒られますので、その場合は、git stashしてください。

git stashとは、一旦変更した物を横の机みたいなところに避けるイメージです。
その後、git stashの内容を追加すれば、問題はありません。

これが一連の流れになります。(1〜13を順にやればGitHubに草を生やすことができます。)
ちなみに、gitを操作する場合は、自分のいる位置の確認。つまり、ブランチの位置の確認(git branchで確認)をしてくださいね!!git statusも忘れずに!!

リファレンス https://qiita.com/samurai_runner/items/7442521bce2d6ac9330b
       https://happy-making.com/study_log58/#toc11

2つ目のリンクは、同じ塾生のはるなさんのブログです。とてもわかりやすいです。

ここからは、僕がgit initを使って、エラーが出た内容で、どうやって解決したのかの備忘録です。

1〜10まで順調にできましたが…
11をした時、つまり、git push origin master をした時に

fatal: ‘origin’ 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.

”orign”はgitリポジトリではないようです。
リモートリポジトリから読み取れませんでした。

正しいアクセス権があること、リポジトリが存在していることを確認してください。
(英訳…)

よくよく、調べてみると、8をやってませんでした。
git remote add origin git@xxxxx/xxxxxx.git

つまり、ローカルリポジトリとリモートリポジトリを連携できていませんでした。

これをした後に、
git push origin headをしたのですが…

Warning: Permanently added the RSA host key for IP address “xxxxxxxx” to the list of known hosts.
Enter passphrase for key ‘/Users/xxxxxxxxxx/.ssh/id_rsa’:
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.

が出てきました。

/Users/xxxxxxxx/.ssh/id_rsa'のパスフレーズを入力:

のところが重要で、詳しく調べても分からなかったのですが、id_rsaの権限でつまずくことが多くあるみたいです。
解決策としては、一番最初にGitHubを登録した時にSSHのパスワードを設定したと思うのですが、それを入力しないと、いけないみたいです。

SSHのパスを入力したら、いけました。

その後、もう一度、git push origin headをすると今度は…

! [rejected] head -> master (fetch first)
error: failed to push some refs to ‘git@github.com:xxxxxx/xxxxx.git’
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.

! [拒否]ヘッド->マスター(最初にフェッチ)
エラー:一部の参照を 'git@github.com:xxxxxxxxx / xxxxx.git'にプッシュできませんでした
ヒント:リモートが行う作業がリモートに含まれているため、更新は拒否されました
ヒント:ローカルにはありません。これは通常、別のリポジトリのプッシュによって引き起こされます
ヒント:同じ参照に。最初にリモートの変更を統合することができます
ヒント:( 'git pull ...'など)再度プッシュする前。
ヒント:詳細については、「git push --help」の「早送りに関する注意」を参照してください。

とのことでした。(後半訳すのが面倒になったので、google先生にお願いしました。)

これの原因は、自分がリモートの変更をpullしてから、pushするまでの間に、他からのpushがあるなどしてリモートが変更されているためです。(そういえば一度、pushしてました。)
エラーメッセージが教えてくれているように、ブランチの先端がリモートのより後ろになっています。 ローカルの master ブランチを shared の master とマージしてあげる必要があります。 git pull でマージした後、改めてpushしましょう。

ここでの回答は、git pull origin masterと書いてありますし、この回答が多かったのですが…

自分は、git push -f origin masterでいけました。

意味は、リモートブランチがローカルブランチの派生元ではない場合も、ローカルブランチの内容で強制的に上書きする。

これには、リスクがありました。なぜなら、ローカルブランチの内容で強制的に上書きされてしまうので、本当に、上書きするローカルが正しいのかしっかりと確認する必要があります。

コマンドで行くと、実際に何が起こっているのか目で確認できないので、イメージしにくく、苦戦しますね…できるまで諦めないことですね…

以上です。

コメント