以前書いたメモだと分からなかったので、使う流れに合わせて書いてみました
すでにブランチがある場合
まず、clone する
$ git clone https://ikuboh@dev.azure.com/ikuboh/Rework/_git/Rework
Cloning into 'Rework'...
remote: Azure Repos
remote: Found 3 objects to send. (27 ms)
Unpacking objects: 100% (3/3), 751 bytes | 8.00 KiB/s, done.
ファイルが一式クローンされている。ディレクトリ内に移動する。
$ ls
Rework/
$ cd Rework/
ブランチの確認。まずローカル。続いて全部。
$ git branch
* main
$ git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/main
remotes/origin/test001
目的のブランチ(test001) に移動する。
$ git checkout test001
branch 'test001' set up to track 'origin/test001'.
Switched to a new branch 'test001'
ディレクトリを作成したり、いくつかファイルを置く。
$ mkdir demo
$ touch demo/main_csv.py
追加したファイルを STAGE に上げる
$ git add .
状態を確認する
$ git status
On branch test001
Your branch is up to date with 'origin/test001'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: demo/main_csv.py
new file: demo/main_excel.py
new file: demo/main_v01.py
new file: demo/requirements.txt
コミットする。-m はメッセージなので、本来はきちんと書くべき
$ git commit -m test
[test001 8107c7b] test
4 files changed, 317 insertions(+)
create mode 100644 demo/main_csv.py
create mode 100644 demo/main_excel.py
create mode 100644 demo/main_v01.py
create mode 100644 demo/requirements.txt
再度、状態を確認。
$ git status
On branch test001
Your branch is ahead of 'origin/test001' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
プッシュする
$ git push
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 20 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 2.55 KiB | 2.55 MiB/s, done.
Total 7 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Analyzing objects... (7/7) (7 ms)
remote: Validating commits... (1/1) done (0 ms)
remote: Storing packfile... done (27 ms)
remote: Storing index... done (82 ms)
To https://dev.azure.com/ikuboh/Rework/_git/Rework
25750dc..8107c7b test001 -> test001
$
ブランチを事前に作らずに開始する場合
同様に、まず clone する
$ git clone https://ikuboh@dev.azure.com/ikuboh/Rework/_git/Rework
Cloning into 'Rework'...
remote: Azure Repos
remote: Found 3 objects to send. (27 ms)
Unpacking objects: 100% (3/3), 751 bytes | 8.00 KiB/s, done.
ファイルが一式クローンされている。ディレクトリ内に移動する。
$ ls
Rework/
$ cd Rework/
先にブランチを作っていない場合はここで作る
git checkout -b newbranch
-b は、ブランチを作成後、そのブランチに checkout するオプション。
git branch newbrach
をしてから git checkout newbranch
してもよい
ディレクトリを作成したり、いくつかファイルを置く。
$ mkdir demo
$ touch demo/main.py
追加したファイルを STAGE に上げる
$ git add .
コミットする。-m はメッセージ。
$ git commit -m "test commit: add new files"
状態を確認。
$ git status
プッシュする
$ git push origin newbranch
これで、リモートに newbranch というブランチが作成されプッシュされる
マージ
リモート情報を最新化
git fetch origin
develop ブランチに切り替え、プル
git checkout develop
git pull origin develop
main ブランチをマージ
git merge origin/main
ここでコンフリクトが発生します。
コンフリクト解消
git mergetool
WinMerge 上で対立箇所を選択・編集し、保存→閉じる
- 3列出ているなら、左と中央を見比べて、一番右に反映する
- 中央を採用する場合は、右に反映するだけで良い
- 左を採用する場合は、一度中央に反映して、右に反映する。
- 全部終わったら保存→閉じる
※ コンフリクトしたファイルの数だけWinMerge が繰り返し起動する
対応が終わったらファイルをコミットして、push
git add .
git commit -m "Resolve conflict"
git push
ブランチが更新されると、プルリクエストに自動で反映されます。
競合の解消に Winmerge を使う
以下の設定を .gitconfig に追記することで、Winmerge を競合の解消に使用できます。
※ バックスラッシュ必須です。
[diff]
tool = WinMerge
[difftool "WinMerge"]
cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -f \"*.*\" -e -u -r \"$LOCAL\" \"$REMOTE\"
[merge]
tool = WinMerge
[mergetool "WinMerge"]
cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -e -u \"$LOCAL\" \"$REMOTE\" \"$MERGED\"