中文
Git 入门

Git 入门

关于Git之前的版本控制系统以及Git的工作原理和命令的总结文章

简介

这是一篇在学习 Git 过程中整理所需内容的博文,如果没有重大变化或不需要进一步学习,我认为这既是一篇简介,也将是最后一篇文章。

什么是 Git?

Git 是一种版本控制工具,它通过版本控制记录文件的变更,从而允许用户重新使用特定时间点的记录。

本地版本控制

  1. 复制目录

    • 最简单的方法

    • 可能会不小心修改错误的文件,或者复制错误。

  2. VCS(版本控制系统)

    • 利用数据库管理文件的变更信息

    • 修订控制系统(Revision Control System)是典型的代表

    • 管理补丁集(文件中发生变更的部分)

    • 利用一系列补丁集,可以将所有文件恢复到特定时间点

集中式版本管理

  • 进行项目开发时,经常需要与其他开发人员协作

  • 在这种情况下,单独设置一个管理文件的服务器,由客户端从中央服务器获取并使用文件的方式更为有利

  • 如果中央服务器出现问题,且系统没有备份,可能会丢失所有历史记录,而这在本地也同样存在

分布式版本控制系统

  • 不仅简单地保存快照,还会同时复制存储库和历史记录。

  • 若服务器出现问题,可通过相应的副本恢复工作

  • 也可从任意客户端中选择一个来恢复服务器

  • 远程存储库的存在使得多种协作方式成为可能

  • 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 会减少提交数量,因此不适合协作环境;建议协作时使用 revert 代替 reset

Git 分支

分支:用于划分工作空间,帮助实现独立工作的机制

  • 能持续保持原始状态,因此很安全

  • 在一个分支上进行单一任务,从而提高协作效率

  • 在 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):使用各分支的两个最新提交 + 两个分支的共同祖先进行合并

  • 合并冲突:当修改了相同的文件时会发生冲突 => 解决冲突后进行三向合并

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

Git 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