经验笔记:Git 基础操作指南
推荐一下Gitee最好的Git操作教程:Learn Git Branching
经验笔记:Git 基础操作指南
1. 安装 Git
首先确保您的计算机上已安装 Git。如果还没有安装,可以从 Git官网 下载并安装。
2. 配置 Git
安装完成后,打开命令行工具,配置您的 Git 账户信息,包括用户名和邮箱。
- 用户名 (
user.name
) 和 邮箱 (user.email
) 用于记录每次提交的信息。这些信息会显示在提交历史中,帮助团队成员了解谁做了哪些更改。 - 注意:这里的用户名和邮箱不是用于 SSH 验证的用户名和邮箱。SSH 验证使用的是 SSH 密钥对,而不是这些配置信息。
这一步对于记录您的贡献非常重要:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
# git config --local user.email "you@example.com"
# git config --system user.email "you@example.com"
# 可以使用下面的命令查看设置结果
# 该命令用于列出所有当前配置的 Git 设置:全局配置与当前本地仓库配置
# git config --list
# 如果已经初始化过,但是想要修改用户名与邮箱,可以用以下命令修改:
# git config --global --replace-all user.name "输入你的用户名"
# git config --global --replace-all user.email "输入你的邮箱"
git
: Git 命令行工具。config
: 配置命令,用于设置 Git 的各种配置选项。--global
: 表示这是一个全局配置,适用于所有 Git 仓库,仅对当前用户有效。--local
: 表示这是一个局部配置,适用于当前 Git 仓库,仅对当前用户有效。--system
: 表示这是一个全局配置,适用于所有 Git 仓库,对整台计算机的用户都有效。user.name
: 设置用户的姓名。user.email
: 设置用户的邮箱。"Your Name"
: 您的名字,例如 “John Doe”。"you@example.com"
: 您的邮箱地址,例如 “john.doe@example.com”。--global
: 用于指定配置项是全局的,即对系统中所有的仓库都生效。当你使用 git config --global 命令时,Git 会将设置保存到你的主目录下的 .gitconfig 文件中。
3. 创建一个新的 Git 仓库
接下来,创建一个项目文件夹,并将其初始化为 Git 仓库:
mkdir my-project
cd my-project
git init
mkdir
: 创建目录的命令。my-project
: 新创建的目录名。cd
: 变更目录的命令。my-project
: 进入刚刚创建的目录。git
: Git 命令行工具。init
: 初始化命令,用于将当前目录初始化为一个 Git 仓库。
4. 创建并添加文件
在项目中创建一个文件,例如 README.md
,并添加一些初始内容:
echo "# My Project" > README.md
echo
: 输出文本的命令。"# My Project"
: 要输出的文本内容。>
: 重定向操作符,将输出的内容写入文件。README.md
: 要创建的文件名。
将此文件添加到 Git 的跟踪列表中:
git add README.md
git
: Git 命令行工具。add
: 添加命令,用于将文件添加到暂存区。README.md
: 要添加的文件名。
5. 丢弃更改
如果您想丢弃这些更改,可以使用 git restore 命令:
git restore README.md
- 未添加到暂存区的更改:
如果更改尚未被 git add 添加到暂存区,git restore 可以恢复工作区中的文件到上次提交的状态。 - 已添加到暂存区的更改:
如果更改已经被 git add 添加到暂存区,git restore 可以将更改从暂存区移回工作区。
6. 提交更改
提交您刚才添加的文件到本地仓库,并附带一条有意义的提交信息:
git commit -m "Initial commit with README file"
# git commit -a -m "Initial commit with README file"
git
: Git 命令行工具。commit
: 提交命令,用于将暂存区的内容提交到本地仓库。-m
: 消息选项,用于指定提交信息。-a
: 功能选项,自动将所有已跟踪文件的更改添加到暂存区,以便在一次命令中完成添加更改和提交。"Initial commit with README file"
: 提交信息,描述本次提交的内容。
7. 修改文件并提交
编辑 README.md
文件,添加更多内容,例如项目特性:
echo "## Features" >> README.md
echo "- Feature 1" >> README.md
echo "- Feature 2" >> README.md
echo
: 输出文本的命令。"## Features"
: 要输出的文本内容。>>
: 重定向操作符,将输出的内容追加到文件末尾。README.md
: 要追加内容的文件名。
查看暂存区的更改:
git diff --cached
这将显示暂存区中即将提交的更改:
输出中的a文件代表版本,b文件代表新版本。
再次将文件添加到暂存区并提交:
git add README.md
git commit -m "Add project features to README"
git
: Git 命令行工具。add
: 添加命令,用于将文件添加到暂存区。README.md
: 要添加的文件名。commit
: 提交命令,用于将暂存区的内容提交到本地仓库。-m
: 消息选项,用于指定提交信息。"Add project features to README"
: 提交信息,描述本次提交的内容。
8. 查看提交历史与状态
查看项目的提交历史和当前工作区的状态:
# git log --oneline
git log
git status
git
: Git 命令行工具。log
: 日志命令,用于查看项目的提交历史。status
: 状态命令,用于查看当前工作区和暂存区的状态。oneline
: 表示每个提交只显示一行信息,通常包括提交的哈希值和提交信息的简短描述。- q 键:退出分页器,返回到命令行
9. 创建与切换分支
为了开发新功能,创建一个新分支 feature-branch
并切换到该分支:
git branch feature-branch
git checkout feature-branch
或者
git checkout -b feature-branch
git
: Git 命令行工具。checkout
: 切换命令,用于切换到指定的分支。branch
: 分支命令,用于创建和管理分支。-b
: 创建并切换到新分支的选项。feature-branch
: 新创建的分支名。
在新分支上继续工作,比如添加新的特性说明:
echo "## New Feature" >> README.md
echo "- Feature 3" >> README.md
echo
: 输出文本的命令。"## New Feature"
: 要输出的文本内容。>>
: 重定向操作符,将输出的内容追加到文件末尾。README.md
: 要追加内容的文件名。
再次将文件添加到暂存区并提交:
git add README.md
git commit -m "Add new feature description"
git
: Git 命令行工具。add
: 添加命令,用于将文件添加到暂存区。README.md
: 要添加的文件名。commit
: 提交命令,用于将暂存区的内容提交到本地仓库。-m
: 消息选项,用于指定提交信息。"Add new feature description"
: 提交信息,描述本次提交的内容。
10. 切换回主分支
完成新特性的开发后,切换回主分支(通常是 main
或 master
):
git checkout main
git
: Git 命令行工具。checkout
: 切换命令,用于切换到指定的分支。main
: 要切换到的分支名(如果是master
分支,可以将main
替换为master
)。
11. 合并与解决冲突
将 feature-branch
分支的更改合并到主分支。如果存在冲突,Git 会提示您解决它们:
git merge feature-branch
# git merge --no-ff feature-branch
git
: Git 命令行工具。merge
: 合并命令,用于将一个分支的更改合并到当前分支。--no-ff
: No Fast-Forward,表示在合并时不要使用快进(fast-forward)模式。- 可以保留分支的历史,明确显示合并点,有助于追踪代码的演变过程。
- 更容易地回滚到合并前的状态,因为有一个明确的合并提交。
feature-branch
: 要合并的分支名。
解决完任何可能的冲突后,再次提交更改以完成合并过程:
git add <conflicted-file>
git commit -m "Resolve conflicts after merging feature-branch"
<conflicted-file>
: 发生冲突的文件名。commit
: 提交命令,用于将暂存区的内容提交到本地仓库。-m
: 消息选项,用于指定提交信息。"Resolve conflicts after merging feature-branch"
: 提交信息,描述本次提交的内容。
12. 清理分支
合并完成后,可以安全地删除 feature-branch
分支:
git branch -d feature-branch
git
: Git 命令行工具。branch
: 分支命令,用于创建和管理分支。-d
: 删除分支的选项。feature-branch
: 要删除的分支名。
13. 丢弃更改
如果您想丢弃工作区中的更改,可以使用以下命令:
13.1 丢弃单个文件的更改
如果您想丢弃某个文件的更改,可以使用以下命令:
git checkout -- <file>
git
: Git 命令行工具。checkout
: 切换命令,用于切换到指定的分支或恢复文件。--
: 分隔符,用于区分命令和文件名。<file>
: 要恢复的文件名。
13.2 丢弃所有未提交的更改
如果您想丢弃所有未提交的更改,可以使用以下命令:
git reset --hard <commit-hash>
# git reset <file> # 撤销暂存区中的更改
git
: Git 命令行工具。reset
: 重置命令,用于将工作区和暂存区恢复到指定的状态。<commit-hash>
:指定需要丢弃的提交的哈希值,不指定则丢弃所有--soft
: 选项,表示软重置,仅移动 HEAD 指针,不影响工作目录和暂存区。--mixed
: (默认)选项,表示混合重置,移动 HEAD 指针,取消暂存更改,但保留工作目录中的更改。--hard
: 选项,表示强制重置,移动 HEAD 指针,取消暂存更改,并丢弃工作目录中的更改。- reset 并不是一个 commit,而是一个命令,用于改变当前分支的状态。使用 reset 时要谨慎,特别是在团队协作中,因为改变提交历史可能会给其他开发者带来问题。
示例
假设您修改了 README.md
文件,但决定不保留这些更改:
git checkout -- README.md
如果您想丢弃所有未提交的更改:
git reset --hard
14. 交互式补丁
对于复杂的更改,您可以使用交互式补丁来逐行选择要添加的内容。这种方式特别适合当您只想提交部分更改,而不是整个文件的所有更改时。
步骤 1: 修改文件
假设您已经修改了 README.md
文件,但只想提交其中的一部分更改。
步骤 2: 使用交互式补丁
运行以下命令启动交互式补丁模式:
git add -p
git
: Git 命令行工具。add
: 添加命令,用于将文件添加到暂存区。-p
: 选项,表示进入交互式补丁模式。
步骤 3: 选择要添加的更改
Git 会逐块显示文件的更改,并询问您是否要添加每个块。您可以选择以下选项:
- y - 是,将此块添加到暂存区。
- n - 否,跳过此块。
- q - 退出,不再处理剩余的块。
- a - 将所有剩余的块都添加到暂存区。
- d - 不将任何剩余的块添加到暂存区。
- e - 手动编辑当前块。
- ? - 显示帮助信息。
步骤 4: 提交更改
选择完要添加的块后,提交更改:
git commit -m "Add specific changes from README.md"
git
: Git 命令行工具。commit
: 提交命令,用于将暂存区的内容提交到本地仓库。-m
: 消息选项,用于指定提交信息。"Add specific changes from README.md"
: 提交信息,描述本次提交的内容。
15. 高级操作
15.1 合并提交
使用交互式变基来合并多个提交。这在您想将多个小的提交合并成一个大的提交时非常有用。
步骤 1: 开始交互式变基
假设您想合并最近的3个提交:
git rebase --interactive HEAD~3
git
: Git 命令行工具。rebase
: 变基命令,用于将一个分支的更改应用到另一个分支。--interactive
: 选项,表示进入交互式变基模式。HEAD~3
: 表示从当前提交向前数3个提交。
步骤 2: 编辑提交
Git 会打开一个文本编辑器,列出最近的3个提交。每个提交前面都有一个 pick
关键字,表示将保留该提交。您可以将 pick
更改为 squash
或 s
来合并提交。
例如,假设您的提交历史如下:
pick abc1234 First commit message
pick def5678 Second commit message
pick ghi9012 Third commit message
您可以修改为:
pick abc1234 First commit message
squash def5678 Second commit message
squash ghi9012 Third commit message
步骤 3: 编辑合并后的提交信息
保存并关闭编辑器后,Git 会再次打开编辑器,让您编写合并后的提交信息。您可以编辑或保留默认的提交信息。
步骤 4: 完成变基
保存并关闭编辑器后,变基过程完成,您的提交历史将更新。
15.2 重写提交信息
在交互式变基过程中,您还可以修改提交信息。
步骤 1: 开始交互式变基
假设您想修改最近的3个提交:
git rebase --interactive HEAD~3
git
: Git 命令行工具。rebase
: 变基命令,用于将一个分支的更改应用到另一个分支。--interactive
: 选项,表示进入交互式变基模式。HEAD~3
: 表示从当前提交向前数3个提交。
步骤 2: 编辑提交
Git 会打开一个文本编辑器,列出最近的3个提交。每个提交前面都有一个 pick
关键字,表示将保留该提交。您可以将 pick
更改为 reword
或 r
来修改提交信息。
例如,假设您的提交历史如下:
pick abc1234 First commit message
pick def5678 Second commit message
pick ghi9012 Third commit message
您可以修改为:
reword abc1234 First commit message
pick def5678 Second commit message
pick ghi9012 Third commit message
步骤 3: 编辑提交信息
保存并关闭编辑器后,Git 会再次打开编辑器,让您重新输入第一个提交的信息。您可以编辑或保留默认的提交信息。
步骤 4: 完成变基
保存并关闭编辑器后,变基过程完成,您的提交信息将更新。
15.3 删除提交
在交互式变基过程中,您还可以删除提交。
步骤 1: 开始交互式变基
假设您想删除最近的3个提交中的一个:
git rebase --interactive HEAD~3
git
: Git 命令行工具。rebase
: 变基命令,用于将一个分支的更改应用到另一个分支。--interactive
: 选项,表示进入交互式变基模式。HEAD~3
: 表示从当前提交向前数3个提交。
步骤 2: 编辑提交
Git 会打开一个文本编辑器,列出最近的3个提交。每个提交前面都有一个 pick
关键字,表示将保留该提交。您可以将 pick
更改为 drop
或 d
来删除提交。
例如,假设您的提交历史如下:
pick abc1234 First commit message
pick def5678 Second commit message
pick ghi9012 Third commit message
您可以修改为:
pick abc1234 First commit message
drop def5678 Second commit message
pick ghi9012 Third commit message
步骤 3: 完成变基
保存并关闭编辑器后,变基过程完成,指定的提交将被删除。
15.4 回退提交
如果您想撤销某个提交,可以使用 git revert
命令:
git revert <commit-hash>
git
: Git 命令行工具。revert
: 回退命令,用于撤销指定的提交。<commit-hash>
: 要撤销的提交的哈希值。- revert 会生成一个新的 commit,这个 commit 的内容正好与被撤销的 commit 相反。
- 当你想要撤销一个已经推送到远程仓库的提交,并且不希望改变提交历史时,可以使用 revert。
示例
假设您想撤销哈希值为 abc1234
的提交:
# 修改文件并提交
echo "This will be revert." >> README.md
git add
git commit -m "a test commit will be revert"
# 查看提交历史,记下要撤销的提交的哈希值。
git log --oneline
# 将last_commit_hash_value替换成实际的撤销的提交的哈希值
git revert last_commit_hash_value
# 实际上git revert也可以被git revert
15.5 保存工作区
如果您想暂时保存工作区中的更改,可以使用 git stash
命令:
步骤 1: 保存更改
保存当前工作区的更改:
# 修改文件
echo "This is a change." >> README.md
# 保存更改到 stash
git stash
git
: Git 命令行工具。stash
: 保存命令,将工作区和暂存区的更改保存到一个临时存储区:- git stash 命令将当前工作区和暂存区的所有更改保存到一个临时存储区(stash),并清空工作区和暂存区。
- 这样,您可以干净地切换到其他任务,然后再恢复这些更改。
步骤 2: 查看所有保存的更改
查看所有保存的更改:
git stash list
list
: 列表命令,用于查看所有保存的更改。- 每个保存的更改都会有一个唯一的标识符,例如 stash@{0}。
步骤 3: 恢复最近一次保存的更改
恢复最近一次保存的更改:
git stash pop
pop
: 恢复命令,将最近一次保存的更改从临时存储区(stash)移除并应用到工作区。
步骤 4 (可选): 恢复指定的 stash 更改,但不从 stash 存储区中移除
恢复指定的 stash 更改,但不从 stash 存储区中移除:
git stash apply stash@{0}
将 stash@{0} 的更改应用到工作区,但 stash@{0} 仍然保留在临时存储区(stash)中。
16. 工作流整合
16.1 拾取提交
如果您想将一个分支中的某个提交应用到另一个分支上,可以使用 git cherry-pick
命令:
git cherry-pick <commit-hash>
git
: Git 命令行工具。cherry-pick
: 拾取命令,用于将指定的提交应用到当前分支。<commit-hash>
: 要拾取的提交的哈希值。
示例
假设您想将哈希值为 <commit-hash-of-feature_n-commit>
的提交应用到当前分支:
# 查看提交历史,方便比较cherry-pick的效果
git log --oneline
# 创建并切换到新分支 feature_n
git checkout -b feature_n
# 在 feature_n 分支上进行提交
echo "Feature 1" >> README.md
git add README.md
git commit -m "Add feature N"
# 查看提交历史,并记下哈希值
git log --oneline
# 切换回主分支 main
git checkout main
# 拾取 feature1 分支上的提交
git cherry-pick <commit-hash-of-feature_n-commit>
# 其中 <commit-hash-of-feature_n-commit> 是 feature_n 分支上 Add feature N 提交的哈希值
# 查看提交历史
git log --oneline
16.2 变基
将当前分支的更改基于另一个分支的最新状态:
git rebase <base-branch>
git
: Git 命令行工具。rebase
: 变基命令,用于将一个分支的更改应用到另一个分支。<base-branch>
: 基础分支,通常是main
或master
。
示例
假设您想将当前分支的更改基于 main
分支的最新状态:
# 切换到分支 feature_n
git checkout feature_n
# 查看提交历史,方便比较rebase的效果
git log --oneline
# 将 `feature_n` 分支的更改基于 `main` 分支的最新状态
git rebase main
# 解决冲突(如果有)
git add <conflicted-file>
# 如果在变基过程中出现冲突,Git 会提示您解决冲突。解决冲突后,使用以下命令继续变基
git rebase --continue
# 查看提交历史
git log --oneline
17. 远程仓库操作
17.1 添加远程仓库
如果你有一个新的本地仓库,并且想要将其与远程仓库关联起来,可以使用 git remote add
命令。
git remote add <remote_name> <repository-url>
<remote_name>
: 远程仓库的名称,默认为origin
。<repository-url>
: 远程仓库的URL,可以是HTTPS或SSH格式。
示例:
假设你要将本地仓库与GitHub上的仓库关联起来,URL为 https://github.com/username/repo.git
。
git remote add origin https://github.com/username/repo.git
17.2 重命名远程仓库
如果你已经关联了一个远程仓库,并且想要重命名,可以使用 git remote rename
命令。
git remote rename <old_name> <new_name>
<old_name>
: 远程仓库的旧名称,默认为origin
。<new_name>
: 远程仓库的新名称。
示例:
假设你想要重命名一个远程仓库,旧名称为 origin
,新名称为 new_name_origin
。
git remote rename origin new_name_origin
17.3 设置远程仓库的URL
如果你需要更改远程仓库的URL,可以使用 git remote set-url
命令。
git remote set-url <remote_name> <new-url>
# git remote set-url --add <remote_name> <url>
# git remote set-url --push <remote_name> <push-url>
<remote_name>
: 远程仓库的名称,默认为origin
。<new-url>
: 新的远程仓库URL。--add
: 用于为现有的远程仓库添加一个额外的URL。--push
: 用于为现有的远程仓库设置一个专门用于推送的URL。- 这个命令不会影响 fetch 的URL,只会修改 push 的URL。
示例1:
假设你要将 origin
远程仓库的URL更改为 https://github.com/username/new-repo.git
。
git remote set-url origin https://github.com/username/new-repo.git
示例2:
假设你已经有一个名为 origin
的远程仓库,现在你想为它添加一个额外的URL https://github.com/username/repo.git
。
git remote set-url --add origin https://github.com/username/repo.git
示例3:
假设你已经有一个名为 origin
的远程仓库,现在你想为其设置一个专门用于推送的URL ssh://git@github.com/username/repo.git
。
git remote set-url --push origin ssh://git@github.com/username/repo.git
17.4 查看远程仓库信息
查看当前项目中配置的远程仓库信息,可以使用 git remote
命令。
git remote -v
-v
: 显示详细的远程仓库信息,包括URL。
示例:
git remote -v
输出可能如下:
origin https://github.com/username/repo.git (fetch)
origin ssh://git@github.com/username/repo.git (push)
origin
: 远程仓库的名称。https://github.com/username/repo.git
: 远程仓库的用于fetch
的URL。ssh://git@github.com/username/repo.git
: 远程仓库的用于push
的URL。(fetch)
: 表示这个URL用于从远程仓库获取数据。(push)
: 表示这个URL用于将本地数据推送到远程仓库。
17.5 获取所有分支
如果你需要从远程仓库获取所有分支,可以使用 git fetch
命令。
git fetch <remote_name>
<remote_name>
: 远程仓库的名称,默认为origin
。
示例:
假设你要从 origin
远程仓库获取所有分支。
git fetch origin
17.6 同步远程分支
如果你需要将本地分支与远程分支同步,可以先获取远程分支的最新更改,然后合并到本地分支。
git fetch <remote_name>
git merge <remote_name>/<branch>
<remote_name>
: 远程仓库的名称,默认为origin
。<branch>
: 远程分支的名称。
示例:
假设你要将 origin
远程仓库的 main
分支同步到本地 main
分支。
git fetch origin
git merge origin/main
17.7 拉取远程仓库的数据
从远程仓库拉取最新的更改并合并到当前分支,可以使用 git pull
命令。
git pull <remote_name> <branch>
<remote_name>
: 远程仓库的名称,默认为origin
。<branch>
: 远程分支的名称,通常与本地分支同名。
示例:
假设你要从 origin
远程仓库的 main
分支拉取最新的更改。
git pull origin main
17.8 推送本地仓库的数据到远程仓库
将本地仓库的更改推送到远程仓库,可以使用 git push
命令。
git push <remote_name> <branch>
git push <remote_name> --all
git push origin --tags
git push <remote_name> <branch> --set-upstream
<remote_name>
: 远程仓库的名称,默认为origin
。<branch>
: 本地分支的名称。--all
: 表示一次性推送所有本地分支到远程仓库。--tags
: 用于将所有本地标签推送到指定的远程仓库(默认为 origin)。但它并不会推送所有分支,只会推送标签。--set-upstream
: 表示设置本地分支与远程分支之间的上下游关系。
示例:
假设你要将本地 main
分支的更改推送到 origin
远程仓库的 main
分支。
git push origin main
17.9 为本地分支与远程分支设置上下游关系
如果你想要简化推送和拉取操作、自动跟踪远程分支,可以使用git branch
命令的--set-upstream
选项。
git branch --set-upstream-to=<remote_name>/<remote_branch> <local_branch>
git push <remote_name> <branch> --set-upstream
<remote_name>
: 远程仓库的名称,默认为origin
。<remote_branch>
: 远程分支的名称。<local_branch>
: 本地分支的名称。--set-upstream
: 表示设置本地分支与远程分支之间的上下游关系。
示例1:
假设你有一个本地分支 feature-x
,并且希望将其与远程仓库 origin
的 feature-x
分支建立上游关系,可以使用以下命令:
git branch --set-upstream-to=origin/feature-x feature-x
示例2:
假设你有一个远程仓库,并且本地仓库刚新建主分支(main
),已经完成远程仓库(origin
)的添加(add
),但是还没有进行过推送(push
),希望在本地仓库与远程仓库( origin
)之间的主分支(main
)建立上下游关系,可以使用以下命令:
git push origin main --set-upstream
为分支设置上下游关系的好处
-
简化推送和拉取操作
- 推送:
无需指定远程仓库和分支名称,Git 会自动将本地分支的更改推送到其对应的远程分支。git push
- 拉取:
同样,无需指定远程仓库和分支名称,Git 会自动从其对应的远程分支拉取最新的更改。git pull
- 推送:
-
自动跟踪远程分支
- 查看分支状态:
这条命令会显示本地分支与远程分支之间的差异,帮助你了解是否有新的提交需要推送或拉取。git status
- 查看分支跟踪信息:
这条命令会显示所有本地分支及其对应的远程分支信息。git branch -vv
- 查看分支状态:
-
更好的协作体验
- 在团队协作中,设置上游分支关系可以帮助团队成员更容易地同步和管理代码。每个人都可以轻松地推送和拉取更改,而不需要记住复杂的命令和参数。
-
自动处理合并冲突
- 当本地分支和远程分支之间存在冲突时,设置上游分支关系可以帮助 Git 自动处理这些冲突。在拉取远程分支的更改时,Git 会尝试合并更改,并在必要时提示你解决冲突。
-
保持分支的一致性
- 设置上游分支关系有助于保持本地分支和远程分支的一致性。这在长期的项目开发中尤为重要,可以避免分支之间的混乱和不一致。
17.10 删除远程仓库
如果你不再需要某个远程仓库,可以使用 git remote remove
命令删除它。
git remote remove <remote_name>
<remote_name>
: 远程仓库的名称,默认为origin
。
示例:
假设你要删除名为 origin
的远程仓库。
git remote remove origin
17.11 删除远程分支
如果你不再需要某个远程分支,可以使用 git push
命令删除它。
git push <remote_name> --delete <branch>
<remote_name>
: 远程仓库的名称,默认为origin
。<branch>
: 要删除的远程分支的名称。
示例:
假设你要删除 origin
远程仓库的 feature-x
分支。
git push origin --delete feature-x
18. 最终检查
最后,再次检查项目的提交历史和状态,确保一切符合预期:
git log
git status
git
: Git 命令行工具。log
: 日志命令,用于查看项目的提交历史。status
: 状态命令,用于查看当前工作区和暂存区的状态。- q 键:退出分页器,返回到命令行
希望这份详细的 Git 操作指南能帮助您高效地管理和协作您的代码项目。如果您有任何疑问或需要进一步的帮助,请随时查阅 Git 的官方文档或社区资源。
相关文章:
经验笔记:Git 基础操作指南
推荐一下Gitee最好的Git操作教程:Learn Git Branching 经验笔记:Git 基础操作指南 1. 安装 Git 首先确保您的计算机上已安装 Git。如果还没有安装,可以从 Git官网 下载并安装。 2. 配置 Git 安装完成后,打开命令行工具&#…...
大模型在智能客服中心领域的应用思考
大模型在智能客服中心领域的应用思考 作者:开源呼叫中心系统 FreeIPCC,Github地址:https://github.com/lihaiya/freeipcc 随着人工智能技术的飞速发展,特别是深度学习技术的突破,大型语言模型(LLMs&#x…...
ssm旅游推荐系统的设计与开发
摘 要 旅游推荐系统是一个综合性的在线旅游推荐平台,旨在为用户提供便捷的旅游规划和预定服务。通过该系统,用户能够浏览各类景点信息并进行分类查找,同时获取详尽的景点介绍和相关照片,以辅助做出旅行决策。系统提供在线门票订购…...
C++从零到满绩——入门基础and类和对象(上)
目录 1>>前言 2>>函数重载 3>>引用 3.1>>引用的概念 3.2>>引用三大特性 3.3>>引用的使用 3.4>>const引用 3.5>>指针与引用的关系 4>>inline内联函数 5>>nullptr 6>>类和对象(上&#…...
如何为PDF文件创建口令密码
介绍Adobe Acrobat https://helpx.adobe.com/cn/acrobat/using/access-acrobat-across-web-mobile-desktop.html 使用Adobe Acrobat软件添加口令...
【ubuntu】开机进入initramfs,无法开机
Step 1 blkid查看 ext4 的磁盘 Step 2 找到TYPE"EXT4"的盘,我们此处是 /dev/mapper/ubuntu–vg-ubuntu–lv,fsck命令是用于检查和修复Linux文件系统中的错误。通过使用-t参数指定文件系统类型(例如ext4)。我们使用如下命令进行…...
java基础---反射
仅供个人学习使用 1. 什么是反射 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为…...
CircuitBreaker机制详解:Elasticsearch中的资源管理
CircuitBreaker机制详解:Elasticsearch中的资源管理 在现代软件架构中,熔断器(CircuitBreaker)是一种重要的模式,用于防止系统过载并保护系统稳定性。在Elasticsearch中,熔断器机制尤其关键,因为它们帮助管理资源使用,防止节点因资源耗尽而崩溃。本文将深入探讨Elasti…...
毕氏完美数
毕达哥拉斯 概要 2 \sqrt{2} 2 a b , a < b , a > b ab,a<b,a>b ab,a<b,a>b 判断完美数验证 自守数验证 水仙花数代码验证 概要 回顾完美数,自守数,水仙花数,根号2感受最美公式。 2 \sqrt{2} 2 毕达哥拉斯创立了一…...
数据结构-8.Java. 七大排序算法(中篇)
本篇博客给大家带来的是排序的知识点, 由于时间有限, 分两天来写, 中篇主要实现后三种排序算法: 冒泡排序,快速排序,下一篇讲 归并排序. 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作…...
如何能让安全责任更清晰——构建清晰安全责任体系策略与实践
安全已成为各行各业不可忽视的重要议题。然而,要确保组织的安全运行,仅仅有安全意识是不够的,还需要有一套清晰明确的安全责任体系来支撑。这套体系能够明确每个人的安全职责,促进安全管理工作的有序进行,降低事故发生…...
VBA技术资料MF228:移动形状并覆盖某单元格区域
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...
《Python基础》之基本数据类型
目录 基本数据类型 1、Number(数字) (1)、整数(int) (2)、浮点数(float) (3)、复数(complex) (4)、 布尔…...
2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略(详细解题思路)
在当下, 日益发展的时代,宠物的数量应该均为稳步上升,在美国出现了下降的趋势, 中国 2019-2020 年也下降,这部分变化可能与疫情相关。需要对该部分进行必要的解释说明。 问题 1: 基于附件 1 中的数据及您的团队收集的…...
66 mysql 的 表自增长锁
前言 mysql 的表锁之 AUTO_INC, 是我们自增长的时候做并发控制的锁 主要是用于 自增长生成新的 id 的时候的控制 在前面的文档中, 我们又看到 mysql 这边自增长的处理的相关的大概脉络 但是 对于一些 并发控制的细节, 我们当时 应该是直接忽略掉了 我们这里就来看一下…...
java中的this关键字
🎉🎉🎉欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!🙏🙏🙏 文章目录…...
资源控制器--laravel进阶篇
laravel的控制器当中有个资源控制器,这个比较好用。 创建资源控制器 php artisan make:controller PhotoController --resource 创建个路由来使用该资源控制器 use App\Http\Controllers\PhotoController; Route::resource(photos, PhotoController::class); 隐式模型绑定不…...
智能工厂的设计软件 为了监管控一体化的全能Supervisor 的监督学习 之 序7 进化论及科学的信息技术创新:分布式账本/区块链/智能合约
Q&A Q46、 聊聊“分布式账本”“区块链”和“智能合约” “分布式账本”、“区块链”和“智能合约”是现代信息技术领域的几个重要概念,它们在金融、供应链管理、物联网等多个领域都发挥着重要作用。以下是对这三个概念的详细解析: 分布式账本 …...
从零开始认识显卡
显卡(GPU,全称为Graphics Processing Unit),是电脑中专门负责图形处理的硬件组件。以下是从零开始认识显卡的简单介绍: 1. 显卡的基本组成 显卡通常由以下几个主要部分组成: GPU核心:显卡的“…...
什么是计算机网络
什么是计算机网络? 计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传输介质分类按信号频带占用方式分类 计算机网络的功能信息交换资源共享分布式处理 计算机网络的组成计算机网络的定义计算机网络的分类按覆盖范围分类按拓扑结构分类按通信传…...
网络安全在线网站/靶场:全面探索与实践
目录 1. CyberPatriot 简介 功能与特点 适用人群 2. Hack The Box 简介 功能与特点 适用人群 3. OverTheWire 简介 功能与特点 适用人群 4. VulnHub 简介 功能与特点 适用人群 5. PortSwigger Web Security Academy 简介 功能与特点 适用人群 6. TryHackM…...
多旋翼无人机长航时远距离集群技术详解
多旋翼无人机长航时远距离集群技术是当前无人机技术发展的重要方向之一,它结合了多旋翼无人机的灵活性和集群技术的优势,实现了无人机在长时间、远距离条件下的高效协同作业。以下是对该技术的详细解析: 一、多旋翼无人机特点 多旋翼无人机以…...
C#编写的日志记录组件 - 开源研究系列文章
以前编写过一个日志记录组件的博文,这次发布一个修改过的完善版本。 1、 项目目录; 2、 源码介绍; 1) 实现; 2) 使用; 后面的参数为级别设置,只有大于这个级别的才进行日志记录,限制了日志记录的…...
使用 Java 操作 SQLite 数据库
文章目录 1.导入依赖2.实际应用 1.导入依赖 <dependencies><dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.36.0.3</version></dependency> </dependencies>2.实际应…...
再次讨论下孤注一掷
在孤注一掷中的黑客技术里面,简单介绍了电影孤注一掷中用的一些"黑科技",这里继续讨论下,抛弃这些黑科技,即使在绝对公平的情况下,你也一样赢不了赌场 相对论有一个假设就是光速不变,这里也有个…...
系统思考—跳出症状看全局
感谢合作伙伴的邀请,圆满结束国药试剂关于《系统思考》的课程。课堂上,我们围绕“缺货”这个看似具体的问题,展开了一场跨部门的深度探讨。销售、采购、物流等部门各抒己见,发现每个部门的出发点都是为了公司好,但误判…...
前端面试vue篇:Vue2 和 Vue3 在设计和性能上有显著区别
Vue3 相对于 Vue2 的主要改进和性能提升体现在以下几个关键领域 1.响应式系统: (1)Vue2 使用 Object.defineProperty 遍历对象的所有属性来实现响应式,这在大型应用中可能导致性能瓶颈,尤其是在组件初次渲染和大量数据变化时。 (2)Vue3 引入了…...
每天五分钟深度学习:神经网络模型的直观理解
本文重点 神经网络是深度学习的基础模型之一,本文将讲解一下基础模型神经网络是什么? 神经网络 如上所示,这个神经网络有两层(我们认为输入层不算神经网络的层数),其中一个隐藏层,还有一个是输出层。我们称隐藏层为第一层,输出层为第二层,输入层为第零层。 我们有输…...
高集成的MCU方案已成电机应用趋势?
【哔哥哔特导读】高集成化的芯片成为当下MCU领域研发和市场布局的重点,但是在实际应用中仍然面临散热等痛点问题,MCU厂商是如何解决和优化这些痛点? 随着全球工业自动化、智能制造和绿色发展的不断推进,中国电机行业正站在新一轮…...
商用密码产品认证名录说明
《商用密码产品认证目录》是为贯彻落实《中华人民共和国密码法》,进一步健全完善商用密码产品认证体系,更好满足商用密码产业发展需要,根据《国家密码管理局 市场监管总局关于调整商用密码产品管理方式的公告》《市场监管总局 国家密码管理局…...
无人机技术探索:电机、电调与桨叶的运行原理!
无人机电机的主要材料 铝合金:铝合金是当前应用最广泛的无人机电机材料之一,具有制造成本低廉、重量轻、支撑力强等特点,同时有一定的抗氧化性能。然而,铝合金电机的耐久性较差,若长期在高温高湿的环境下使用易产生氧…...
实现 UniApp 右上角按钮“扫一扫”功能实战教学
实现 UniApp 右上角按钮“扫一扫”功能实战教学 需求 点击右上角扫一扫按钮(onNavigationBarButtonTap监听),打开扫一扫页面(uni.scanCode) 扫描后,以网页的形式打开扫描内容(web-view组件),限制只能浏览带有执行域名的网站,例如…...
FP16的表示范围【详解计算步骤】
符号位:1bit 指数位:5bit 尾数位:10bit 指数位 指数位的值:00000 - 11111 00000和11111被给予特殊含义: 00000 表示 011111 表示Nan或无穷大所以,指数位的范围为00001-11110 如果指数位的值为00001,则实际指数=指数位的值-偏移=00001 - 15 = -14 如果指数位的值为1111…...
MySQL UPDATE语句执行链路解析
文章目录 引言1. 总览:UPDATE语句的执行链路2. 客户端发起请求2.1 SQL请求的形成2.2 MySQL通信协议 3. 连接器模块3.1 连接管3.2 会话上下文 4. SQL解析器4.1 语法解析4.2 语法错误处理 5. 查询优化器5.1 查询优化的核心概念5.2 优化器生成执行计划的步骤5.3 优化器…...
大语言模型通用能力排行榜(2024年11月8日更新)
数据来源SuperCLUE 榜单数据为通用能力排行榜 排名 模型名称 机构 总分 理科 文科 Hard 使用方式 发布日期 - o1-preview OpenAI 75.85 86.07 76.6 64.89 API 2024年11月8日 - Claude 3.5 Sonnet(20241022) Anthropic 70.88 82.4…...
java远程服务器调试
1远程debug -agentlib:jdwptransportdt_socket,servery,suspendn,address服务器ip:port 2.jmx JAVA_OPT“${JAVA_OPT} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.portport -Dcom.sun.management.jmxremote.local.onlyfalse -Dcom.sun.management.jmxr…...
如何使用 Vivado 从源码构建 Infinite-ISP FPGA 项目
如约介绍源码构建 Infinite-ISP 项目,其实大家等的是源码,所以中间过程简洁略过,可以直接翻到文末获取链接。 开源ISP(Infinite-ISP)介绍 构建工程 第一步,从文末或者下面链接获取源码 https://github.com/…...
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS系统定制开发
8、RTOS系统定制开发 此处以在rtos/components/aw目录下创建一个简单的软件包为例,帮助客户了解RTOS环境,为RTOS系统定制开发提供基础。 RTOS环境下的软件包主要由三部分组成,源文件,Makefile,Kconfig,如下…...
A045-基于spring boot的个人博客系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...
SpringBoot集成ES(ElasticSearch)
1.导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>导入依赖后,注意在依赖中查看对应的版本是否与本机ES对应 2.创建配置并…...
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
文章目录 应用快速部署NginxRedisMySQLTomcat 制作镜像镜像原理基于已有容器创建使用 Dockerfile 创建镜像指令说明构建应用创建 Dockerfile 文件创建镜像 应用快速部署 Nginx docker run -d -p 80:80 nginx使用浏览器访问虚拟机地址 Redis docker pull redis docker run --…...
实验四:构建园区网(OSPF 动态路由)
目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、在 eNSP 中部署网络 2、设计全网 IP 地址 3、配置二层交换机 4、配置路由交换机并测试通信 5、配置路由接口地址 6、配置 OSPF 动态路由,实现全网互通 一、实验简介 使用路由…...
【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-31
文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么ÿ…...
debian 如何进入root
debian root默认密码, 在Debian系统中,安装完成后,默认情况下root账户是没有密码的。 你可以通过以下步骤来设置或更改root密码: 1.打开终端。 2.输入 sudo passwd root 命令。 3.当提示输入新的root密码时,输入你想要的密码…...
极坐标气泡图:医学数据分析的可视化新视角
在医学研究中,数据的可视化是至关重要的。它不仅能帮助我们更直观地理解数据,还能揭示数据中隐藏的模式和趋势。今天,我们要介绍一种独特的数据可视化工具——极坐标气泡图,以及它在医学中的重要作用。 什么是极坐标气泡图&#…...
【随手笔记】电脑端上位机初涉(一)
实现电脑端上位机的方式及其学习难度和知识点 在嵌入式开发中,电脑端上位机程序用于与嵌入式设备进行通信和控制。以下是几种常见的实现方式,以及它们的学习难度和所需的知识点: Python PySerial 学习难度:低知识点:…...
对抗样本存在的原因
对抗样本存在的原因与深度学习模型的结构和训练机制密切相关,主要包括以下几个方面: 1. 模型的高维性和线性化行为 高维性:深度学习模型通常在高维空间中运行,而高维空间中的数据分布非常稀疏。微小的扰动在高维空间可能被放大&a…...
Python编程整理汇总(基础汇总版)
1. 基础语法 1.1 变量与数据类型 整数:a 10 浮点数:b 3.14 字符串:c "Hello, World!" 布尔值:d True 列表:e [1, 2, 3, 4, 5] 元组:f (1, 2, 3) 字典:g {"name&qu…...
24软专 数据结构
1、A[n],k,将数组向右循环移动k位。要求时间复杂度O(n),空间O(1)。 思路:采用三次反转数组的操作,可以实现时间复杂度为O(n),空间复杂度为O(1)的算法。 void moveElem(int array[],int k,int length){//a…...
如何更改手机GPS定位
你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容?接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置!无论是在玩Pokmon GO游戏、发布社媒贴子,这种方法都快速、简单且有效。 第一步:下…...