作業中ブランチにいながら、派生元ブランチ(master)で行われたの更新を取り込む(マージする)

● 作業中ブランチにいながら、派生元ブランチ(master)で行われたの更新を取り込む(マージする)

ブランチが master とそこからブランチを切った devブランチがあるとします。
devブランチを作業しながら master に適用されたアップデートを取り込む方法です。

1. source tree アプリの場合

・「フェッチ」をクリックして取り込む
・ブランチ「dev」をダブルクリックしてチェックアウトする
・「マージ」をクリックしてマージするコミットを選択(オプションも合わせて選択)してマージを実行する

2. git コマンド の場合

(現在の作業ブランチは dev とします。)

# origin を更新
git fetch origin

# 作業中ブランチへ master を取り込む(--no-ff有無については運用ルール等によります。)
git merge --no-ff origin/master
No.1993
06/07 14:10

edit

git コミットログを後から修正

● git コミットログを後から修正

最新のコミットログを後から修正します

git commit --amend

実行すると vi が起動するのでテキストを修正します。
修正が完了したら [esc] に続けて wq [enter] 入力して保存します。

No.2007
06/04 17:06

edit

git clone した後で git の 更新対象から外す

● git clone した後で git の 更新対象から外す

git管理下には置きたいけれど 今回のブランチに限り 変更を追跡されて欲しくない時は
assume-unchanged または skip-worktree を設定することで追跡から外すことができます。
なお、これは開発側(更新、コミット、push を行う側)に設定します。

・1.assume-unchanged

assume-unchanged を設定する

git update-index --assume-unchanged <ファイル名>

取り消す

git update-index --no-assume-unchanged <ファイル名>

・2.skip-worktree

skip-worktree を設定する

git update-index --skip-worktree <ファイル名>

取り消す

git update-index --no-skip-worktree <ファイル名>

どちらもブランチごとに有効 ブランチを移動した際は再度設定が必要です

● 設定の確認

git ls-files -v

設定されているファイルには先頭に 半角の h が表示されます

● 設定するとどういう挙動となるか?

設定すると、git status での更新されたファイルリストに表示されなくなります。
git add -A でステージするファイルに追加されることもありません。

ただ設定したローカルリポジトリのみに有効なので、 別のローカルにて設定忘れたまま更新してコミット・push されるともちろんリモートに反映されます。

● assume-unchanged と skip-worktree の違いは?

基本的にskip-worktreeで良い。
イメージとしては、skip-worktreeは手元の変更を優先するが、 assume-unchangedはリポジトリの変更を優先する。

そのため、git reset --hardを実行したような場合は、 assume-unchangedは手元の変更が失われる。

まるまる引用 : http://htak.hatenablog.com/entry/2016/02/08/000000

No.2005
06/04 14:43

edit

git branch した時の HEAD detached from xxxxxx 現象 と直し方

● git branch した時の HEAD detached from xxxxxx 現象 と直し方

git の HEADとは何?

HEADとは
今自分が作業している場所(コミット)を示すリファレンスです。コミットするたびに自動的に移動します。

です。

git の HEAD が今どこを指しているかを調べる

cat .git/HEAD 

git の HEAD の移動履歴を調べる

git reflog

HEAD detached from とは

ブランチを確認したときに、そのブランチの最新コミット以外のコミットをHEADが参照しているときに HEAD detached になります。

git branch

結果例

* (HEAD detached from e40590e)
  master

これは HEADがそのブランチの最新コミット以外の特定のコミットを指している状態です。

HEAD detached from を直す

HEADをあるブランチの最新コミットに移動したい場合は

git branch 

でブランチを表示して、そのブランチへ移動します。

まだ一度もチェックアウトしていないリモートに存在するブランチへ移動したいときは

git branch -r

でリモートのブランチ一覧を表示して確認します。

master ブランチで移動する場合

git checkout master

これで戻ります。

No.2003
05/28 11:40

edit

git で ローカルを強制的にリモートに合わせる

● 強制的にリモートに合わせる

git fetch origin
git reset --hard origin/master
No.1994
05/11 09:44

edit

git diff で 特定の 2つのコミットの差分を表示させる

● git diff で 特定の 2つのコミットの差分を表示させる

