git の使い方

開発

以前書いたメモだと分からなかったので、使う流れに合わせて書いてみました

すでにブランチがある場合

まず、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 branch -b newbranch

-b は、ブランチを作成後、そのブランチに checkout するオプション。

-b をつけ忘れたら 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 というブランチが作成されプッシュされる

マージ

master なり develop なりマージ先をチェックアウトして、マージを実施する。

git checkout develop
git merge test001

コンフリクトしたら対応する。

対応が終わったらファイルをコミットして、push

git checkout test001       # <-- 必要?
git add <filename>         # 修正したファイル
git commit
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"