云主机如何做两个网站,建设工程施工合同司法解释2022,盘锦威旺做网站建设公司,室内设计公司排名昆明文章目录 一、Git相关概念二、本地分支中文件的添加 、提交2.1 文件状态2.2 创建Git仓库2.2.1 git init2.2.2 git clone 2.3 添加操作(git add)2.4 提交操作#xff08;git commit#xff09;2.5 撤销操作2.5.1 撤销 add操作2.5.2 撤销 commit操作2.5.3 覆盖上一次的commit操… 文章目录 一、Git相关概念二、本地分支中文件的添加 、提交2.1 文件状态2.2 创建Git仓库2.2.1 git init2.2.2 git clone 2.3 添加操作(git add)2.4 提交操作git commit2.5 撤销操作2.5.1 撤销 add操作2.5.2 撤销 commit操作2.5.3 覆盖上一次的commit操作 2.6 远程仓库操作2.7 查看提交历史2.8 查看文件状态2.8.1 git status2.8.2 git diff 三、Git分支管理3.1 git分支的分类3.2 查看分支信息3.3 新建分支3.3.1 新建本地分支3.3.2 新建远程分支 3.4 删除分支3.4.1 删除本地分支3.4.2 删除远程分支3.4.3 删除远程追踪分支 3.5 分支重命名3.5.1 本地分支重命名3.5.2 远程分支重命名 3.6 关联本地分支与远程追踪分支3.7 切换分支(git checkout)3.8 拉取更新git fetch3.9 合并分支(git merge)3.9.1 git merge讲解3.9.2 撤销合并 3.10 变基操作git rebase基本用法进阶用法 3.11 拉取操作git pull3.12 推送操作git push3.13 合并冲突的解决 四、标签操作(git tag)4.1 创建标签4.2 查看标签4.3 删除标签4.4 推送标签到远程仓库4.5 检出标签创建分支 五、暂存操作git stash六、本地仓库的更新以及冲突解决6.1 直接克隆项目远程仓库6.2 Fork项目远程仓库 一、Git相关概念 git 在线演示网站git 在线演示 讲解Git工作流程之前先讲下Git仓库相关概念 工作区(Workspace)自己存放代码的文件夹除.git外暂存区(Index).git文件夹下的index文件本地仓库(Local Repository).git文件夹远程仓库(Remote Repository)在远程服务器上的Git仓库存放代码
二、本地分支中文件的添加 、提交
2.1 文件状态
未跟踪Untracked这是文件的初始状态表示该文件尚未被Git跟踪。当你在项目目录中创建一个新文件时它将处于未跟踪状态。已修改Modified表示已经跟踪的文件发生了更改但这些更改还没有被提交到本地仓库。已暂存Staged表示已跟踪文件中的更改已经添加到Git的暂存区Stage/Index但是没提交到本地仓库。已提交Committed表示文件的更改已经被提交到了本地仓库中。
2.2 创建Git仓库
有两种取得 Git 项目仓库的方法
在现有项目或目录下导入所有文件到 Git 中从一个服务器克隆一个现有的 Git 仓库。
2.2.1 git init
初始化指定目录作为Git本地仓库
git init [dir_name] 1. 假如只执行 git init 那么就是初始化当前目录作为Git仓库
2. 假如 dir_name 不存在会当前目录中创建一个 dir_name 文件夹文件夹中含有一个 .git文件夹
3. dir_name存在dir_name文件夹会多出一个 .git文件夹连接Git远程仓库
git remote add [shortname] [url] 1. shortname: 远程仓库别名2. url: 远程仓库地址
git remote [-v] //显示所有远程仓库的名称-v 还可以查看到远程仓库的地址以及每个远程仓库的读取(fetch)和写入(push)权限# 移除远程仓库与本地仓库的关系
git remote rm [shortname]2.2.2 git clone
当你执行 git clone remote 命令时Git 会克隆整个远程仓库到本地包括了远程仓库中的所有分支、标签以及所有提交的历史记录本地会生成本地主分支和远程追踪分支。 本地仓库的远程追踪分支在后面的《git分支的分类》小节中有解释 git clone [option] repository_url [directory] repository_url : 远程仓库的地址。 directory : 存放远程仓库代码的目录假如该目录不存在会在当前目录下创建同名子目录 [option] 可用选项。以下是一些常用的 git clone 选项 --depth depth指定克隆的深度即历史提交记录的数量。使用深度克隆可以减少克隆所需的时间和下载的数据量。--depth 1代表只克隆最近一次的提交内容。 -b branch 或 --branch branch本地仓库生成branch分支远程追踪分支跟踪远程仓库的所有分支。如果不指定分支本地生成主分支远程追踪分支跟踪远程仓库的所有分支。 --single-branch 或 --no-single-branch本地仓库生成一个主分支远程追踪分支只跟踪远程仓库的主分支。可以结合 -b branch选项来指定克隆的分支本地仓库生成一个branch分支远程追踪分支跟踪远程仓库的branch分支。 上面这些图中的红色字体就是远程追踪分支。 --shallow-since date指定自特定日期以来的历史提交记录数量进行浅层克隆。 --jobs n指定克隆过程中使用的并发作业数量加快克隆速度。 --origin name设置克隆存储库的远程名称。默认情况下使用 “origin” 作为远程名称。
2.3 添加操作(git add)
git add [file1] [file2] ... 添加指定文件到暂存区[file]是文件的路径根目录是工作目录。 git add [dir] 添加指定目录到暂存区包括子文件夹 git add . 将当前目录中的所有改动的文件添加到暂存区
2.4 提交操作git commit
要将暂存区中的文件提交到本地仓库你可以使用 git commit 命令。这个命令会创建一个新的提交并将暂存区中的文件作为该提交的内容。 git commit -m commit message -m 选项用于指定提交的消息commit message后面跟着双引号括起来的消息内容。 git commit [file1] [file2]...-m commit message 提交指定文件 git commit -v 提交时显示所有的diff信息 git commit -amend -m commit message 将此次的提交替代最近一次的提交。此次提交会完成两个动作①提交暂存区中的更改②指定提交信息。 如果在替代上一次提交的基础上提交新的更改那么执行如下步骤 git add new_filegit commit --amend -m New commit message git commit -am commit message -a选项自动将所有未跟踪的文件添加到暂存区省去了git add步骤-m选项指定提交的信息commit message,后面跟着双引号括起来的消息内容 在提交之前确保你已经通过 git add 命令将要提交的文件添加到暂存区中。如果还有未添加到暂存区的修改或新增文件可以使用 git add 命令将它们添加到暂存区然后再执行 git commit 进行提交。 2.5 撤销操作
2.5.1 撤销 add操作
有以下几种方式可以撤销git add操作但更改仍保留在工作区的修改
git rm --cache [file]git reset HEAD [file]这个命令将指定的文件从暂存区中移除但保留在工作区的修改。它实际上是将文件的状态重置为上一次提交时的状态相当于取消对文件的暂存。git restore --staged [file]这个命令将指定的文件从暂存区中移除并恢复到工作区中最近一次提交的版本保留工作区的修改。git rm --cached [file]这个命令与 git rm --cache [file] 是等效的用于从暂存区中移除文件而保留工作区的修改。 执行git add 命令时不小心将某个不添加到暂存区中的文件提交到了暂存区如何解决呢 git rm --cached file 、git reset file 将指定文件从暂存区中删除不会影响工作区中的文件。 2.5.2 撤销 commit操作
撤销操作需要用到 命令git reset 。 git reset --soft commit只影响本地仓库的当前分支 用于将当前分支的 HEAD 指针回退到指定的 commit。git reset --soft HEAD^ 让当前分支的HEAD指针回退到上一次提价的位置 git reset [--mixed] commit撤销add 、commit操作但是不覆盖工作区中的改动 将当前分支的 HEAD 指针移动到指定的 commit同时重置暂存区将之后的修改放入工作目录中。 git reset --hard commit撤销add 、commit操作同时覆盖工作区中的改动 将当前分支的 HEAD 指针移动到指定的 commit同时重置暂存区和工作目录和commit保持一致 git checkout --file撤销对file文件的修改丢弃当前未暂存或者已暂存的该文件的更改。 commit是一个表示提交的标识符可以是commit的哈希值、分支名或者其他引用。 哈希值通过git log 命令查看提交历史并找到你想要回滚的commit哈希值。分支名git reset --soft main 来将当前分支重置到 main 分支所指向的 commit。这样做将会将当前分支的 HEAD 移动到 main 分支所在的位置。 HEAD 表示 你当前所在的工作目录中正在工作的分支的最新提交。还指向分支名的引用。当你切换分支时HEAD 会跟随并指向新的分支名从而指示你正在工作的是哪个分支。例如当你处于 main 分支上时HEAD 指向 main 分支最新的提交。HEAD^表示HEAD所指向的提交的上一次提交HEAD^^ 表示HEAD^所指向的提交的上一次提交HEAD~1等价与HEAD^HEAD~2 等价与HEAD^^。 2.5.3 覆盖上一次的commit操作
# 使用一次新的commit来替代上一次提交如果代码没有变化则改写提交信息
git commit -amend -m commit message 2.6 远程仓库操作
git remote -v 显示所有远程仓库的信息 git remote show [remote] 显示某个远程仓库的信息 git remote add [shortname] [url] 添加一个远程仓库并命名 git remote rm [shortname] 删除远程仓库 git remote rename old_name new_name 对远程仓库重命名 git remote set-url [shortname] url 修改已经存在的远程仓库的 URLshortname: 远程仓库在本地的名称url: 远程仓库的url
2.7 查看提交历史
git log 用于查看当前分支的提交历史记录。通过执行 git log 命令你可以看到每个提交的详细信息例如提交作者、提交日期、提交消息和提交哈希值等。
git log 命令会按时间顺序列出提交历史最新的提交会显示在最上面。你可以通过按 Enter 键向下滚动查看更多提交历史如果想退出查看历史可以按 Q 键。 2.8 查看文件状态
2.8.1 git status
git status 是 Git 中一个极其重要的命令它用于展示当前工作目录和暂存区Index的文件状态以及与仓库中最新提交版本的差异。当你执行 git status 时Git会输出以下关键信息 当前分支 显示你所在的工作分支名称。 与远程分支的关系 如果本地分支与远程分支关联并且已经获取了远程分支的最新更新git status 可能会显示当前分支是否与远程分支同步或落后/超前多少个提交。 未暂存的修改Changes not staged for commit 列出所有已修改但尚未添加到暂存区通过 git add 命令的文件。这些改动在下次提交之前不会被包含进去。 新增的未追踪文件Untracked files 显示那些新创建的、尚未被 Git 版本控制跟踪的文件。若要将它们纳入版本控制首先需要使用 git add 将它们加入暂存区。 已暂存的更改Changes to be committed 如果有文件已被 git add 添加到了暂存区则会显示这部分即将被提交的更改。
一个典型的 git status 输出可能如下所示
On branch develop
Your branch is up to date with origin/develop.Changes not staged for commit:(use git add file... to update what will be committed)(use git restore file... to discard changes in working directory)modified: src/app.jsUntracked files:(use git add file... to include in what will be committed)new_file.txtno changes added to commit (use git add and/or git commit -m ... to commit your changes)git status -s 或 git status --short 是 Git 中 status 命令的简洁输出模式。它以更紧凑的形式展示当前工作目录和暂存区的状态便于快速查看。
在 -s 短格式输出中Git 会按照以下规则显示文件状态
?? 未跟踪的新文件即新创建的文件但没有执行git add命令。 M 表示文件已修改但是这些改动还没有被添加到暂存区。 MM 表示文件已修改暂存后又作了修改因此该文件的修改中既有已暂存的部分也有未暂存的部分。 A 表示该文件是新添加到暂存区Index的文件即通过 git add 命令将一个新创建或从未被 Git 跟踪过的文件放入了暂存区。这个文件将在下一次提交时成为仓库的一部分。
2.8.2 git diff
git diff 是 Git 中的一个核心命令用于比较文件或目录的不同版本之间的差异。这个命令在开发过程中极其有用可以帮助你查看尚未提交的更改、暂存区与工作目录之间、两个分支之间的内容区别等。
以下是 git diff 的几个典型用法及详细解释 查看未暂存的改动 git diff此命令显示当前工作目录中已修改但还未添加到暂存区Index的文件内容差异。每一行显示了具体的增删改行并以特殊字符标识出增加 ()、删除 (-) 或移动的内容。 查看暂存区与上次提交的差异 git diff --cached [file]或者 git diff --staged [file]这将展示已暂存但未提交的改动。如果不指定文件名则会显示所有已暂存文件的差异。 比较工作目录和任意提交之间的差异 git diff HEAD [file]或者对比两个commit之间的差异 git diff commit1..commit2这里 commit1 和 commit2 可以是任何提交哈希值、分支名或标签。此命令会展示从 commit1 到 commit2 之间的所有文件差异。 比较两个文件或目录 git diff file1 file2或者 git diff directory1 directory2当比较的是两个具体路径时Git会逐个文件进行比较并显示它们之间的差异。 格式化输出差异 git diff --word-diff或者使用其他格式选项来增强可读性如高亮差异单词而非整行、创建统一或彩色输出等。 输出为补丁文件 git diff changes.patch将差异信息输出到一个名为 changes.patch 的文件中这样可以方便地保存、发送或应用这些更改。 合并请求或拉取请求中的diff预览 在GitHub或其他Git托管平台中你可以直接查看pull request或者merge request中的git diff 输出它展示了即将合并进目标分支的所有更改。
三、Git分支管理
3.1 git分支的分类
git分支分为本地分支、远程追踪分支和远程分支之分。
本地分支、远程追踪分支和远程分支是 Git 中三种不同类型的分支它们在用途和作用上有一些区别
本地分支Local Branch 本地分支是在本地仓库中创建的分支用于在开发过程中进行不同功能或版本的并行开发。你可以在本地分支上进行代码的修改、提交、合并等操作是开发过程中实际工作的分支。本地分支的命名通常不包含远程仓库的名称前缀直接使用分支名即可。 远程追踪分支Remote Tracking Branch “远程追踪分支”Remote Tracking Branch是指与远程仓库中的分支相关联的本地分支用于跟踪远程仓库的分支状态。当你与远程仓库建立关联例如通过 git clone 克隆远程仓库时本地仓库会自动创建对应的远程追踪分支。远程追踪分支的命名通常为 remote-name/branch-name其中 remote-name 是远程仓库的名称branch-name 是远程仓库中的分支名。它是对远程仓库分支的镜像记录了远程仓库分最新状态而不需要直接访问远程仓库。远程追踪分支还指示了远程仓库的位置和分支信息方便你在多个远程仓库之间进行切换和操作。远程追踪分支的命名通常为 remote-name/branch-name其中 remote-name 是远程仓库的名称branch-name 是远程仓库中的分支名。git fetch 或 git pull 命令将远程仓库的更新下载到本地并更新对应的远程追踪分支。这样你可以在本地查看远程仓库的最新状态决定是否需要进行合并或推送操作。但它不能直接在本地进行修改和提交只能通过同步远程仓库来更新。远程追踪分支与本地分支之间可以进行合并操作。当你在本地分支上执行 git merge 或 git pull 命令并指定远程追踪分支作为合并来源Git 将会将远程分支的更改合并到当前本地分支上。这样可以将远程仓库的更新合并到你正在工作的本地分支中。 远程分支Remote Branch 远程分支是存储在远程仓库中的分支通常是由其他开发者推送到远程仓库的。远程分支对于本地仓库而言是不可编辑的你无法在本地直接修改或提交远程分支。远程分支的命名同样使用 remote-name/branch-name 的形式其中 remote-name 是远程仓库的名称branch-name 是远程仓库中的分支名。当你克隆远程仓库或者进行远程仓库更新时会自动为本地仓库创建相应的远程追踪分支用于跟踪远程分支的状态。
区别总结
本地分支是在本地仓库中创建的用于开发的分支可以在本地进行修改和提交操作。远程追踪分支是本地仓库中的引用用于跟踪远程仓库分支状态只能通过 git fetch 或 git pull 同步远程仓库。远程分支是存储在远程仓库中的分支不能在本地直接编辑和提交只能通过远程仓库的更新来同步。本地仓库会自动为远程分支创建对应的远程追踪分支。remote/branch既可以表示远程仓库中的远程分支也可以表示本地的远程追踪分支
3.2 查看分支信息
git branch 查看本地仓库中的分支 git branch -r 查看所有远程仓库中的所有分支 git branch -a 查看所有分支信息包括本地分支和远程追踪分支 git branch -vv 查看本地分支和远程分支的关联情况 以上所有命令显示的结果中* 会标注在当前分支的前面。 git branch -a 显示的远程追踪分支会用红色字体标注。 git branch -vv显示的内容中最后一列是最近一次提交commit的注释。 3.3 新建分支
3.3.1 新建本地分支
git branch new_local_branch 新建本地分支但不会切换到新建分支下依然处于当前分支git checkout -b new_local_branch 、git switch -c new_local_branch 新建本地分支但是并切换到新建分支下 git checkout -b new_local_branch remote/remote_branch 新建本地分支并切换到新建分支下同时和远程分支建立联系如果本地仓库关联了一个远程仓库那么可以省略remote即git checkout -b new_local_branch remote_branch git branch 显示的当前分支为master那么git branch test命令新建的分支test是基于master分支新建的并且该分支仅存在本地中。 3.3.2 新建远程分支
新建远程分支的本质是新建本地分支然后将本地分支推送到远程仓库。远程仓库中没有与本地仓库新建的分支同名的分支那么git会新建一个同名的远程分支。
git push -u remote remote-branch:local-branch- remote-branch: 远程仓库的分支, 假如远程分支不存在, 会创建一个远程分支git push -u remote local_branch- remote: 远程仓库;- local_branch: 本地分支假如远程仓库没有local_branch, 那么会在远程仓库中创建一个远程分支。3.4 删除分支
3.4.1 删除本地分支
git branch -d local_branch
git branch -D local_branch假如你当前处于dev分支那么执行git branch -d dev会失败。-d表示安全删除已完成合并的分支-D表示强制删除未完成合并的分支包括还有未提交更改的分支。这里的合并是本地分支的合并 3.4.2 删除远程分支
git push origin --delete feature-branchorigin: 远程仓库名feature-branch: 要删除的远程分支该操作无法撤销
3.4.3 删除远程追踪分支
# 删除本地的远程追踪分支remote tracking branch不是删除远程仓库中的远程分支
git branch -d -r remote/remote-branch-d: 删除分支-r: 本地仓库中的远程追踪分支- remote/remote-branch: 此处表示的是远程追踪分支3.5 分支重命名
3.5.1 本地分支重命名
在Git中修改分支名可以通过以下步骤完成
假设你要将分支名从old-branch修改为new-branch 确保你当前不在要修改的分支上在执行修改分支名之前先确保你当前不在 old-branch 分支上。可以切换到其他分支例如主分支 master。 git checkout master重命名分支使用 git branch -m 命令来修改分支名。 git branch -m old-branch new-branch这将把名为 old-branch 的分支重命名为 new-branch。 推送新的分支名到远程仓库如果需要如果你之前已经将 old-branch 推送到远程仓库现在需要推送新的分支名 new-branch。 git push origin new-branch这将把修改后的 new-branch 分支推送到名为 origin 的远程仓库。 删除旧分支可选如果你希望删除旧的分支名 old-branch可以使用以下命令 git branch -d old-branch注意使用 -d 参数是安全的删除方式它会检查分支是否已经合并如果没有合并将会拒绝删除。如果想要强制删除未合并的分支可以使用 -D 参数 git branch -D old-branch请注意在修改分支名后如果其他开发人员已经在远程仓库中拉取旧分支名的分支他们需要更新本地仓库的分支名称。最好提前与团队进行沟通以避免潜在的混淆和问题。
3.5.2 远程分支重命名
在 Git 中修改远程分支名需要完成以下几个步骤 确保本地仓库和远程仓库相关联在执行下面的步骤之前首先你需要将本地仓库与远程仓库关联起来。通常你会在克隆git clone远程仓库到本地时自动完成这个步骤。如果没有关联可以使用 git remote add 命令添加远程仓库的地址。 修改本地分支名为new-branch在本地仓库中使用以下命令将远程分支 old-branch 修改为 new-branch git branch -m old-branch new-branch删除远程仓库的远程分支old-branch git push --delete remote old-branch- remote : 远程仓库- old-branch: 远程仓库中的远程分支将修改后的本地分支推送到远程仓库 git push remote new-branch- remote:远程仓库- nnew-branch: 远程分支这将把本地仓库中的 new-branch 分支推送到远程仓库。
注意事项
在修改远程分支名前请确保你与团队中的其他成员进行充分沟通以避免潜在的冲突和问题。如果其他开发人员已经在远程仓库中拉取旧分支名的分支他们需要更新本地仓库的分支名称。可以提醒他们执行 git fetch --all 更新远程分支列表。
请谨慎进行远程分支的重命名操作确保你已经充分了解操作的影响并在必要时备份重要的分支或提交。
3.6 关联本地分支与远程追踪分支
# 显示本地仓库中的所有分支与远程追踪分支的关联关系
git branch -vv # 将本地分支local-branch和远程仓库remote的远程分支remote-branch建立联系, 当本地仓库只连接了一个远程仓库的时候可省略 remote/
git branch --set-upstream-toremote/remote-branch local-branch
git branch --set-upstream-toremote-branch local-branch
git branch -u remote/remote-branch local-branch (较新版本的git中才能使用)# 创建并切换到本地分支 new-local-branch , 关联远程仓库remote中的远程分支remote-branch
git checkout -b new-local-branch remote/remote-branch# 将本地分支branch的更新推送到远程仓库的远程分支branch的同时建立关联
git push -u remote branch# 取消本地分支local-branch与远程仓库中的远程分支local-branch的联系若取消当前分支与远程分支的关联可省略分支名。
git branch --unset-upstream local-branch
git branch --unset-upstream 上述命令中的remote/remote-branch表示的是远程仓库的远程分支。 3.7 切换分支(git checkout)
git checkout branch切换到另一分支 切换分支前必须确保分支存在新版本git使用命令git switch branch
git checkout -b new_branch新建分支并切换到该分支
3.8 拉取更新git fetch
git fetch 用于从远程仓库获取更新并将它们同步到本地仓库的远程追踪分支但不会自动合并到当前工作分支。
git fetch remote将远程仓库的所有分支的更新同步到相应的远程追踪分支。git fetch remote branch将远程仓库remote中指定分支branch的更新同步到相应的远程追踪分支。git fetch remote remote-branch:local-branch将远程仓库remote 中指定分支branch的更新同步到本地分支local-branch同步到工作区。
git fetch命令的常用选项有那些 --all将所有远程仓库的所有分支的更新同步到相应的远程追踪分支。 --tags获取远程仓库的标签tags更新。 --verbose在获取更新时显示详细的进度信息。 在本地仓库的main分支下能否执行该命令git fetch origin dev:main? 该命令的作用是从远程仓库 (origin) 获取 dev 分支的内容并将其拉取到本地的 main 分支。这可能会导致 main 分支的历史线与远程的 dev 分支不同步。要想达到此效果应该执行git fetch origin main然后执行git merge dev。 3.9 合并分支(git merge)
3.9.1 git merge讲解
git merge 命令用于将一个分支的更改合并到另一个分支。它是将不同分支上的工作合并到一起的主要机制之一。通常你会在切换到目标分支后使用 git merge 命令将其他分支的更改合并到当前分支。 git merge branch 将分支合并到当前分支branch既可以是本地分支也可以是远程追踪分支。 # 切换到本地分支main
git checkout main
# 将dev分支合并到main分支
git merge devgit merge --no-ff 强制合并 git merge --abort取消合并 git merge --continue解决冲突后的继续合并操作。当你在执行 git merge 进行分支合并时如果合并过程中出现冲突Git 会暂停合并并通知你发生了冲突。你需要手动解决冲突然后使用 git add conflicted_file 标记冲突已解决。接着你可以使用 git merge --continue 来继续合并操作。 有两种常见的合并类型 合并分支将一个分支的更改合并到另一个分支上以保持两个分支的修改一致。在执行 git merge 命令时会生成一个新的合并提交包含了合并的内容。例如 # 切换到目标分支
git checkout target-branch# 合并源分支的更改到目标分支
git merge source-branch合并提交将一个或多个特定的提交应用到当前分支上而不是合并整个分支的历史。这通常使用 git cherry-pick 命令来完成。例如 # 切换到目标分支
git checkout target-branch# 合并单个commit到目标分支
git cherry-pick commit-hash3.9.2 撤销合并
撤销分支的合并在当前分支下使用 git reset 进行撤销
git reset --soft commit git reset --hard commit
3.10 变基操作git rebase
git rebase 是 Git 中一个非常有用的命令它用于将一个分支的提交移动到另一个分支的基础上重新应用。通过重新应用提交你可以创建一个线性的提交历史使得项目的历史更加整洁和可读。下面是 git rebase 的详细讲解
基本用法 在当前分支上执行 rebase git checkout target_branch
git rebase base_branch这个命令会将 target_branch 上的提交逐个应用到 base_branch 上从而在 base_branch 的最新提交之后创建一系列新的提交。 处理冲突 如果在 rebase 过程中遇到冲突Git 会暂停 rebase 进程并让你解决冲突。解决完冲突后使用 git rebase --continue 继续 rebase 进程或者使用 git rebase --abort 中止 rebase 进程。 终止 rebase git rebase --abort如果在 rebase 过程中遇到了问题或者需要放弃 rebase可以使用此命令终止 rebase 进程并且回到 rebase 之前的状态。 继续 rebase git rebase --continue解决完冲突后使用此命令继续进行 rebase 进程。
进阶用法 交互式 rebase git rebase -i base_branch使用交互式 rebase 可以对提交进行重新排序、合并、编辑提交消息等操作从而可以更加灵活地管理提交历史。 指定基准提交 git rebase --onto new_base old_base branch这个命令允许你在指定的 old_base 和 new_base 之间重新定义 branch 的基础提交从而可以将提交移动到一个新的基础上。 跳过提交 git rebase --skip如果在 rebase 过程中某个提交已经不再需要则可以使用此命令跳过该提交。 修改 rebase 的默认行为 你可以通过配置 Git 来修改 rebase 的默认行为比如使用 git config --global pull.rebase true 来设置在 git pull 时默认使用 rebase。
git rebase 是一个非常强大的命令可以帮助你整理提交历史、解决冲突并创建一个更加整洁的项目历史。但需要注意的是在公共分支上进行 rebase 可能会改写提交历史因此需要谨慎使用以免影响到其他团队成员。
3.11 拉取操作git pull
git pull 命令用于从远程仓库拉取最新的提交和分支信息并将远程分支的更新合并到当前所在的本地分支。它实际上是 git fetch 和 git merge 两个命令的组合用于快速将远程仓库的更新同步到本地分支。 在执行 git pull 之前确保你的工作目录是干净的没有未提交的更改以避免潜在的冲突。如果你在拉取过程中遇到冲突需要手动解决冲突标记为已解决然后继续合并过程。解决冲突的步骤在后面小节会详细讲解。 git pull remote remote_branch remote_name: 远程仓库的名称通常是 “origin”。branch_name: 要拉取的远程分支的名称。将远程仓库中的remote_branch分支合并到当前本地分支。 git pull --all 拉取所有分支的更改 git pull remote tag 拉取某个特定标签所指向的提交 git pull --force remote branch 覆盖本地未提交commit的更改并强制拉取最新的远程更改。
3.12 推送操作git push
git push 命令有多种用法可以满足不同的推送需求。以下是一些常见的 git push 用法 git push [-u] remote local_branch 将指定的本地分支的更改推送到指定的远程仓库 -u : 将推送的分支与远程分支进行关联。 git push [-u] remote local_branch:remote_branch -u : 将推送的分支与远程分支进行关联。这样你以后只需要使用 git push 命令即可进行推送Git 会自动推送到与当前分支关联的远程分支。remote: 远程分支local_branch: 本地仓库的分支remote_branch: 远程仓库中的分支 git push --all remote 将本地仓库中的所有分支推送到远程仓库 git push -f remote local_branch 将本地分支中更改强制推送到远程仓库中。 git push remote --delete branch 删除远程仓库remote上的指定分支branch。 git push --tags remote 将当前分支上的所有标签推送到远程仓库
3.13 合并冲突的解决
在执行命令git pull 或git merge 时两个分支本地分支与本地分支之间、本地分支与远程追踪分支之间的更改
处于文件的同一位置此时就会发生合并冲突。处于文件的不同位置上或者不同文件中此时不会发生合并冲突。
解决冲突有如下步骤
打开修改合并冲突文件执行命令git add conflict_file标记冲突解决同时将该文件添加到暂存区执行命令git merge --continue 输入并保存提交信息继续执行合并。
以下图为例执行命令git fetch origin–git merge origin/master产生了冲突 git fetch origin将远程仓库中的更新同步到本地的远程追踪分支 git merge origin/master将远程分支的更改合并到本地的当前分支。 Auto-merging提示在a.txt文件中发生自动合并 Merge conflict in a.txt提示在a.txt文件中产生合并冲突。 解决冲突 打开并修改a.txt文件保留自己想要的更改。执行命令git add a.txt标记冲突已解决同时将解决后的文件添加到暂存区。执行命令git merge --continueGit会打开一个文件输入此次提交信息合并本质是提交commit然后按esc键输入:wq保存该文件然后Git保存后会提交该合并。
四、标签操作(git tag)
Git 的标签tags是用于标记特定提交的命名引用通常用于标记版本发布。标签是不可变的一旦创建就不能修改这使得它们适合用于标识软件的发布版本。
4.1 创建标签 git tag tag_name 这个命令会在当前提交上创建一个轻量级标签。轻量级标签仅仅是一个指向特定提交的引用。 git tag -a tag_name -m Tag message commit_hash 创建一个带注解的标签其中 -a 表示创建一个带注解的标签-m 用于指定标签的描述信息commit_hash 是要标记的特定提交的哈希值 附注标签和轻量级标签的区别 附注标签包含标签本身的信息以及标签所指向的提交的哈希值。轻量级标签只是一个不含附加信息的引用。
4.2 查看标签
git tag 查看所有标签 git show tag_name 显示指定标签的详细信息包括标签的提交信息和提交内容的变化。
4.3 删除标签
git tag -d tag_name 删除指定的本地标签
4.4 推送标签到远程仓库
git push remote tag_name 推送指定标签到远程仓库中。 git push remote --tags 推送所有标签到远程仓库
4.5 检出标签创建分支
git checkout -b branch_name tag_name 在指定的标签位置创建一个新的分支
五、暂存操作git stash
git stash 是 Git 中一个非常实用的命令它允许你在不提交代码的情况下临时存储当前工作目录和暂存区Index中的所有更改。当你需要切换分支、处理紧急问题或者清理工作环境而又不想丢失当前正在进行的工作时这个命令就显得尤为重要。 git stash、git stash save、git stash save message 作用保存暂存区和工作目录中所有已跟踪文件的更改但是不保存未跟踪的文件即那些尚未被 git add 添加到暂存区的新文件或不在版本控制下的文件。而且存储到一个栈式的列表中。git stash和git stash save作用一样。messagestash记录的自定义描述信息。 git stash -u、git stash --include-untracked 将所有已跟踪即已经被 Git 知道并加入版本控制的且未暂存的更改存入stash并且同时也会包含那些被 Git 记录但尚未添加到暂存区即 .gitignore 文件中没有忽略掉的的未追踪文件。也就是说这个选项会储存那些Git已经知道存在但还没有正式追踪通过 git add 添加的任何更改。 git stash -a、git stash --all 不仅会存储所有已跟踪文件的未提交更改无论是否已暂存而且还会包括工作目录中的所有未追踪文件无论这些文件之前是否曾经被Git跟踪过。这意味着即使对于全新创建、从未被git add过的文件只要它们存在于工作目录下都会被保存至stash中。 -u 只包括已被Git知晓但还未被追踪的未暂存文件。-a 包括所有未追踪文件不管它们之前是否有过追踪记录。 git stash list 列出所有已存储的stash及其简短描述和索引编号。 git stash apply [stash{index}] git stash apply应用最近stash的内容到当前工作目录但不会从stash列表中移除。git stash apply stash{index}应用指定stash的内容到当前工作目录但不会从stash列表中移除。 git stash pop [stash{index}] 类似于 apply但它在应用后还会自动删除列表中之前应用的stash记录。 git stash drop [stash{index}] git stash drop删除最近的stash。git stash drop stash{index}应用指定的stash。 git stash clear 删除所有的stash
六、本地仓库的更新以及冲突解决
当远程仓库的代码更新了之后需要将代码更新到本地工作区中如何操作呢
6.1 直接克隆项目远程仓库 在gitee上创建了一个远程仓库AA(远程仓库中只有一个空文件a.txt)。在本地的两个文件夹A、B中分别克隆了远程仓库AAA、B文件夹相当于两个人的工作文件夹A、B文件夹下的克隆操作相当于两个用户都克隆了项目代码 在A文件夹中对文件中的代码进行修改然后提交并推送更改到远程仓库 在B文件夹中对文件中的代码进行修改然后提交并推送更改到远程仓库。推送时出现了问题如下 红色字体给出问题向远程仓库推送更改失败 浅黄色字体给出原因以及建议①更新被拒绝是因为远程仓库中含有你本地没有的更改通常是因为别人推送了更改。②在推送更改之前你应该通过git pull...命令去继承远程仓库中的更改。 解决措施
git fetch origin 将远程仓库中内容的更新同步到本地的远程追踪分支在当前分支下执行命令git merge origin/master目的是将远程追踪分支中的内容合并到当前分支此时可能会产生冲突。只有远程仓库中的新更改和当前分支中要推送的更改位于文件的不同一位置才不会产生冲突此处由于更改的地方处于同一位置才产生了冲突 解决冲突此时需要打开B文件夹下的a.txt进行选择性地修改 假如你需要远程仓库中的更改那么进行如下修改 假如你不需要远程仓库中的修改那么进行如下修改 在当前分支下执行命令git add a.txt–git commit a.txt -m 合并远程仓库的master分支–git push origin master将当前分支的代码推送到远程分支
6.2 Fork项目远程仓库