git diff 古いほうのコミットID  新しいほうのコミットID

(「古いほうのコミットID」「新しいほうのコミットID」は 順番逆でも差分は表示されますが、patch を作成する時に、順番が逆だとリバースパッチを作成してしまうので注意。)

git diff f2244fdacdc8cc8ef6e8fde146842e35570e059d f007eb9f355424252687e7958f718927d70224ca
No.1982
04/02 16:39

edit

git で commit の変更をバッチファイル(パッチ)にする

● git で commit の変更をバッチファイル(パッチ)にする

git diff コマンドでパッチファイルを作成する

まずは確認します

git diff 古いコミットID 新しいコミットID

これで更新ファイルと更新内容確認します。

問題なければバッチファイルを作成します。ファイル名を後に指定するだけです

パッチファイル(myfile.patch)を作成する

git diff 古いコミットID 新しいコミットID > myfile.patch

これでバッチファイルが作成できました。

Windows用に改行コードを CR+LF にする場合は nkf をかませます

git diff 古いコミットID 新しいコミットID | nkf -Lw > myfile.patch

● windows マシンで パッチファイルを元に更新を適用させる

patch.exe -p1 --dry-run < myfile.patch

オプション

-p1 1階層階層の違いを無視します。
--dry-run ドライラン(テスト実行します)

これでエラーが表示されなければ --dry-run をはずして実行します

patch.exe -p1 < myfile.patch

参考
https://qiita.com/sea_mountain/items/7d9c812e68a26bd1a292
http://2hz.org/akebia/item/699

● windowsマシンの patch.exe

こちらに、ユーザーアカウント制御(UAC)対応版を作ってくださってる方がいるのでこちらからダウンロードしましょう。

https://blogs.osdn.jp/2015/01/13/patch.html

No.1955
04/02 16:56

edit

gitlab へ ssh接続で失敗する時の対処法

● gitlab へ ssh接続で失敗する時の対処法

● OpenSSHキーの登録

秘密鍵「id_rsa_my_gitlab」を登録します。

ssh-add ~/.ssh/id_rsa_my_gitlab

● 接続のテスト

次のコマンドで接続のテストが行えます。

ssh -T git@gitlab.com

これでうまくいけばOKです。

● .ssh/config へ登録する

vi ~/.ssh/cofig
# Gitlab
Host gitlab
  	User git
  	Port 22
 	HostName gitlab.com
	IdentityFile ~/.ssh/id_rsa_my_gitlab
	TCPKeepAlive yes
	IdentitiesOnly yes

もちろんパーミッションは 0600 で!

これで

ssh -T gitlab

でテストして接続できればokです

No.1965
04/06 21:18

edit

git で 「ある特定のファイル」を誰が更新したかを調べる

● git で 「ある特定のファイル」を誰が更新したかを調べる

git log -p ファイルのパス で特定のファイル更新を調べることができます

git log -p app/myscript.js
No.1939
01/04 10:45

edit

間違って master にコミットした修正を別ブランチへ移す

● 間違って master にコミットした修正を別ブランチへ移す

既に master に複数のコミットを行ったあとで、masterからはそのコミットを削除したい場合。

手順としては、

「1. 現在の master 状態から新しいブランチを作成」
「2. master ブランチの不要なコミットを消す」

だけです。簡単ですね。

● 現在のブランチを確認

git branch

● 退避させるブランチ「moved__20201110a」を作成し、移動する

git checkout -b moved__20201110a

(ブランチ名はなんでもokです。)

● master ブランチへ戻る

git checkout master

● A. master ブランチからコミットを取り消す(おすすめ)(git revert を使う方法)

git log とコミットIDを表示させる

git log --pretty=oneline
git revert 【コミットID】

実行するとエディタが立ち上がるので、コメントを記述して [esc] → : → wq します。
指定したコミットを打ち消す、コミットが実行されます。
リモートにも反映させることができます。



● B. master ブランチからコミットを取り消す(git reset を使う方法)

git reset --hard HEAD~4

最新から 4つ のコミットを取り消します。 (コミット自体をなかったことにします。)

以上です。 Souce Treeや VS Code などでブランチのツリーを確認します。

