Git 基操

本文详细介绍了Git的工作流程,包括 Workspace、Index/Stage、Repository 和 Remote 四大核心概念。讲解了本地仓库、远程仓库的管理,以及克隆、添加、提交、远程仓库操作、推送、检出和拉取等关键命令的使用方法。通过实例演示了如何在Git中进行日常开发协作,帮助读者深入理解Git的工作原理和操作技巧。
摘要由CSDN通过智能技术生成

Git 详解


本文主要参考:

阮一峰-常用 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 命令用于克隆(复制)一个远程仓库到本地。

  1. 基本用法:
git clone <repository> [<directory>]

# <repository>: 远程仓库的 URL。
# <directory>: 本地目录的名称,可选参数,如果不指定,默认使用远程仓库的名称。
  1. 克隆指定分支,默认是克隆主分支(通常是 master 或 main)。
git clone -b <branch> <repository>

示例:

git clone -b development https://github.com/example/repo.git

git add

git add 命令用于将文件的修改添加到暂存区,以便后续提交。

  1. 基本用法:
git add <file>
  1. 将所有修改过的文件添加到暂存区,包括新建的、修改过的和删除的文件。
git add -A
# 或者 
git add .
  1. 指定要添加的文件或目录的路径模式。
git add <pathspec>

示例:

git add a.txt # 添加 a.txt 到暂存区
git add *.txt   # 添加所有以 .txt 结尾的文件到暂存区, *注意不会穿透文件夹
git add dir_name # 添加 dir_name 下的所有文件到暂存区

git commit

将暂存区的更改提交到本地仓库,并创建一个新的提交(commit).

  1. 基本使用
git commit -m "Commit message"
  1. 自动将所有已经被 Git 管理的修改过的文件暂存起来并提交。注意,对于未被追踪(untracked)的文件,该参数无效,你需要使用 git add 将其加入暂存区。慎用!
git commit -a -m "Commit message"

git remote

git remote 命令用于管理远程仓库.

  1. 基本用法:
git remote [subcommand] [options] [args]
# subcommand: 子命令,用于执行不同的操作。
# options: 选项,用于指定一些额外的参数。
# args: 参数,用于指定远程仓库的名称等。
  1. 添加远程仓库。
git remote add <remote-name> <url>

# <remote-name>: 远程仓库的名称,通常为 origin。
# <url>: 远程仓库的 URL。

示例:

git remote add origin https://example.com/repo.git
  1. 移除已经存在的远程仓库。
git remote remove <remote-name>
# 或者
git remote rm <remote-name>

# <remote-name>: 要移除的远程仓库的名称。

示例:

git remote remove origin
  1. 修改已存在的远程仓库的名称。
git remote rename <old-name> <new-name>
# <old-name>: 已存在的远程仓库的名称。
# <new-name>: 要修改为的新名称。

示例:

git remote rename origin new_origin_name
  1. 显示一个远程仓库的信息。
git remote show <remote-name>

示例:

git remote show origin
  1. 显示远程仓库的详细信息,包括 URL。
git remote -v

git push

git push 命令用于将本地仓库的提交推送到远程仓库。

  1. 基本用法
git push <remote> <branch>
# <remote>: 远程仓库的名称,通常为 origin。
# <branch>: 本地分支的名称,将该分支的提交推送到远程仓库。
  1. 将本地分支与远程分支关联起来。在首次推送分支时,使用 -u 参数可以使本地分支和远程分支建立关联关系,以后推送时可以简化命令。直接使用 git push , 而不用增加 这两个参数了。
git push -u <remote> <branch>

示例

git push -u origin main
  1. 强制推送,用于覆盖远程仓库上的内容。谨慎使用,因为它可能会覆盖其他人的提交。
git push --force <remote> <branch>

示例:

git push --force origin main
  1. 推送所有分支到远程仓库。
git push --all <remote>

示例:

git push --all origin
  1. 推送所有标签到远程仓库。
git push --tags <remote>

示例:

git push --tags origin
  1. 删除远程仓库上的分支。
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 分支
  1. 创建新分支并切换:
git checkout -b <new-branch>

示例:

git checkout -b dev2 # 建立新的分支, 名称为 dev2
  1. 切换到前一个分支:
git checkout -
文件操作
  1. 检出特定文件(从本地仓库检出到工作区),相同路径的本地改动如果没有推入暂存区, 将会消失
git checkout <file>
# <file>: 要检出的文件路径。

示例:

git checkout index.html
  1. 从其他分支检出特定文件, 相同路径的本地改动如果没有推入暂存区, 将会消失
git checkout <branch> -- <file>
# <branch>: 从该分支检出文件。
# <file>: 要检出的文件路径。

示例:

git checkout dev -- index.html

# 从 dev 分支检出 index.html 到工作区
  1. 丢弃所有本地修改:
git checkout -- .

git fetch

git fetch 命令用于从远程仓库下载新的分支和提交(commit),以及更新本地的远程跟踪分支(remote-tracking branch)。git fetch 用于获取远程仓库的最新变更,但并不将这些变更合并到当前分支。它主要用于同步本地仓库和远程仓库的状态。

  1. 基本用法
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。如果你使用了其他远程仓库名,需要相应地替换。

### 正确地在 `git push` 前进行变 (rebase) 作 #### 准备工作 为了确保本地分支是最的,在开始之前应该先获取远程仓库最的更改。这可以通过拉取最来完成: ```bash git fetch origin ``` 此命令会下载所有来自远程服务器上的数据,但不会自动合并或修改当前的工作目录。 #### 执行变作 一旦拥有最的变更记录之后,就可以通过变将自己做的改动应用到最的上游版本之上。假设正在于名为 `main` 的主干开发,则可以运行如下命令来进行交互式的变过程[^1]: ```bash git rebase -i origin/main ``` 该指令会让用户进入编辑器界面并显示一系列待处理的提交项列表。在这里可以选择简化历史(例如压缩多个小规模修正成单次提交),调整顺序或是完全移除某些不必要的提交条目。 对于那些希望保持原有合并结构的情况——比如项目中有复杂的多父级关系的历史图谱时,应当考虑使用带有特定参数的变方式[^2]: ```bash git rebase -i --rebase-merges HEAD~n ``` 这里的 `HEAD~n` 表达式指定了要回溯多少个祖先节点作为起点;具体数值取决于实际需求而定。 #### 解决冲突 如果遇到文件级别的差异无法自动解决的情形,Git 就会在终端提示存在冲突,并暂停整个流程等待人工干预。此时需要手动打开涉及冲突的文档逐一审查对比两方的不同之处,做出适当的选择保存后再继续执行下面两条命令之一以告知 Git 已经解决了相应位置的问题: ```bash git add <file> git rebase --continue ``` 重复上述步骤直到所有的冲突都被妥善处置完毕为止。 #### 完成变后的推送 当顺利完成全部必要的变动后,最后一步就是把经过整理优化过的版提交序列推送到远端共享库中去。由于这次推送涉及到强制覆盖已存在的同名分支,所以记得加上 `-f origin main ``` 不过需要注意的是,这种做法可能会给其他开发者带来困扰甚至破坏他们未同步至中央存储库中的私有进度副本,因此务必谨慎行事!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值