- 投稿日:2020-09-09T23:49:19+09:00
git pull実行時にNot possible to fast-forwardエラーが発生した場合の対応
Contents
git pull
を実行したときにNot possible to fast-forward, aborting.
と表示され、ローカルをリモートリポジトリと同期できなくなった場合の対応方法です。原因
リモートリポジトリの更新後、
git pull
(=git fetch; git merge
)の前にローカルリポジトリを編集してcommitした場合などに発生するようです。
- Continuous integration (CI) toolを使った自動コミットが含まれる場合は要注意!
- pull requestをmergeした直後は要注意!
解決方法
落ち着いて、次の通り
git fetch
とgit rebase
を実行すれば副作用を抑えて解決できます1。master branchの場合:
git pull origin master --rebase
Output:
From (remote repositoryのURL) * branch master -> FETCH_HEAD Successfully rebased and updated refs/heads/master.コマンドのイメージ
リモートの変更内容をdiff-A, ローカルの変更内容をdiff-Bとしたとき23、
ローカル側:
1. diff-Bをローカルから取り除く
2. diff-Aをローカルに反映させる
3. diff-Bをローカルに反映させるリモート側:
1. diff-Bをリモートに反映させるローカル側もリモート側もdiff-A, diff-Bの順にcommitが設定されます。
あとがき
「一時退避」などでがんばる方法もあると思いますが、履歴が複雑になります(経験談)。履歴を振り返りにくくなるのでrebaseすることをおすすめします。
またリモートとローカルで同じ場所を編集した場合はconflictが発生しますので、そちらも落ち着いて解決しましょう。
お疲れさまでした!
- 投稿日:2020-09-09T23:16:02+09:00
ターミナルで git を管理する方法
概要
ターミナルを利用して、git で作業ディレクトリ(ローカルディレクトリ/リモートディレクトリ)を管理する方法についてまとめる。
成果物
作業管理しているローカルディレクトリを github に公開する
ローカルディレクトリの管理
git init //フォルダをバージョン管理の対象にする
ターミナルgit init実行後、フォルダに「.git」という隠しファイルが生成される。
cf. git 管理をやめるgit add //記録対象の指定
ターミナル//バージョン管理するアイテムが一つの場合 git add sample.txt //バージョン管理するアイテムが複数の場合 git add .これは、以降で説明する git commit を実行するまえに毎回行う必要がある。
git commit // 変更点の記録
ターミナルgit commit -m “first commit”必ず -m "更新内容" とセットで記載する。
入れ忘れると、Vim が立ち上がるので INSERTモード(iをタイプする)でコミットメッセージを入力する。ここでは、「write commit message」と入力する。
INSERT モードは [esc] キーで終了し、「:wq」で閉じる。リモートディレクトリ(github) の管理
github でリポジトリを作成
[Your profile] → [Repositories] → [New] をクリック
[Create a new repository] ページが表示されるので、[Repository name] を入力する。ここでは、ローカルディレクトリとあわせて「hellogit」とする。
設定が完了したら、[Create Repository] をクリックする
画面に表示された [HTTPS] か [SSH] をコピーする
※https 通信の場合 git remote add するたびに PW を聞かれるローカルディレクトリを github のリモートディレクトリに紐づける
ターミナルgit remote add origin https://github.com/ub0t0/myfirstgithub.gitcommit 済みのディレクトリを github に更新
git add
とgit commit
した後に以下のコマンドを実行ターミナルgit push -u origin masterhtml の公開
github pages を利用すると、 .html を静的ファイルとして公開することができる
[setting] → [GitHub Pages] → [Branch:master] → [Save] で
index.html
が公開され、リンクが表示される。https://github.com/ub0t0/hellogit
index.html
が読み込まれるが、index.html
以外を開きたい場合は、/ファイル名で開くことが可能
https://github.com/ub0t0/hellogit/a.htmlgithub でファイルの中身を変更した場合
github 上で Read me ファイルの作成やファイルの中身を変更した場合は pull コマンドを利用して、ローカルリポジトリも更新する
ターミナルgit pull覚えておきたい確認用コマンド
git status //ステータスの表示
commit する前に、git status を実行した場合
ターミナルgit status // 返されたメッセージ On branch master No commits yet nothing to commit (create/copy files and use "git add" to track)前回 commit した時から変更点がない場合
ターミナルgit status // 返されたメッセージ nothing to commit, working tree clean前回 commit した時から変更点がある場合
(例)「a.text」というファイルを新規で作成した場合のメッセージターミナルgit status // 返されたメッセージ On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a")git log // ログの表示
いつだれが更新したかを確認することができる。
ターミナルgit log // 返されるメッセージ commit 一意のID Author: Date: commit したときの文字列参考
【初心者】Gitコマンドの使い方を体系的に覚える【一覧あり】
【読むだけ】 Gitとは?仕組みを初心者にもわかりやすく解説【図解】
サル先生のGit入門
マンガでわかるGit
- 投稿日:2020-09-09T23:16:02+09:00
ターミナルで git/github を管理する方法
概要
ターミナルを利用して、git で作業ディレクトリ(ローカルディレクトリ/リモートディレクトリ)を管理する方法についてまとめる。
ゴール
作業管理しているローカルディレクトリをリモートリポジトリ(github) に紐づける
ローカルディレクトリの管理
git init //フォルダをバージョン管理の対象にする
ターミナルgit init実行後、フォルダに「.git」という隠しファイルが生成される。
cf. git 管理をやめるgit add //記録対象の指定
ターミナル//バージョン管理するアイテムが一つの場合 git add sample.txt //バージョン管理するアイテムが複数の場合 git add .これは、以降で説明する git commit を実行するまえに毎回行う必要がある。
git commit // 変更点の記録
ターミナルgit commit -m “first commit”必ず -m "更新内容" とセットで記載する。
入れ忘れると、Vim が立ち上がるので INSERTモード(iをタイプする)でコミットメッセージを入力する。ここでは、「write commit message」と入力する。
INSERT モードは [esc] キーで終了し、「:wq」で閉じる。リモートディレクトリ(github) の管理
github でリポジトリを作成
[Your profile] → [Repositories] → [New] をクリック
[Create a new repository] ページが表示されるので、[Repository name] を入力する。ここでは、ローカルディレクトリとあわせて「hellogit」とする。
設定が完了したら、[Create Repository] をクリックする
画面に表示された [HTTPS] か [SSH] をコピーする
※https 通信の場合 git remote add するたびに PW を聞かれるローカルディレクトリを github のリモートディレクトリに紐づける
ターミナルgit remote add origin https://github.com/ub0t0/myfirstgithub.gitcommit 済みのディレクトリを github に更新
git add
とgit commit
した後に以下のコマンドを実行ターミナルgit push -u origin masterhtml の公開
github pages を利用すると、 .html を静的ファイルとして公開することができる
[setting] → [GitHub Pages] → [Branch:master] → [Save] で
index.html
が公開され、リンクが表示される。https://github.com/ub0t0/hellogit
index.html
が読み込まれるが、index.html
以外を開きたい場合は、/ファイル名で開くことが可能
https://github.com/ub0t0/hellogit/a.htmlgithub でファイルの中身を変更した場合
github 上で Read me ファイルの作成やファイルの中身を変更した場合は pull コマンドを利用して、ローカルリポジトリも更新する
ターミナルgit pull覚えておきたい確認用コマンド
git status //ステータスの表示
commit する前に、git status を実行した場合
ターミナルgit status // 返されたメッセージ On branch master No commits yet nothing to commit (create/copy files and use "git add" to track)前回 commit した時から変更点がない場合
ターミナルgit status // 返されたメッセージ nothing to commit, working tree clean前回 commit した時から変更点がある場合
(例)「a.text」というファイルを新規で作成した場合のメッセージターミナルgit status // 返されたメッセージ On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a")git log // ログの表示
いつだれが更新したかを確認することができる。
ターミナルgit log // 返されるメッセージ commit 一意のID Author: Date: commit したときの文字列参考
【初心者】Gitコマンドの使い方を体系的に覚える【一覧あり】
【読むだけ】 Gitとは?仕組みを初心者にもわかりやすく解説【図解】
サル先生のGit入門
マンガでわかるGit
- 投稿日:2020-09-09T23:16:02+09:00
ターミナルで git を管理する時のコマンド
概要
ターミナルを利用して、git で作業ディレクトリを管理する方法についてまとめる。
基本コマンド
git init //フォルダをバージョン管理の対象にする
ターミナルgit init実行後、フォルダに「.git」という隠しファイルが生成される。
cf. git 管理をやめるgit status //ステータスの表示
commit する前に、git status を実行した場合
ターミナルgit status // 返されたメッセージ On branch master No commits yet nothing to commit (create/copy files and use "git add" to track)前回 commit した時から変更点がない場合
ターミナルgit status // 返されたメッセージ nothing to commit, working tree clean前回 commit した時から変更点がある場合
(例)「a.text」というファイルを新規で作成した場合のメッセージターミナルgit status // 返されたメッセージ On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: a.txt no changes added to commit (use "git add" and/or "git commit -a")git add //記録対象の指定
ターミナル//バージョン管理するアイテムが一つの場合 git add sample.txt //バージョン管理するアイテムが複数の場合 git add .これは、以降で説明する git commit を実行するまえに毎回行う必要がある。
git commit // 変更点の記録
ターミナルgit commit -m “first commit”必ず -m "更新内容" とセットで記載する。
入れ忘れると、Vim が立ち上がるので INSERTモード(iをタイプする)でコミットメッセージを入力する。ここでは、「write commit message」と入力する。
INSERT モードは [esc] キーで終了し、「:wq」で閉じる。git log // ログの表示
いつだれが更新したかを確認することができる。
ターミナルgit log // 返されるメッセージ commit 一意のID Author: Date: commit したときの文字列参考
【初心者】Gitコマンドの使い方を体系的に覚える【一覧あり】
【読むだけ】 Gitとは?仕組みを初心者にもわかりやすく解説【図解】
サル先生のGit入門
マンガでわかるGit
- 投稿日:2020-09-09T13:10:04+09:00
rebase時のコンフリクトでリベース先の変更だけ適用する方法
Rebase対応にて、コンフリクトした場合、リベース先の変更を全て取り入れる場合
いろいろあって、リベース先の変更を全て入れないといけなかったのでメモ
TL;DR
git checkout --ours <ファイルパス> git add <ファイルパス> # コンフリクト全て対象で良いなら、<ファイルパス>部分を . 指定でOK検証してみる
まずmasterブランチで何もないファイルを作成してcommit
devブランチを切る
$ git checkout -b devdevブランチでsample.txtを以下の内容で保存
sample.txtaaamasterブランチに移動してsample.txtを以下の内容で保存
sample.txtbbbこれでコンフリクトする。
devブランチに移動してrebase
$ git rebase masterバッチリコンフリクトした
$ git rebase master First, rewinding head to replay your work on top of it... Applying: change sample.txt on dev Using index info to reconstruct a base tree... M sample.txt Falling back to patching base and 3-way merge... Auto-merging sample.txt CONFLICT (content): Merge conflict in sample.txt error: Failed to merge in the changes. Patch failed at 0001 change sample.txt on dev hint: Use 'git am --show-current-patch' to see the failed patch Resolve all conflicts manually, mark them as resolved with "git add/rm <conflicted_files>", then run "git rebase --continue". You can instead skip this commit: run "git rebase --skip". To abort and get back to the state before "git rebase", run "git rebase --abort".リベース先の変更を入れる
今回の場合はmasterブランチの内容を入れる
$ git checkout --ours sample.txt $ git add sample.txtこれでOK!
ちなみに...
rebase元(今回で言うとdevブランチ)の内容を反映する場合は、
$ git checkout --theirs sample.txt $ git add sample.txtで良い。
- 投稿日:2020-09-09T00:20:15+09:00
Gitをアップデートする for Windows
コマンドラインからGitをアップデートする。
2.13以前は非対応。$ git update-git-for-windows