Git 是一个分布式版本控制系统,主要用于跟踪和管理源代码的更改。它允许多名开发者协作,同时提供了强大的功能来管理项目的历史记录和不同版本。本文主要记录和整理,个人理解的Git相关的一些指令和用法
文章目录
-
- [一、git安装 & 创建git仓库](#一、git安装 & 创建git仓库)
- [二、理解git 文件的三种不同状态和工作模式](#二、理解git 文件的三种不同状态和工作模式)
-
- [1. **Git 文件的三种状态**](#1. Git 文件的三种状态)
-
- [1.1 **已修改(Modified)**](#1.1 已修改(Modified))
- [1.2 **已暂存(Staged)**](#1.2 已暂存(Staged))
- [1.3 **已提交(Committed)**](#1.3 已提交(Committed))
- [2. **Git 的工作模式**](#2. Git 的工作模式)
-
- [2.1 **工作区(Working Directory)**](#2.1 工作区(Working Directory))
- [2.2 **暂存区(Staging Area)**](#2.2 暂存区(Staging Area))
- [2.3 **本地仓库(Repository)**](#2.3 本地仓库(Repository))
- [3. **Git 的工作流程**](#3. Git 的工作流程)
- 三、git基本指令
-
- [1. **git init**](#1. git init)
- [2. **git clone**](#2. git clone)
- [3. **git add**](#3. git add)
- [4. **git commit**](#4. git commit)
- [5. **git status**](#5. git status)
- [6. **git log**](#6. git log)
- [7. **git diff**](#7. git diff)
-
- [7.1 **git diff 的基本用法(查看工作区 和 暂存区之间的差异)**](#7.1 git diff 的基本用法(查看工作区 和 暂存区之间的差异))
- [7.2 **查看暂存区与本地仓库的差异**](#7.2 查看暂存区与本地仓库的差异)
- [7. 3 **比较不同提交之间的差异**](#7. 3 比较不同提交之间的差异)
- [7.4 **查看特定文件的差异(工作区与暂存区)**](#7.4 查看特定文件的差异(工作区与暂存区))
- [7. 5 **比较暂存区与本地仓库中的特定文件的差异**](#7. 5 比较暂存区与本地仓库中的特定文件的差异)
- [7. 6 **比较分支之间的差异**](#7. 6 比较分支之间的差异)
- [7.7 **忽略空白字符的差异**](#7.7 忽略空白字符的差异)
- [7.8 **生成统计信息**](#7.8 生成统计信息)
- [7.9 **查看提交的差异**](#7.9 查看提交的差异)
- [7.10 **查看与远程仓库之间的差异**](#7.10 查看与远程仓库之间的差异)
- [9. **git ls-files**](#9. git ls-files)
- [10. **git rm**](#10. git rm)
- [11. **git reset**](#11. git reset)
- 四、git分支管理指令
-
- [1. **git checkout**](#1. git checkout)
-
- [1. 1 **切换到本地指定分支**](#1. 1 切换到本地指定分支)
- [1. 2 **新建本地分支并切换到该分支**](#1. 2 新建本地分支并切换到该分支)
- [2. **git branch**](#2. git branch)
- [3. **git merge**](#3. git merge)
- 五、SSH密钥生成及远程仓库配置
-
- [1. **生成新的 SSH 密钥**](#1. 生成新的 SSH 密钥)
- [2 .**将 SSH 公钥添加到远程仓库平台**](#2 .将 SSH 公钥添加到远程仓库平台)
- [3. **测试 SSH 连接**](#3. 测试 SSH 连接)
- [4. **然后就可以在 克隆时使用 SSH URL了**](#4. 然后就可以在 克隆时使用 SSH URL了)
- [5. **(可选)设置全局用户名和邮箱**](#5. (可选)设置全局用户名和邮箱)
- 六、git远程仓库相关指令
-
- [1. **git pull**](#1. git pull)
-
- [1. 1 **pull基础用法**](#1. 1 pull基础用法)
- [1. 2 **关于pull冲突**](#1. 2 关于pull冲突)
- [1. 3 **从远程恢复文件**](#1. 3 从远程恢复文件)
- [方式 1:重置本地分支的状态,使其与远程仓库的状态完全一致。这会将所有本地删除的文件恢复,回到远程仓库的状态。](#方式 1:重置本地分支的状态,使其与远程仓库的状态完全一致。这会将所有本地删除的文件恢复,回到远程仓库的状态。)
- [方式 2:仅恢复特定的文件](#方式 2:仅恢复特定的文件)
- [2. **git push**](#2. git push)
-
- [2. 1 **push基础用法**](#2. 1 push基础用法)
- [2. 2 **关于push冲突**](#2. 2 关于push冲突)
- [3. **git remote**](#3. git remote)
- 具体来说:
-
- [3. 1 **git remote -v**](#3. 1 git remote -v)
- [3.2 **添加远程仓库**](#3.2 添加远程仓库)
- [4. **确认分支名称是否正确**](#4. 确认分支名称是否正确)
- [4. **git fetch**](#4. git fetch)
一、git安装 & 创建git仓库
可以使用以下指令安装git
bash
sudo apt update
sudo apt install git
可以使用git init在当前目录下创建一个空仓库,也可以使用git clone 从远程仓库clone一个项目
bash
git init
git clone 远程仓库地址
创建仓库时不想放在当前目录下,也可以指定路径
cpp
git init 路径
git clone 远程仓库地址 路径
二、理解git 文件的三种不同状态和工作模式
在 Git 中,文件在版本控制的过程中可以处于三种不同的状态:已修改(modified) 、已暂存(staged) 和 已提交(committed)。这些状态帮助开发者跟踪文件从修改到保存的过程。我们来详细看看这三种状态以及它们在 Git 工作模式中的作用。
1. Git 文件的三种状态
1.1 已修改(Modified)
定义: 文件已经被修改,但是这些修改还没有被提交到 Git 的版本控制中。
解释: 当你对某个文件进行了更改(比如修改了代码或文档,或者删除、新建了文件等),此时文件处于 "已修改" 状态,但这些改动还没有被添加到暂存区。
实例:
bash
# 修改了文件,但还没有添加到暂存区
vim index.html # 修改文件
git status
此时 git status
会显示 index.html
已被修改,但尚未添加到暂存区。
1.2 已暂存(Staged)
定义: 文件的修改已经添加到暂存区,准备在下一次提交时包含这些修改。
解释 : 当你希望把某个文件的改动纳入下一次提交时,使用 git add
将文件添加到暂存区。暂存区可以理解为一个中间状态,记录哪些修改会被包含在下一次提交中。
实例:
bash
git add index.html
git status
此时 index.html
的状态会显示为 Changes to be committed
,表示文件的修改已经被暂存,准备提交。
1.3 已提交(Committed)
定义: 文件的修改已经被保存到 Git 本地仓库中,成为项目的永久历史的一部分。
解释 : 当你对所有想要提交的文件进行了暂存,并使用 git commit
提交它们后,这些改动会保存到 Git 本地仓库中,文件就处于 "已提交" 状态。
实例:
bash
git commit -m "Updated index.html"
git status
此时所有暂存的文件已被提交,git status
会显示 "nothing to commit, working tree clean"。
2. Git 的工作模式
Git 的工作模式主要通过三个区域来实现,即 工作区(Working Directory) 、暂存区(Staging Area 或 Index) 和 本地仓库(Repository)。这三个区域对应着文件的三种状态,并构成了 Git 的工作流。
2.1 工作区(Working Directory)
定义: 工作区是你当前看到的项目文件所在的目录,也是你进行代码编辑的地方。
解释: 当你克隆一个 Git 仓库或初始化一个新仓库时,工作区就是文件的实际存储和修改的地方。工作区中的文件可以是未修改的,也可以是已修改的。
实例:
bash
git clone https://github.com/user/repo.git
repo
仓库会被克隆到你的本地系统,此时你所看到的文件就是工作区的内容。
2.2 暂存区(Staging Area)
定义: 暂存区是一个虚拟区域,保存着你打算在下次提交时记录的更改。
解释 : 当你使用 git add
时,修改过的文件就会进入暂存区。暂存区可以理解为一个准备提交的列表,Git 将会根据暂存区的内容生成新的提交。
实例:
bash
git add index.html
此时,index.html
的更改就被保存到暂存区中,等待提交。
2.3 本地仓库(Repository)
定义: 本地仓库是 Git 真正保存提交历史的地方,它包含了所有提交的记录。
解释 : 当你执行 git commit
时,暂存区的内容会被保存到本地仓库中,成为项目历史的一部分。本地仓库通过 .git
目录来存储这些信息。
实例:
bash
git commit -m "Updated index.html"
这会把暂存区中的文件提交到本地仓库,成为版本历史的一部分。
3. Git 的工作流程
Git 的工作流程大致如下:
-
修改文件 : 当你在工作区修改文件时,文件会处于 "已修改" 状态。你可以用
git status
查看哪些文件发生了变化。 -
暂存文件 : 使用
git add
命令将已修改的文件添加到暂存区。此时文件处于 "已暂存" 状态,准备提交。 -
提交文件 : 使用
git commit
命令将暂存区的文件提交到本地仓库,文件进入 "已提交" 状态,成为项目的一部分。 -
推送到远程仓库(可选) : 如果项目与远程仓库(如 GitHub)同步,还可以使用
git push
将本地的提交推送到远程仓库中。
三、git基本指令
1. git init
功能: 初始化一个新的 Git 仓库。
用法:
bash
git init
解释 : 在当前目录中初始化一个新的 Git 仓库。这会创建一个 .git
目录,其中包含所有版本控制的信息。
实例:
bash
mkdir my_project
cd my_project
git init
在 my_project
文件夹中初始化一个新的 Git 仓库。
2. git clone
功能: 克隆一个现有的 Git 仓库。
用法:
bash
git clone <repository_url>
解释: 将远程仓库的内容克隆到本地。远程仓库可以是 GitHub、GitLab 等平台上的项目。
实例:
bash
git clone https://github.com/user/repo.git
上述指令将 https://github.com/user/repo.git
仓库克隆到本地。
如果想要使用 Git 克隆远程仓库的某个特定分支,可以通过 git clone
命令的 -b
(或 --branch
)选项来实现。这个命令允许你指定克隆远程仓库时仅获取某个特定分支,而不是默认的 main
或 master
分支。
bash
git clone -b <branch_name> <repository_url>
-b <branch_name>
: 指定要克隆的分支名称。<repository_url>
: 远程仓库的地址(如 GitHub、GitLab 或其他 Git 服务器的仓库 URL)。
假设你要从 GitHub 仓库 https://github.com/user/repo.git
克隆分支 feature-branch
,可以执行以下命令:
bash
git clone -b feature-branch https://github.com/user/repo.git
3. git add
功能: 将文件添加到暂存区(staging area)。
将制定文件添加到暂存区:
bash
git add 文件名
当前目录中的所有更改添加到暂存区::
bash
git add .
实例:
bash
git add index.html
git add .
以上两条指令分别表示将 index.html
文件、当前目录中的所有更改 添加到暂存区。
4. git commit
功能: 提交暂存区的内容到本地仓库。
用法:
bash
git commit -m "相关说明"
解释 : 将暂存区的更改提交到本地仓库。-m
选项允许直接提供提交说明,未提供时将打开编辑器强制输入说明。
实例:
bash
git commit -m "Initial commit"
提交带有说明 Initial commit
的更改。
由本文第二部分的介绍可知,对工作空间内的文件修改后,需要先使用git add 指令将修改保存到暂存区,然后再使用git commit指令,将修改提交到本地仓库,也可以直接使用以下指令合并以上操作,即自动将修改保存到暂存区,并提交到本地仓库
bash
git commit -am "相关说明"
5. git status
功能: 显示工作区和暂存区的状态。
用法:
bash
git status
解释: 显示哪些文件被修改但未添加到暂存区,哪些文件在暂存区等待提交,以及哪些文件未被 Git 跟踪。
6. git log
功能: 显示项目的提交历史。
用法:
bash
git log
git log --oneline
git log --graph --oneline
解释 : 列出所有提交的记录。可以添加选项简化输出,--oneline
显示每次提交的一行简要信息,--graph
以图表形式显示分支和合并历史。
实例:
bash
git log --oneline --graph
查看简化的提交历史和项目的分支结构。
7. git diff
git diff
是 Git 中用于比较文件改动的一个非常强大的命令。它可以显示工作区、暂存区或已经提交的文件之间的差异,帮助开发者了解当前的更改细节。
7.1 git diff 的基本用法(查看工作区 和 暂存区之间的差异)
bash
git diff
解释 : 这个命令显示工作区中已修改但尚未暂存的文件与最新提交(HEAD)版本之间的差异。简而言之,git diff
展示的是 工作区 和 暂存区 之间的差异。
实例 :
假设你修改了 index.html
文件,但还没有使用 git add
将其添加到暂存区:
bash
git diff
输出会显示 index.html
文件的具体改动,比如哪些行被修改、添加或删除。
7.2 查看暂存区与本地仓库的差异
bash
git diff --staged
或
bash
git diff --cached
解释: 显示暂存区与最新提交版本(HEAD)的差异。这里的最新提交版本是本地仓库中当前分支的最新提交
实例:
bash
git add index.html
git diff --staged
在 git add
之后运行这个命令,显示 index.html
文件的暂存区和提交之间的差异。
7. 3 比较不同提交之间的差异
bash
git diff <commit1> <commit2>
解释: 比较两个提交之间的差异,显示它们的改动情况。
实例:
bash
git diff abc1234 def5678
这个命令比较提交 abc1234
和 def5678
之间的所有差异,输出这些提交间文件的更改情况。你可以通过提交哈希值或分支名称来指定不同的提交。
7.4 查看特定文件的差异(工作区与暂存区)
bash
git diff <file_name>
解释: 显示工作区中指定文件的差异,适用于查看某个文件的具体修改内容。
实例:
bash
git diff index.html
显示 index.html
文件的更改情况。
7. 5 比较暂存区与本地仓库中的特定文件的差异
bash
git diff --staged <file_name>
实例:
bash
git add index.html
git diff --staged index.html
显示 index.html
文件暂存区和最新提交之间的差异。
7. 6 比较分支之间的差异
bash
git diff <branch1> <branch2>
解释: 比较两个分支之间的差异,显示这两个分支所做的不同更改。
实例:
bash
git diff main feature-branch
显示 main
分支和 feature-branch
分支之间的改动。
7.7 忽略空白字符的差异
有时,代码格式的改变(如空白字符的变化)可能会造成不必要的差异显示。使用 -w
选项可以忽略空白字符的变化。
bash
git diff -w
实例:
bash
git diff -w index.html
忽略 index.html
文件中的空白字符差异,仅显示实际内容的变化。
7.8 生成统计信息
bash
git diff --stat
解释: 生成一份简洁的文件改动统计信息,而不显示具体的改动内容。
实例:
bash
git diff --stat
输出结果会显示每个文件的改动情况,包括新增和删除的行数。例如:
index.html | 4 +++-
style.css | 3 +++
2 files changed, 7 insertions(+), 1 deletion(-)
7.9 查看提交的差异
bash
git diff <commit>
解释: 查看当前工作区和某个特定提交之间的差异。
实例:
bash
git diff HEAD
显示当前工作区和最后一次提交(HEAD)之间的差异。
7.10 查看与远程仓库之间的差异
bash
git diff <branch> <remote>/<branch>
解释: 查看本地分支与远程分支之间的差异。
实例:
bash
git diff main origin/main
显示本地 main
分支和远程仓库 origin
的 main
分支之间的差异,帮助你了解本地与远程的不同步情况。
9. git ls-files
git ls-files
是 Git 中一个非常有用的命令,用来列出 Git 仓库中的文件。它可以帮助你查看哪些文件已经被 Git 跟踪,或者根据特定的条件过滤文件。
bash
git ls-files
解释 : 该命令显示当前 Git 仓库中所有已经被跟踪的文件。这些文件是指那些已经通过 git add
添加到 Git 的版本控制系统并且不在 .gitignore
列表中的文件。
10. git rm
git rm
是 Git 中用于删除文件的命令,它不仅会在文件系统中删除指定的文件,还会将删除操作记录在 Git 的暂存区,以便在下一次提交时将该删除记录保存到版本控制系统中。
bash
git rm <file>
解释 : 该命令会从工作区和暂存区中删除指定的文件。删除后,文件将不再受到 Git 的版本控制,并且在下一次 git commit
时删除记录将被提交。
实例:
bash
git rm index.html
git commit -m "Remove index.html"
这将删除 index.html
文件,并提交删除操作到仓库。
11. git reset
版本回退到上一个版本:
git reset --hard HEAD^ 是一个 Git 命令,常用于将当前分支的最新一次提交回退到它的前一个提交,同时丢弃所有工作区和暂存区中的更改。它会彻底清理当前分支的状态,回到指定的提交,并且未提交的所有改动将不可恢复。
bash
git reset --hard HEAD^
版本往回退m个版本:
其中m是回退的版本个数
bash
git reset --hard HEAD~m
回退或前进到指定版本:
bash
git reset --hard 版本标识
可以使用git reflog查看所有改动的标识
四、git分支管理指令
1. git checkout
1. 1 切换到本地指定分支
功能: 切换分支或恢复文件。
用法:
bash
git checkout 分支名
bash
git checkout <commit_hash>
git checkout -- <file_name>
解释 : 切换到指定分支,或者将文件恢复到指定的提交版本。--
用于恢复工作区的文件到最新的暂存状态。
实例:
bash
git checkout feature-branch
git checkout 3a6b8c1
git checkout -- index.html
以上三条示例分别表示切换到 feature-branch
分支,回滚到提交 3a6b8c1
,恢复 index.html
文件。
1. 2 新建本地分支并切换到该分支
bash
git checkout -b 新的分支名
2. git branch
功能: 查看、创建或删除分支。
用法:
bash
git branch
git branch <new_branch>
git branch -d <branch_name>
解释 : git branch
列出所有本地分支,并且标*号的是当前分支,git branch <new_branch>
创建新分支,-d
删除分支。
实例:
bash
git branch feature
git branch -d feature
创建名为 feature
的分支,之后删除该分支。
以下指令可以查看远程仓库的所有分支
bash
git branch -r
3. git merge
功能: 合并分支。
用法:
bash
git merge <branch_name>
解释: 将指定的分支合并到当前分支。
实例:
bash
git checkout main
git merge feature-branch
将 feature-branch
合并到 main
分支。
关于合并冲突:
合并的时候,最大的难点就是冲突了,合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改,如果我们在两个分支中同时修改了同一个文件,这时再合并,就可能会产生冲突,冲突并不可怕,可怕的是要怎样去解决,一般是根据实际的需求来选择保留那个,或者兼顾等
五、SSH密钥生成及远程仓库配置
1. 生成新的 SSH 密钥
可以使用以下命令生成一个新的 SSH 密钥对。
命令:
bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
或:
cpp
ssh-keygen -t rsa -C "your_email@example.com"
解释:
-t rsa
: 指定生成的密钥类型为 RSA。-b 4096
: 指定密钥长度为 4096 位。-C "your_email@example.com"
: 添加一个注释,一般使用你的邮箱作为标识。
执行后 :
系统会提示你输入密钥保存的路径和文件名,默认保存在 ~/.ssh/id_rsa
。也会提示是否为密钥设置一个密码,按需选择。
2 .将 SSH 公钥添加到远程仓库平台
SSH 公钥存储在 ~/.ssh/id_rsa.pub
中。下一步是将该公钥复制并添加到远程仓库平台(如 GitHub、GitLab)。
可以使用以下命令输出SSH公钥的内容进行复制,也可以按照上图生成密钥时,提示的输出路径,找到并打开生成的id_rsa.pub文件,复制里面的内容:
bash
cat ~/.ssh/id_rsa.pub
复制完成后,进入 GitHub 或 GitLab 的设置页面,找到 SSH and GPG keys (GitHub)或 SSH Keys(GitLab),并将公钥粘贴进去。这里以GIthub远程仓库为例,在Github设置的SSH keys项中,添加复制的内容,如下图所示
- GitHub : GitHub SSH Key 设置
- GitLab : GitLab SSH Key 设置
3. 测试 SSH 连接
配置完成后,可以使用以下命令测试与 GitHub 或 GitLab 的 SSH 连接是否成功:
命令:
bash
ssh -T git@github.com
或:
bash
ssh -T git@gitlab.com
解释 : 尝试通过 SSH 连接到 GitHub 或 GitLab。如果连接成功,会看到类似 Hi username! You've successfully authenticated...
的提示信息。
注:@ 后面的是远程仓库的地址
4. 然后就可以在 克隆时使用 SSH URL了
为了确保 Git 使用 SSH 进行连接,在克隆远程仓库时推荐使用 SSH URL 格式:
命令(示例):
bash
git@github.com:JZX-MY/gittest.git
解释 : 使用 SSH URL 克隆仓库,而不是 HTTPS URL(https://
格式)。这种方式不会要求每次操作时输入用户名和密码。
5. (可选)设置全局用户名和邮箱
虽然这不是 SSH 相关的命令,但为了使 Git 的提交记录保持一致,建议设置全局的用户名和邮箱。
命令:
bash
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
六、git远程仓库相关指令
1. git pull
1. 1 pull基础用法
功能: 从远程仓库拉取最新更改并合并。
用法:
bash
git pull 远程仓库在本地的名字 远程仓库的分支
解释: 从指定的远程仓库和分支拉取最新更改并自动合并到当前分支。注意,这里的远程仓库在本地的名字可以使用git remote -v查看,如果没有配置,需要使用git remote add指令进行配置,详情见本小节的3,git remote指令的介绍
实例:
bash
git pull origin main
从远程仓库 origin
的 main
分支拉取最新更改。
注意: git pull 相当于git fetch 与git merge的组合,在git merge时 可能需要给定合并说明,如果不想要执行git pull后强制进入编辑器 编辑合并说明,可以在后面加上--no-edit
c
git pull 远程仓库在本地的名字 远程仓库的分支 --no-edit
注意: nano编辑器可按Ctrl+X键退出编辑模式
1. 2 关于pull冲突
如果从远程仓库拉取后,在本地修改了文件A,且远程仓库中的另一个文件B被修改,此时,使用git pull指令,可以把远程仓库中文件B的修改更新到本地仓库,且本地仓库中修改的文件A的内容并不会被覆盖,此时使用git status指令,会提示本地仓库的分支领先于远程的分支,即该情况并不会产生pull冲突
如果从远程仓库拉取后,在本地修改了文件A,且远程仓库中文件A的相同行处被也其他人修改,此时,使用git pull指令,就会产生pull冲突。
此时git 无法自动完成合并。我们需要手动解决这些冲突(编辑本地的冲突文件,视具体情况处理),然后使用git add和git commit 提交合并的结果。
1. 3 从远程恢复文件
当我们使用git pull从远程仓库拉取了一个项目到本地仓库,然后在本地仓库通过键盘上的delete键删除了一个文件,并提交到了本地仓库,此时,我再次使用git pull从远程仓库拉取该项目到本地,会显示当前已经是最新的了,并不能通过这种方式恢复被我们删除的文件
原因分析:
当我们最初使用 git pull 从远程仓库拉取了项目,并将它同步到本地。这意味着此时你的本地分支与远程分支是同步的。然后,我们在本地删除了一个文件,并使用 git commit 提交了这次删除操作。这会将文件删除记录提交到本地仓库,但还没有推送到远程仓库。当我们再次运行 git pull origin master 时,Git 会检查远程仓库的状态,发现远程仓库的 master 分支没有新的提交,因此显示"已经是最新的"。(尽管本地仓库已经与远程仓库不同了)
此时,我们可以使用以下方法进行恢复
方式 1:重置本地分支的状态,使其与远程仓库的状态完全一致。这会将所有本地删除的文件恢复,回到远程仓库的状态。
bash
git reset --hard 远程仓库的本地名/远程仓库的分支名
解释:
--hard
:将本地分支、暂存区和工作区都重置到远程仓库的最新状态,这意味着所有未提交的更改都会被丢弃,完全同步到远程分支的状态。- 如果你已经提交了删除操作,这个命令会恢复被删除的文件,因为它会重置到远程仓库最新的提交。
注意 : 使用 --hard
选项会丢失所有本地的未提交更改,务必谨慎。
方式 2:仅恢复特定的文件
如果你只想恢复某个特定文件而不是所有文件,可以通过以下命令从远程仓库恢复该文件。
bash
git checkout 远程仓库的本地名/远程仓库的分支名 -- <file_path>
解释:
git checkout 远程仓库的本地名/远程仓库的分支名 -- <file_path>
:从远程仓库的远程仓库的分支名
分支恢复指定的文件,并将其放到本地工作区。<file_path>
:你想要恢复的文件的路径。
实例 :
如果你删除了 config.json
文件,想从远程恢复这个文件:
bash
git checkout origin/master -- config.json
这个命令会将远程仓库中最新版本的 config.json
恢复到你的本地工作区。
恢复文件后,你需要重新提交这些文件,使得删除的文件在本地被恢复,并且可以推送到远程仓库。
bash
git add <file_path>
git commit -m "Restore deleted file"
2. git push
2. 1 push基础用法
功能: 将本地提交推送到远程仓库。
用法:
bash
git push 远程仓库在本地的名字 远程仓库的分支
解释: 将当前分支的提交推送到远程仓库中的指定分支。
实例:
bash
git push origin main
2. 2 关于push冲突
与pull冲突类似,如果在本地仓库中对文件A进行了修改,另一个人对远程仓库中的文件A也进行了修改,此时使用git push将本地仓库推送到远程就会产生冲突,更新到远程被拒绝
此时,我们需要手动解决这些冲突,需要先使用git pull 拉取远程分支的最新内容,然后视具体情况,编辑本地的冲突文件来解决冲突,然后使用git add和git commit 提交合并的结果。最后,再使用git push提交到远程
3. git remote
功能: 管理远程仓库。
用法:
bash
git remote -v
git remote add <name> <url>
git remote rm <name>
解释 : git remote -v
显示所有远程仓库的详细信息,add
添加新的远程仓库,rm
删除远程仓库。
实例:
bash
git remote add origin https://github.com/user/repo.git
git remote rm origin
添加或删除名为 origin
的远程仓库。
具体来说:
3. 1 git remote -v
该命令将列出你的远程仓库列表:
bash
git remote -v
这个命令会列出所有配置的远程仓库及其对应的 URL。如果没有你想要的远程仓库,说明你还没有配置它。如下图中例子所示,远程仓库git@github.com:JZX-MY/gittest.git在本地的名字为origin
3.2 添加远程仓库
如果发现远程仓库没有被配置,你可以使用以下命令添加远程仓库:
bash
git remote add 设定远程仓库在本地的名字 远程仓库地址
4. 确认分支名称是否正确
确保你要拉取的分支名 newb
存在。如果该分支名有误,你可以使用以下命令查看所有远程分支:
bash
git branch -r
4. git fetch
功能: 从远程仓库获取最新更新,但不自动合并。
用法:
bash
git fetch <remote>
解释: 从远程仓库获取最新的更改,但不会合并到当前分支,允许开发者手动查看和处理这些更改。
实例:
bash
git fetch origin
从远程仓库 origin
获取最新的更新。