Git 详解
本文主要参考:
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
Git 是一个分布式版本控制系统,它将项目的存储和版本控制分布在本地和远程仓库之间。以下是 Git 中涉及的一些核心概念:
本地仓库(Local Repository):
本地仓库是存放在本地计算机上的版本控制仓库,包含完整的项目历史和文件。
相关命令:
git init: 在一个目录中初始化一个新的Git仓库。
git clone <repository>: 克隆一个远程仓库到本地。
远程仓库(Remote Repository):
远程仓库是托管在网络上的 Git 仓库,可以通过网络协议(如 HTTPS、SSH)访问。
相关命令:
git remote add <name> <url>: 添加一个远程仓库。
git push <remote> <branch>: 将本地分支的提交推送到远程仓库。
git pull <remote> <branch>: 从远程仓库拉取并合并变化到本地仓库。
工作区(Working Directory):
工作区是包含项目实际文件的目录,是你编辑和修改文件的地方。
相关命令:
git status: 显示工作区和暂存区的状态,显示未提交的修改。
暂存区(Staging Area):
暂存区是介于工作区和本地仓库之间的缓冲区域,用于存放即将提交的文件修改。
相关命令:
git add <file>: 将文件添加到暂存区。
git reset <file>: 从暂存区移除文件,但保留工作区中的修改。
提交(Commit):
提交是将暂存区的修改保存到本地仓库的操作,创建了项目的一个版本。
相关命令:
git commit -m "Commit message": 将暂存区的修改提交到本地仓库,并附带一条提交信息。
常用命令
git clone
git clone
命令用于克隆(复制)一个远程仓库到本地。
- 基本用法:
git clone <repository> [<directory>]
# <repository>: 远程仓库的 URL。
# <directory>: 本地目录的名称,可选参数,如果不指定,默认使用远程仓库的名称。
- 克隆指定分支,默认是克隆主分支(通常是 master 或 main)。
git clone -b <branch> <repository>
示例:
git clone -b development https://github.com/example/repo.git
git add
git add 命令用于将文件的修改添加到暂存区,以便后续提交。
- 基本用法:
git add <file>
- 将所有修改过的文件添加到暂存区,包括新建的、修改过的和删除的文件。
git add -A
# 或者
git add .
- 指定要添加的文件或目录的路径模式。
git add <pathspec>
示例:
git add a.txt # 添加 a.txt 到暂存区
git add *.txt # 添加所有以 .txt 结尾的文件到暂存区, *注意不会穿透文件夹
git add dir_name # 添加 dir_name 下的所有文件到暂存区
git commit
将暂存区的更改提交到本地仓库,并创建一个新的提交(commit).
- 基本使用
git commit -m "Commit message"
- 自动将所有已经被 Git 管理的修改过的文件暂存起来并提交。注意,对于未被追踪(untracked)的文件,该参数无效,你需要使用 git add 将其加入暂存区。慎用!
git commit -a -m "Commit message"
git remote
git remote 命令用于管理远程仓库.
- 基本用法:
git remote [subcommand] [options] [args]
# subcommand: 子命令,用于执行不同的操作。
# options: 选项,用于指定一些额外的参数。
# args: 参数,用于指定远程仓库的名称等。
- 添加远程仓库。
git remote add <remote-name> <url>
# <remote-name>: 远程仓库的名称,通常为 origin。
# <url>: 远程仓库的 URL。
示例:
git remote add origin https://example.com/repo.git
- 移除已经存在的远程仓库。
git remote remove <remote-name>
# 或者
git remote rm <remote-name>
# <remote-name>: 要移除的远程仓库的名称。
示例:
git remote remove origin
- 修改已存在的远程仓库的名称。
git remote rename <old-name> <new-name>
# <old-name>: 已存在的远程仓库的名称。
# <new-name>: 要修改为的新名称。
示例:
git remote rename origin new_origin_name
- 显示一个远程仓库的信息。
git remote show <remote-name>
示例:
git remote show origin
- 显示远程仓库的详细信息,包括 URL。
git remote -v
git push
git push 命令用于将本地仓库的提交推送到远程仓库。
- 基本用法
git push <remote> <branch>
# <remote>: 远程仓库的名称,通常为 origin。
# <branch>: 本地分支的名称,将该分支的提交推送到远程仓库。
- 将本地分支与远程分支关联起来。在首次推送分支时,使用 -u 参数可以使本地分支和远程分支建立关联关系,以后推送时可以简化命令。直接使用 git push , 而不用增加 这两个参数了。
git push -u <remote> <branch>
示例
git push -u origin main
- 强制推送,用于覆盖远程仓库上的内容。谨慎使用,因为它可能会覆盖其他人的提交。
git push --force <remote> <branch>
示例:
git push --force origin main
- 推送所有分支到远程仓库。
git push --all <remote>
示例:
git push --all origin
- 推送所有标签到远程仓库。
git push --tags <remote>
示例:
git push --tags origin
- 删除远程仓库上的分支。
git push --delete <remote> <branch>
示例:
git push --delete origin branch_name
git checkout
git checkout 命令用于切换分支或检出文件, 从本地仓库检出到工作区。它有不同的参数,根据用途可以分为两个主要类别:分支操作和文件操作。
切换分支的影响:
- 工作区(Working Directory):
切换分支会将工作区的文件替换为目标分支的文件,因此工作区的内容会被改变。
- 暂存区(Staging Area):
切换分支不直接影响暂存区,暂存区的内容保持不变。
- HEAD 指针:
HEAD 指针将移动到目标分支,表示当前所在的分支。
检出文件的影响:
- 工作区(Working Directory):
检出文件会用指定版本的文件替换工作区中的文件,因此工作区的内容会被改变。
- 暂存区(Staging Area):
如果文件之前已经被添加到暂存区,检出文件会将暂存区中的文件版本替换为指定版本的文件。
- HEAD 指针:
HEAD 指针保持不变,因为检出文件不涉及分支切换。
分支操作
1.切换分支
git checkout <branch>
# <branch>: 要切换到的目标分支。
示例:
git checkout dev # 切换到 dev 分支
- 创建新分支并切换:
git checkout -b <new-branch>
示例:
git checkout -b dev2 # 建立新的分支, 名称为 dev2
- 切换到前一个分支:
git checkout -
文件操作
- 检出特定文件(从本地仓库检出到工作区),相同路径的本地改动如果没有推入暂存区, 将会消失
git checkout <file>
# <file>: 要检出的文件路径。
示例:
git checkout index.html
- 从其他分支检出特定文件, 相同路径的本地改动如果没有推入暂存区, 将会消失
git checkout <branch> -- <file>
# <branch>: 从该分支检出文件。
# <file>: 要检出的文件路径。
示例:
git checkout dev -- index.html
# 从 dev 分支检出 index.html 到工作区
- 丢弃所有本地修改:
git checkout -- .
git fetch
git fetch 命令用于从远程仓库下载新的分支和提交(commit),以及更新本地的远程跟踪分支(remote-tracking branch)。git fetch 用于获取远程仓库的最新变更,但并不将这些变更合并到当前分支。它主要用于同步本地仓库和远程仓库的状态。
- 基本用法
git fetch -a
(use “git rm --cached …” to unstage)
git remote 命令有哪些参数, 什么作用写出使用方法和注释
将远程新分支拉到本地, 并进行关联
如果远程存在一个分支 okld,而你本地没有这个分支,你可以使用以下命令将该分支拉取到本地并与远程分支建立关联:
git checkout -b okld origin/okld
这个命令的作用是在本地创建一个新分支 okld,并将其与远程的 origin/okld 分支关联起来。这样,你就在本地创建了一个与远程分支同名的分支,并且两者建立了关联。
如果你已经有一个本地分支想要与远程分支建立关联,也可以使用以下命令:
git branch -u origin/okld okld
这个命令将本地分支 okld 与远程分支 origin/okld 建立关联。
请注意,这些命令假定你的远程仓库名为 origin。如果你使用了其他远程仓库名,需要相应地替换。