添付ファイル1
tree.png ( 12.5 KBytes ) ダウンロード
No.1901
11/13 13:14

edit

添付ファイル

git で 複数のコミットを1つにまとめる

● git で 複数のコミットを1つにまとめる

あまりにコミットが多いと、他人が見た時に更新ファイルが見つけにくいという問題がおきるというのが .git あるあるの一つです。
そこで複数のコミットを1つにまとめてみましょう。

● HEAD から 合計3つのコミットを1つにまとめる

git rebase -i HEAD~~~
No.1874
10/06 14:54

edit

git log のリストに変更ファイルを表示する 等 git log の便利な機能

● git のログを表示する

git log

( ↑ ↓ キーで移動して q で終了します。)


● git log のリストに「変更ファイル」を表示する

git log --name-status


● git log のリストに「変更ファイル」を表示する (変更情報なし)

git log --name-only


● 1コミット1行のワンライナーで表示( コミットIDフル表示 )

git log --pretty=oneline


● 1コミット1行のワンライナーで表示( コミットID省略表示 )

git log --oneline


● 1コミットログをグラフ表示

git log --graph
No.1873
10/06 13:01

edit

開発用ブランチで作業中に master が修正されたので取り込む

● 開発用ブランチで作業中に master が修正されたので取り込む

よくある光景です。

1. マージにて取り込む場合

現在作業中のブランチにいるとします。 リモートの情報を取得してから origin /master を取り込みます。

git fetch
git merge origin/master

2. リベースにて取り込む場合

現在作業中のブランチにいるとします。 リモートの情報を取得してから ローカルの master を再度ベースに変更します(リベース)。

git fetch
git rebase master

引用 : https://bit.ly/30mAsTA

No.1871
10/06 11:10

edit

git tag でタグをつける / git のタグを取り消す

● git tag でタグをつける

ローカル

git tag -a v1.2.3

リモートへ push

git push origin v1.2.3

● git のタグを取り消す

タグ「v.1.2.3」を取り消します

ローカル

git tag -d v1.2.3

リモート

git push origin :refs/tags/v1.2.3
No.1868
03/05 10:21

edit

git の日本語の文字化けを直す

● git の日本語の文字化けを直す

このコマンドで文字化けが治ります

.git リポジトリ単位に設定する場合

git config --local core.quotepath false

マシン全体に設定する場合

git config --global core.quotepath false



● git diff での日本語の文字化けを防ぐ

.bash_profile

export GIT_PAGER="LESSCHARSET=utf-8 less"
No.1867
10/05 10:04

edit

git で 後からブランチを作成する

●git で 後からブランチを作成する

ブランチを作成するのを忘れて作業をしてしまった!!
そんな時に後からブランチを作成する方法です。

1. まだコミット前の場合

普通に新しいブランチを作成するとそのブランチに変更したファイルも引き継がれます

例: 新しいブランチ my_new_branch を作成する。( + 作成後にブランチに移動)

git checkout -b my_new_branch

以上です。
これだけでokです。


2. コミット後の場合

2-1. git stash で一時退避(退避したデータの確認もしておく)

git stash
git stash list

2-2. 新しいブランチ(my_new_branch)を作成し、そのブランチへ移動する

git checkout -b my_new_branch

2-3. stash したファイルを戻す

git stash pop
No.1861
09/30 10:54

edit

git diff で「削除したファイル」「更新したファイル」のみ抽出する / zip 圧縮する

● git diff で 現在のコミットと1つ前のコミットの差分ファイル名のみ表示させる

git diff --name-only HEAD HEAD~1

● git diff で 現在のコミットと1つ前のコミットの差分ファイル名のみ表示させる 「削除ファイルのみ」

git diff --name-only HEAD HEAD~1 --diff-filter=d

● git diff で 現在のコミットと1つ前のコミットの差分ファイル名のみ表示させる 「削除以外のファイルのみ」

git diff --name-only HEAD HEAD~1 --diff-filter=D

● 差分ファイルを圧縮する

git archive --format=zip --prefix=root/ HEAD `git diff --diff-filter=d --name-only HEAD^ HEAD` -o ~/2020_06_18__11_46_09__sabun.zip
No.1717
06/18 11:47

edit