Gitについて毎回ググるのめんどくさいからまとめておく


Git についてまとめておく。

22.04.06 更新

What's Git

  • ファイルのバージョン管理システム(分散型バージョン管理システム)

GitHub, Gitlab Bitbucket のようなコード管理サービスとは違う

Features

  • 編集履歴を複数人で共有できる
  • 複数人で修正した部分を統合(marge)できる
  • 一元管理出来る(新旧)
  • 古いバージョンに戻せる

Why need it

  • ソースコードの管理、配布がしやすい
  • 共有が容易であるためチーム開発がしやすい
  • CI/CD を構築するため

Flow Model

Status

CI / CD

Remote and Local Repository

Usage

Install

https://git-scm.com/downloads

Check the version

git version

Result

git version 2.24.3 (Apple Git-128)

First Settings

  • 初期設定としてユーザ名とメールアドレスを登録する
git config --global user.name "User"
git config --global user.email Mail
  • fetch 時に Local 上の情報を Remote と合わせてくれる(branch の削除等)
git config --global fetch.prune true
---
上記を行うと問題がある場合は
git config --global fetch.prune falseに書き換え
都度下記のコマンドを実行する
git fetch --prune ( git fetch -p )
  • git merge 時に commit を作る設定(任意)
git config --global merge.ff false
  • git pull 時に merge commit を作らずに merge する設定
git config --global pull.rebase true
  • 設定項目を確認する
git config --list

Clone

git clone <Your remote repository url>

ssh の設定は別途必要

https://zenn.dev/tzover/articles/git_ssh_settings_tz_220406

Basic command

init

git init

init した場所に.git directory が作成される

Check the branch list

git branch -a

Create new branch

git checkout -b <new branch name>

---
git branch <new branch name>
git checkout <new branch name>

add, commit, fetch, marge, pull, push

git add .
git add README.md
---
git commit -m "commit msg"
---
git fetch
git fetch origin <Remote target branch>
---
git merge <target branch>
---
git pull origin <Remote target branch>
# rebase を付けることで merge commit が残らないため
# Remoteの情報を取得したいだけの時はrebaseを使う方が better
git pull --rebase origin <Remote target branch>
# pull時の挙動をrebaseに統一する方法は下記
git config --global pull.rebase true
---
git push origin <Remote target branch>

rebase

コミット位置を rebese してくれる
master から新しい branch を切って内容を更新したが master 側でも更新をしていて
master の変更内容を取り込む際に commit history を master の
最新の commit 後に rebase してくれる
git merge だと内容の取り込みのみ実施して commit history は別々で保持される

# masterの内容をmergeして最新commit 後にrebase
git rebase <local target branch> // ex.) master
# masterに移動
git checkout master
# masterの内容を最新にする
git merge <local target branch> // ex.) develop

Check the status

git status
git diff // add する前までの変更点
git diff --staged // addした後の変更点

Check the history

git log
git log --oneline // 1行で表示
git log --graph // いい感じに表示
git log -n 10 // コミット数を制限して表示

Clear of staging

git reset HEAD

Redo the last commit

git commit --amend

Cancel changes

git checkout -- <file name>
git checkout -- <directory name>
---
# ALL
git checkout -- .

Stop monitoring with git

rm -rf .git

If you want to change the branch during editing

git stash -a
git checkout -b develop
git stash pop

If you want to push to another remote repository

git remote -v
git remote add upstream <Remote repository url>
git add .
git commit -m  "commit msg"
git push upstream develop

Delete remote repository

git remote -v
git remote rm origin
---

Delete local branch

git branch -d <local branch name>

Delete remote branch

git push --delete origin <remote branch name>
git push origin :<remote branch name>

Change remote repository

git remote set-url origin "Remote repository URL"

Edit history

git rebase -i HEAD~2
git rebase -i <commit ID>

Interactive な画面が起動
修正したい部分を pick から edit に変更

  • 修正を実施
git commit --amend
  • commit msg を入力

  • 次の edit に移動

git rebase --continue

無い場合は HEAD に移動してくれる

Practices

Create a new project locally and then push

Local 上で App を作成した後、Remote に Push する
  • Initialize(Start monitoring with Git)
git init
  • Check Remote repository
git remote -v
  • Registration of Remote repository
git remote add "Remote repository URL"
  • Check Remote repository
git remote -v
  • Make a file of text
touch src/test.txt
echo "Hello World" > src/test.txt
cat src/test.txt
  • Move to staging area
git add .  ( git add src/test.txt )
  • Move to repository area
git commit -m "made a test.txt file in directory of src"
  • Push to Remote repository (master branch)
git push -u origin master

2 回目以降は git push のみで OK (-u のおかげ)

Clone the project in the Remote repository, then edit and push

Remote 上で Repository を作成した後、Clone して更新した後、 Push する
  • Clone with SSH
git clone "Remote repository URL"
cd "ProjectName"
  • Create and modify a branch
git checkout -b develop
  • Check if the folder is up to date
git pull origin master
  • Make a file of text
touch src/test2.txt
echo "Hello Git" > src/test2.txt
cat src/test2.txt
  • Move to staging area
git add .  ( git add src/test2.txt )
  • Move to repository area
git commit -m "made a test2.txt file in directory of src"
  • Push to Remote repository (develop branch)
git push -u origin develop