最終更新:2020/03/02
趣旨
Gitを使い始めてからまだ一ヶ月ほど。
本も読まず自己流でやってきたので、今一つ使い方が分からなったり、トラブル連発だったりするので、レファレンスとして作成しておきます。
随時追加。
余談ですが、大学の別キャンパスから本を取り寄せ予約したら、二日後に図書館から「予約リスト見てなくて、他の人に貸しちゃったテヘッ 二週間後に取りに来てね!」と、一言も謝罪の言葉の無いメールが届いたので、到着日を空けておいたのに、挙句予定より早く到着したみたいで、「3日以内に取りに来ないと返しちゃうからねっ」と、ヤンデレ図書館に振り回されている僕です。
環境
- Windows x64 (LAPTOP/DESKTOP)
- Git 2.25.0 (64bit)
- RStudio 1.2.5033
- Git・GitHubは個人利用目的。
基本操作編
ブランチの変更を他のブランチに反映させる。
ブランチの作業をmasterに反映させたり、逆にmasterの変更をブランチに反映させるとき。
処方箋
これがまさにmergeのやりたいこと。
(変更元)hoge⇒fuga(反映先)の場合、fugaに移動してからhogeをmergeする。
$ git checkout fuga
$ git merge hoge
なんかもうIndexがハチャメチャ...
特に特定のエラー文があるというより、権限を弄りすぎたり、手動でIndexからファイルを消したり、とにかくもう自分で何やったか分からなくなったとき。
処方箋
落ち着いてリセットしよう。
$ rm .git/index
$ git reset
http://www.nowhere.co.jp/blog/archives/20130822-205501.html
http://www-creators.com/archives/1282
merge と rebaseの違いがよくわからない
rebase
は、masterをブランチに、ブランチをmasterに入れ替えるようなイメージ。
merge
は変更を取り込むだけで、master・ブランチの関係性に変化はない。
通常はmerge
でよい。
http://www-creators.com/archives/1943
リモート編
Gitくん「コンフリクトがあるぞー。」
こういうやつ。
<<<<<<< HEAD
hoge
=======
fuga
>>>>>>> 5b90aa6697367e6aaf68edbffbf6771167a94bc2
piyo
処方箋
まずはhogeかfugaのいずれか要らない差分を消す。今回はfugaを消し、hogeを残す。
各種エディタで編集して上書き保存しましょう。
hoge
piyo
その上で、次のコマンドを叩く。
$ git add sample.txt
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
All conflicts fixed but you are still merging.
とあればOK。最後にgit commit
すれば完了です。
$ git commit
Merge branch 'master' of github.com:hoge/fuga
# Conflicts:
# sample.txt
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 1 different commits each, respectively.
# (use "git pull" to merge the remote branch into yours)
#
# All conflicts fixed but you are still merging.
#
Gitくん「他人のプッシュがあるぞー。」
僕しか使ってないリポジトリなのにPushすると何故か頻繁に出てくるエラー。
原因が判明。
一旦Pushした後にローカルでAmendし、再度Pushするとこの症状が出る。
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'c:\hoge'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
処方箋
まず大原則として・・・
基本的に一回PushしたCommitをAmendしないこと!!!!
その上で、Amend後の場合はコレ参照。
https://gotohayato.com/content/445/
それ以外の場合、今のところ、どっちかやれば解決してる。
理由は分からない。
$ git fetch
$ git rebase origin/master
$ git pull --rebase origin master
RStudio × Git 編
RStudioから起動したShellからSSH通信できない。
これマジ深刻。ググっても何にも引っかからないし、色々試しまくりました。
Git > More > Shell
でGit Bashを起動すると、こんな感じになります。
username@PC_NAME MSYS ~/Documents/hoge/fuga (master)
そしてシェルを一旦閉じてもう一度開くと・・・。
username@PC_NAME MSYS c/Users/username/Documents/hoge/fuga (master)
つまり、一旦シェルを閉じてしまうと、その後何故か絶対パスでの表示になり、さらに.ssh
が見つからないなどと宣われます。その結果PushもFetchもできない・・・。
で色々調べると、ホームディレクトリがおかしくなっていることが判明しました。さらに余計な記号=
までついてくるので非常に厄介です。
# 一回目
$ echo $HOME
/c/Users/username
# 二回目以降
$ echo $HOME
/c/Users/username/Documents/hoge/fuga/=
処方箋
ようやく見つけました。
https://github.com/rstudio/rstudio/issues/3663
結論から言うと、単なるRStudioのバグでした。修正された模様です。
ですが 安定版(1.2.5033)には反映されていない ようなので、開発版をダウンロードします。
https://dailies.rstudio.com/
私の場合、Ver.1.3.881にアップデートすることで解決しました。
その他
参考になる書籍やサイトは?
-
いちばんやさしいGit&GitHubの教本 人気講師が教えるバージョン管理&共有入門
大学の図書館で借りて読みました。
全編オールカラーで、説明も初心者向けで分かり易く、Gitの操作からGitHubの連携まで、痒いところに手が届く感じが良かったです。
僕のように、Gitがとっつきにくいと感じる人にはおすすめ。
-
Pro Git Book
Git本家のヘルプ書。
ヘルプの内容はウェブページで見れるほか、なんとPDFで無料配布という太っ腹。書籍版も販売中。
一発目がコレだと少し難しいので、ある程度Gitに慣れた人向けかもしれない。
本家だけあって、流石の情報量。