文章目录1. 创建独立的子分支2. 创建子分支的子分支3. 删除分支4. merge分支4.1 merge 操作4.2 案例5 git 创建tags5.1. 创建标签5.2 查看标签5.3 推送标签到远程仓库5.4 删除标签5. 5 切换到标签5. 6 案例6. cherry-pick 的使用6.1 git cherry-pick 和 git merge的差异6.2 基本用法6.3 git cherry-pick 多个commit6.3 git cherry-pick --continue7 git reset (回退commit)8 git rebase9 git stash9.1 缓存修改9.2 查看所有 stash 记录9.3 恢复指定的 stash9.4 删除 stash 记录9.5 典型流程示例9.6 补充10 合并多个commit在Git中创建一个新的分支并将代码上传到这个新分支的基本步骤如下1. 创建独立的子分支(1) 下载项目代码gitclone.......git(2).创建新分支在终端或命令行界面中,使用 git branch 命令来创建一个新的分支。例如,如果你想创建一个名为 new-branch 的分支,你可以使用:gitbranch new-branch(3)切换到新分支gitcheckout new-branch(4) 进行你的更改在新分支上进行你的代码更改。这可能包括添加新文件、修改现有文件等。(5)提交更改gitadd.gitcommit-m"描述你的更改"(5) 推送新分支到远程仓库使用 git push 命令将你的新分支推送到远程仓库。如果你正在推送到默认的远程仓库(通常是 origin),可以使用gitpush origin new-branch(推荐)如果你想要直接从命令行创建远程分支,可以使用以下命令gitpush-uorigin new-branch这条命令不仅会推送分支,还会设置上游跟踪分支,这样以后你只需要使用 git push 或 git pull 而不需要指定远程仓库和分支名。2. 创建子分支的子分支假设需要在项目仓库下,创建一个wj/AEB_stepmind的分支,分支如下所示,这样的好处是我们可以在项目子分支wj下面创建多个属于自己子子分支,便于管理自己的多个分支:避免分支名冲突:在创建分支前,先检查远程是否存在同名分支或标签, 否则创建好分支或标签,但由于与远程冲突,无法提交:gitls-remote--headsorigin maptr_test# 检查远程分支gitls-remote--tagsorigin maptr_test# 检查远程标签(1). 创建新的子分支在Git中,你可以使用以下命令创建一个新的分支(比如wj/AEB_stepmind)并切换到这个分支:gitcheckout-bwj/AEB_stepmind这会基于当前分支创建一个新的分支,并切换到该分支。也可以直接从指定的分支创建新的子分支wj/AEB_stepmind,假设是从vlm分支:gitcheckout-bwj/AEB_stepmind vlm(2). 提交代码到新分支现在你已经切换到了新的子分支 wj/AEB_stepmind,你可以开始修改文件并将更改添加到暂存区,然后进行提交。gitadd.# 将所有更改的文件添加到暂存区gitcommit-m"Add initial changes for AEB_stepmind"# 提交更改(3). 将新分支推送到远程仓库**如果你想将这个新分支推送到远程仓库,以便其他人可以看到或继续开发,你可以使用以下命令:gitpush origin wj/AEB_stepmind3. 删除分支在Git上删除分支的操作分为两种情况:删除本地分支和删除远程分支。下面分别介绍这两种情况的命令。(1). 删除本地分支要删除本地分支,首先确保你不在要删除的分支上,可以使用 git checkout 切换到其他分支,比如 main 或 master。然后使用以下命令删除本地分支:gitcheckout main# 切换到其他分支,避免删除当前分支gitbranch-dbranch_name# 删除分支(安全删除,若分支未合并,会提示警告)如果要强制删除分支(即使分支没有合并),可以使用:gitbranch-Dbranch_name# 强制删除分支(2).删除远程分支要删除远程分支,使用 git push 命令,带上--delete标志:gitpush origin--deletebranch_name# 删除远程分支(3). 删除远程分支的本地引用有时,删除远程分支后,Git本地会保留该远程分支的引用(比如在 git branch -r 中)。要清理本地的远程引用,可以使用以下命令:gitfetch-p# 清理所有已删除远程分支的本地引用示例:假设要删除一个名为feature-xyz的本地和远程分支,可以按以下步骤操作:例1:删除本地分支:gitcheckout main# 切换到主分支gitbranch-Dfeature-xyz# 强制删除本地分支例2: 删除远程分支:gitpush origin--deletefeature-xyz# 删除远程分支4. merge分支4.1 merge 操作在 Git 中,将其他分支的代码合并到当前分支(或目标分支)是一个常见操作。以下是详细的步骤和方法:(1). 确保当前分支是最新的在合并之前,确保当前分支是最新的,以避免冲突:gitpull origin当前分支名(2). 切换到目标分支如果当前不在目标分支(即你想合并代码的分支),请先切换到目标分支:gitcheckout目标分支名(3). 合并其他分支的代码使用git merge命令将其他分支的代码合并到当前分支:gitmerge其他分支名示例:假设你想将 feature-branch 的代码合并到 main 分支:gitcheckout main# 切换到 main 分支gitmerge feature-branch# 合并 feature-branch 的代码(4). 解决冲突(如果有)如果合并过程中发生冲突,Git 会提示冲突文件。你需要手动解决冲突:打开冲突文件,Git 会用以下标记标识冲突:HEAD 当前分支的代码=======其他分支的代码其他分支名根据需要选择保留哪一部分代码,或者手动合并。解决冲突后,保存文件。(5). 标记冲突已解决解决冲突后,将文件标记为已解决:gitadd冲突文件(6). 完成合并如果所有冲突都已解决,完成合并:gitcommit(7). 推送合并后的代码将合并后的代码推送到远程仓库:gitpush origin当前分支名(8). 使用 git rebase(可选)如果你希望保持提交历史的线性,可以使用 git rebase 代替 git merge:gitcheckout main# 切换到 main 分支gitrebase feature-branch# 将 feature-branch 的提交应用到 main 分支注意:rebase 会重写提交历史,适用于个人分支,不推荐在共享分支上使用。(9). 使用 VSCode 合并(可视化操作)如果你使用 Visual Studio Code (VSCode),可以通过以下步骤合并分支:打开 VSCode 的 Source Control 面板。点击右下角的分支名称,选择 Merge Branch。选择要合并的分支。如果有冲突,VSCode 会提示并帮助你解决冲突。4.2 案例当远程的代码发生了,本地代码在以前的版本上进行修改,此时直接向远程分支提交代码,因为代码存在冲突,则会被拒绝rejectedgit pull origin dyf/ODLane_dev_0517_yushua --rebase这个错误表明 Git 检测到你的仓库中有一个未完成的 rebase 操作(可能是之前的中断导致的)。你需要先清理或完成这个未完成的 rebase,然后才能继续操作。gitrebase--abortgitpull origin dyf/ODLane_dev_0517_yushua--rebase这会完全放弃当前的 rebase 操作,回到 rebase 之前的状态。此时就要对冲突的代码进行merge操作5 git 创建tags在 Git 中,Tag(标签)用于标记特定的提交(如版本发布v1.0.0),分为轻量标签(Lightweight Tag) 和 附注标签(Annotated Tag)。以下是详细用法:5.1. 创建标签(1) 轻量标签(无额外信息)gittagtag_name# 在当前提交打标签gittagtag_namecommit# 在指定commit id 提交打标签(如 git tag v1.0.0 abc1234)特点:只是一个指向提交的指针,不存储作者、日期等信息。(2) 附注标签(推荐,含元信息)gittag-atag_name-m"标签说明"# 在当前提交打标签gittag-atag_namecommit-m"说明"# 在指定提交打标签特点:会记录标签作者、日期和说明(类似 git commit)。适合版本发布,方便后续追溯。5.2 查看标签gittag# 列出所有标签gitshowtag_name