日本語
Git入門

Git入門

Git以前のバージョン管理システムと、Gitの動作およびコマンドに関するまとめ

はじめに

Gitについて学習する中で、必要な内容をまとめた記事です。大きな変更がない限り、あるいは追加の学習が必要とならない限り、これがイントロであり、最後の記事になると思います。

Gitとは?

バージョン管理ツールの一種であり、バージョン管理を通じてファイルの変更履歴を記録し、特定の時点の状態を再び利用できるようにするシステムです。

ローカルでのバージョン管理

  1. ディレクトリのコピー

    • 最も単純な方法

    • 誤ってファイルを間違って修正したり、間違ってコピーしたりする可能性がある。

  2. VCS (Version Control System)

    • DBを活用してファイルの変更情報を管理

    • Revision Control Systemが代表的

    • Patch Set(ファイルの変更部分)を管理

    • 一連のPatch Setを活用して、すべてのファイルを特定の時点に戻すことができる

集中型バージョン管理

  • プロジェクトを進める場合、他の開発者との共同作業が頻繁にある

  • このような場合、ファイルを管理するサーバーが別途存在し、クライアントが中央サーバーからファイルを取得して使用する方式が有利

  • 中央サーバーに問題が発生した場合、システムのバックアップが存在しなければすべての履歴を失う可能性があり、これはローカルにも存在していた問題

分散型バージョン管理システム

  • 単にスナップショットを保管するだけでなく、リポジトリと履歴を同時に複製する。

  • サーバーに問題が発生した場合、その複製を通じて作業を再開できる

  • クライアントの中からどれか一つを選んでサーバーを復元することも可能

  • リモートリポジトリの存在により、多様な形式のコラボレーションが可能

  • GitHubもこのリモートリポジトリの一種

一般的な使用法

設定およびファイルアクセスコマンド

# 전역 사용자 설정
git config --global user.name {name} # 이름
git config --global user.email {email_address} # 이메일

# 로컬 사용자 설정 (해당 디렉토리에서 실행)
git config user.name {name} # 이름
git config user.email {email_address} # 이메일

# 설정 조회
git config --list

# 생성
git mkdir {path}/{folder_name} # 폴더
git touch {file_name} # 파일
git init # 파일 관리 시스템

# 저장소 및 히스토리 복제
git clone {repository_url}

# 원격 저장소
git remote add {remote_repo_name} {remote_repo_url} # 추가
git remote -v # 정보 확인

# commit history
git log
git log --oneline # 정보 표시 간략화
git log --all # 현재 head 이후의 최신 기록들을 포함한 전체 정보를 표시
git log --graph # 브랜치를 시각화하여 분기를 표현한 그래프 형태로 정보를 표시

リポジトリ管理に使用するコマンド

git status # 변경사항을 확인하는 명령어
git commit -m {message} # 현재 스테이지에 존재하는 변경 사항을 커밋

git add {file_name} # 특정한 파일을 스테이지에 추가하는 경우
git add . # 해당 레포지토리의 변경사항을 전부 스테이지에 추가하는 경우

Gitの取り消し

ステージのクリア

git rm --cached # root commit이 존재하지 않을 때
git restore --staged # root commit이 존재할 때

コミットの修正

git commit --amend 
# 스테이지에 파일이 없는 경우: 직전 커밋의 메시지를 수정
# 스테이지에 파일이 있는 경우: 기존 커밋에 현재 스테이지를 더하여 덮어쓰기 진행

コミットを特定の時点まですべて元に戻す

git reset --soft {commit_id} # 미래 파일들 전부 stage에 돌려놓음
git reset --mixed {commit_id} # default, 미래 파일들을 전부 working directory에 유지 (add 필요)
git reset --hard {commit_id} # 미래 파일 전부 제거

過去のコミットを削除

git revert {commit_id} # 과거 commit을 제거 후, 제거했음을 commit으로 추가

resetはコミット数が減るため共同作業には不向き。したがって、共同作業時はresetの代わりにrevertの使用を推奨

Git Branch

Branch: 作業領域を分割し、独立して作業できるようにする仕組み

  • 元の状態を維持できるため安全

  • 1つのブランチで1つの作業を進めることで、共同作業の効率が向上

  • Gitの場合、ブランチの作成速度も速く、ファイル容量も大きくない

関連コマンド

# 조회
git branch # 로컬 저장소의 브랜치 대상
git branch -r # 원격 저장소의 브랜치 대상

# 생성
git branch {branch_name}
git branch {branch_name} {commit_id} # 특정 커밋 지점을 기준점으로 생성

# 제거
git branch -d {branch_name} # 병합 완료된 경우
git branch -D {branch_name} # 병합하지 못한 브랜치 강제 삭제

# 브랜치 이동
# 이동 전 반드시 현재 브랜치의 변경사항을 기록할 것
git switch {branch_name} # 이미 있는 브랜치로 이동
git switch -c {branch_name} # 해당 이름의 브랜치를 생성 후 이동
git switch -c {branch_name} {commit_id} # 특정 커밋 지점을 기준점으로 하는 해당 이름의 브랜치를 생성 후 이동

Git Merge

分岐したブランチを統合するプロセス

マージの種類

  • Fast-Forward: ブランチが指すコミットを先頭に移動

  • 3-Way Merge: 各ブランチの最新のコミット2つ + 両ブランチの共通の祖先を使用したマージ

  • Merge Conflict: 同じファイルを修正した場合に発生する衝突 => 衝突を解決した後、3-Way Mergeを実行

# 해당 브랜치를 현재 위치한 브랜치에 병합
git merge {merged_branch}

Git Fork

所有権のないリモートリポジトリを複製すること。主にオープンソースのような、多数の協力者がいる場合に使用される

Forkされたソースに自分のコミットが反映されるプロセス

#
#    원본 원격 저장소 (upstream) <----------- 복제본 원격 저장소 (origin)
#                \           merge request      /|
#                 \                              |
#                  \                 push branch | pull master
#                   \                            |
#                    \     ( pull upstream )     |/
#                     ------------------> 로컬 저장소 (user)
#
  1. 元のリポジトリを自分のリモートリポジトリに複製

  2. 当該リモートリポジトリからローカルに保存

  3. ローカルでブランチを作成し、作業後にその変更をコミット

  4. 元のリモートリポジトリに変更内容に関するマージリクエストをプッシュ

  5. 元のリモートリポジトリでその変更をマージ

  6. 元のリモートリポジトリから変更内容をプル

    • pull upstream

    • sync origin & pull origin

  7. ローカルでマージされた自分のブランチを削除

댓글 작성

게시글에 대한 의견을 남겨 주세요.

댓글 0