[Git]新規追加したファイルを git diff で差分表示したい
ソースコードの修正をパッチファイルにしたいとき、以下のように git diff コマンドでパッチを作成するが、新規追加したファイルが patch ファイルに含まれていないことに気づいた。
git diff > hogehoge.patch
git status で状態を確認すると以下のような状態。
git add -N hogehoge.txt
"-N" オプション!!
これで、git diff で差分として表示されるようになる。
status を確認すると以下のようになっている。
あとは、git diff > hogehoge.patch でファイルに出力すれば、新規追加ファイルの内容もパッチファイルに出力することができる。
git diff > hogehoge.patch
git status で状態を確認すると以下のような状態。
$ git status
On branch work
Untracked files:
(use "git add..." to include in what will be committed)
hogehoge.txt
git add -N hogehoge.txt
"-N" オプション!!
これで、git diff で差分として表示されるようになる。
status を確認すると以下のようになっている。
$ git status
On branch work
Changes not staged for commit:
(use "git add..." to update what will be committed)
(use "git restore..." to discard changes in working directory)
new file: hogehoge.txt
あとは、git diff > hogehoge.patch でファイルに出力すれば、新規追加ファイルの内容もパッチファイルに出力することができる。
(gnome-ssh-askpass:12825): Gtk-WARNING **: cannot open display:
Gitでローカルからリモートリポジトリにアクセスしようとした際、以下の警告が表示されて操作ができなくなってしまった。
(gnome-ssh-askpass:12825): Gtk-WARNING **: cannot open display:
git pull などコマンド叩くと、このメッセージが表示される。。
解決方法は、unsetコマンドを叩けばOK。
$ unset SSH_ASKPASS
これをして、再度リモートリポジトリにアクセスする際にはパスワードを聞かれ、パスワードを入力すれば操作可能となる。
そもそも、鍵を設定しておけば多分このような問題は出ないのだろうけどね・・・
(gnome-ssh-askpass:12825): Gtk-WARNING **: cannot open display:
git pull などコマンド叩くと、このメッセージが表示される。。
解決方法は、unsetコマンドを叩けばOK。
$ unset SSH_ASKPASS
これをして、再度リモートリポジトリにアクセスする際にはパスワードを聞かれ、パスワードを入力すれば操作可能となる。
そもそも、鍵を設定しておけば多分このような問題は出ないのだろうけどね・・・
[Git] resetコマンドで一つ前のコミットだけを取り消す。変更内容はそのまま。
Gitでコミットをした直後にやっぱり取り消したいということが稀にある。
ただ、取り消したいのはコミットしたことだけで変更自体は取り消したくないというとき、
そんなときは、resetコマンドでできる。
git reset --soft HEAD^
これで、コミットログだけ取り消せる(コードの変更内容はそのまま)。
使い方が正しいのか、個人的には、わからないがコミットログを変更したい場合にも使用してしまっている。。。
直前以外を取り消したい場合は "HEAD^" を変更すればOK。
ただ、取り消したいのはコミットしたことだけで変更自体は取り消したくないというとき、
そんなときは、resetコマンドでできる。
git reset --soft HEAD^
これで、コミットログだけ取り消せる(コードの変更内容はそのまま)。
使い方が正しいのか、個人的には、わからないがコミットログを変更したい場合にも使用してしまっている。。。
直前以外を取り消したい場合は "HEAD^" を変更すればOK。
[Git] rebaseコマンド
複数メンバーで開発していると、よくブランチで作業中に他のメンバーの修正がmasterに取り込まれたりして、
作業ブランチの環境が古くなり、プルリクエストをした際にコンフリクトが起きてしまうことが屡々ある。
そんな時、作業ブランチを最新状態に更新してコンフリクトを解消してプルリクエストを出すのだが、
最新状態にする方法として、mergeとrebaseがある。
mergeの場合、余計なコミットログが残ってしまうので、個人的にはrebaseでスッキリとさせる方が好きです。
慣れれば、簡単だが以下にコマンドをメモ。
git checkout master
git pull
git checkout xxxxx
git rebase master
競合しなければ、これで完了だが、競合した場合は以下も行う。
git diff
→ 競合箇所を確認
競合箇所を修正
git add xxxxx.zzz
→ rebase時にパス付きでコンフリクトしたファイル名は表示されるので、それを指定
git rebase --continue
→ rebaseの場合は、commitではなく、continueを使用します
rebaseした後にプッシュする際は -f オプションをつけて強制プッシュにしないと失敗しますので注意。
git push -f origin xxxxx:xxxxx
作業ブランチの環境が古くなり、プルリクエストをした際にコンフリクトが起きてしまうことが屡々ある。
そんな時、作業ブランチを最新状態に更新してコンフリクトを解消してプルリクエストを出すのだが、
最新状態にする方法として、mergeとrebaseがある。
mergeの場合、余計なコミットログが残ってしまうので、個人的にはrebaseでスッキリとさせる方が好きです。
慣れれば、簡単だが以下にコマンドをメモ。
git checkout master
git pull
git checkout xxxxx
git rebase master
競合しなければ、これで完了だが、競合した場合は以下も行う。
git diff
→ 競合箇所を確認
競合箇所を修正
git add xxxxx.zzz
→ rebase時にパス付きでコンフリクトしたファイル名は表示されるので、それを指定
git rebase --continue
→ rebaseの場合は、commitではなく、continueを使用します
rebaseした後にプッシュする際は -f オプションをつけて強制プッシュにしないと失敗しますので注意。
git push -f origin xxxxx:xxxxx
[git]リモートのリポジトリから特定のブランチをcloneする
リモートリポジトリから、ローカルにcloneする場合は、
"git clone" コマンドを使用する。
ただ、以下のようにオプションしていなく単純にcloneすると master がcloneされる。
git clone https://xxxxxx/xxxxx.git
masterをcloneした後に別途ブランチをcheckoutしてもいいのですが、
誤ってmasterをプッシュしたりして事故が起こるのは少し怖い。
なので、cloneのときからブランチ指定してしまえば安心。
ブランチを指定してcloneしたい場合は以下。
git clone -b ブランチ名 https://xxxxxx/xxxxx.git
"git clone" コマンドを使用する。
ただ、以下のようにオプションしていなく単純にcloneすると master がcloneされる。
git clone https://xxxxxx/xxxxx.git
masterをcloneした後に別途ブランチをcheckoutしてもいいのですが、
誤ってmasterをプッシュしたりして事故が起こるのは少し怖い。
なので、cloneのときからブランチ指定してしまえば安心。
ブランチを指定してcloneしたい場合は以下。
git clone -b ブランチ名 https://xxxxxx/xxxxx.git