文章目录SSH设置公钥私钥基础initcloneconfigadd---暂存commit---提交statusdiffbranchlogpullpushfetchswitchrmremotecheckout多功能集合体进阶forkPR(Pull Request)remote---远程仓库操作--staged对暂存区的操作复杂HEAD头机制什么是HEAD头查看HEAD头分离HEAD头移动HEAD相对引用^---移动至父节点~ num ---移动至上 num个节点git reflogrebase交互式变基终止变基继续变基mergereset硬恢复软恢复revertrestore工作区修改了但是我想复原暂存区修改了但是我不想提交上去clean如何从新建立一个仓库本地github回到本地自动合并失败修正冲突然后提交修正的结果。与合作者共事时合作者在远程新建了仓库git仓库中的特殊文件.gitignore.gitmodules.gitkeep.gitmessageSSH设置SSHSecure Shell通过非对称加密公钥/私钥安全地建立连接然后使用对称加密进行数据传输并利用哈希算法保证消息完整性。公钥在github端的SSH Keys私钥存储在本地基础init初始化仓库gitinitclone复杂仓库至本地直接clone不用initgitclone在github上复制的地址如果下载的模块当中包含子模块那么使用递归recursive的方式进行clone否则子模块只有一个文件夹gitclone--recursive在github上复制的地址config# 查看所有配置gitconfig--global--list# 查看用户名gitconfig--globaluser.name# 查看邮箱gitconfig--globaluser.email# 查看特定配置gitconfig user.namegitconfig user.emailadd—暂存添加文件到暂存区gitadd.commit—提交提交文件到本地git仓库gitcommit -m这里输入提交注释直接运行会进入一个文本编辑器可以编写可换行的注释gitcommitstatus查看当前工作区的状态1、所处的分支2、尚未暂存以备提交的变更使用 “git add/rm 文件…” 更新要提交的内容使用 “git restore 文件…” 丢弃工作区的改动3、未跟踪的文件:使用 “git add 文件…” 以包含要提交的内容gitstatusdiffgit status可以查看哪些文件被修改但是修改了什么并不知道这时使用git diff查看修改的内容与原文件的不同之处gitdiff在git add之后查看修改gitdiff--cached会显示diff--gita/readme_cn.md b/readme_cn.md index e51fdd4..999b3b8100644--- a/readme_cn.md b/readme_cn.md -15,7 15,7 ros2 launch diablo_bringup diablo_bringup.launch.py /ros_to_mqtt_publisher /mqtt_to_ros_node -/ros_to_mqtt_publisher #### /ros_to_mqtt_publisherSubscribers: Publishers:branch查看本地的所有分支以及当前所处的分支使用*标注gitbranchgit branch -v是git branch --verbose的缩写用于显示本地分支及其最后一次提交信息gitbranch-v* chore/repo-restructure 9d28933 clean main d0636e5[落后3]Tune visual follow and diagnosticstest2e971d9 添加注释readmegit branch -vv是一个查看本地分支与远程分支跟踪关系的命令可以让你快速了解每个本地分支对应哪个远程分支以及同步状态。gitbranch-vv相比与-v会显示本地分支追踪的远程仓库的远程分支信息更加全面* chore/repo-restructure 9d28933[origin/chore/repo-restructure]clean main d0636e5[origin/main: 落后3]Tune visual follow and diagnosticstest2e971d9 添加注释readmegit branch -r可以查看所有的远程分支gitbranch-rgit branch -rorigin/HEAD - origin/mainorigin/chore/github-publish-preporigin/chore/repo-restructureorigin/devorigin/docs-readme-current-stateorigin/feat/autoaim-integration-followuporigin/feat/rdk-visualizer-checkpointorigin/feat/usb-cdc-upper-test-linkorigin/feature/formula-mini-kt-cloud-followorigin/feature/upper-lower-vision-controlorigin/mainwxr/mainlog查看提交日志gitlog–graph表示图形化表示增加了连线–oneline 表示一行显示更加简洁gitlog--graph--oneline–all表示所有的日志gitlog--all--onelinepull拉取并合并当前所在的分支会从远程仓库拉取同名的远程分支gitpullpush推送至远程github仓库gitpush当有多个远程仓库时注意不能有空格gitpush远程仓库名本地分支名:远程分支名gitpush远程仓库名本地分支名:远程分支名fetch从远程下载但是不合并gitfetchswitch切换分支分支名称使用git branch查看gitswitch分支名称回到上一个刚刚切换过来的分支gitswitch -rm不会改变仓库只会改变暂存区和工作区1.删除文件—工作区和暂存区删除gitrmfile.txt2.删除目录-r表示递归gitrm-rdirectory/3.使用通配符gitrm*.log4.只从暂存区删除—但保留工作区文件gitrm--cachedfile.txt# 停止跟踪所有文件清空暂存区gitrm--cached-r.remote列出远程仓库名称gitremote列出地址gitremote-v添加远程仓库可以添加多个gitremoteadd仓库名仓库地址删除# 删除远程仓库连接gitremote remove仓库名重新命名# 重命名远程仓库gitremoterename原名称新名称checkout多功能集合体1.切换分支分支名称使用git branch查看gitcheckout分支名称1.1.创建新分支切换新分支gitcheckout-b新分支名称1.2.放弃本地修改强制切换分支gitcheckout-f分支名称1.3.–track 创建一个本地分支让它跟踪track指定的远程分支。gitcheckout--trackorigin/devgitcheckout-b本地分支名远程仓库名/远程分支名2.恢复文件修改了文件但是要放弃这个修改注意这里的恢复文件需要在add之前也就是说我修改文件并且保存了但是我不想要我这个保存我要恢复到上一次提交完的状态使用checkout恢复gitcheckout -- file.txt#单个文件 只恢复 file.txtgitcheckout.#当前目录所有文件 恢复当前目录下所有修改过的文件gitcheckout -- *.txt#匹配模式的文件 恢复所有 .txt 文件gitcheckout -- dir/#整个目录 恢复 dir 目录下的所有文件注意- - 后面需要一个空格3.分类HEAD头gitcheckout哈希值进阶fork在github上面有一下开源的项目 可以使用fork指令 fork到自己的github仓库上PR(Pull Request)fork到自己仓库的代码经过修改提交之后可以发起PR经过原项目主的审核之后就可以PR过去了remote—远程仓库操作1.显示信息# 列出已配置的远程仓库gitremote# 输出origin# 查看详细信息gitremote-v# 输出# origin https://github.com/user/repo.git (fetch)# origin https://github.com/user/repo.git (push)2.添加远程仓库# 添加一个新的远程仓库gitremoteadd仓库名地址gitremoteaddorigin https://github.com/user/repo.git3.删除远程仓库gitremotermorigin–staged对暂存区的操作git diff --stagedgitdiff--staged比较暂存区和最后一次提交HEAD之间的差异git restore --staged .gitrestore--staged.从暂存区移除恢复到未暂存的状态但保留工作区的修改可以理解为撤销git add操作git rm -r --cached 文件名 gitrm-r--cached文件名使用场景使用.gitignore新添加了需要忽略的文件夹.vscode/ 但这个文件夹已经添加到了暂存区gitrm-r--cached.vscode/运行上述指令之后暂存区的.vscode文件夹就会递归删除了同时记得在.gitignore当中添加.vscode/复杂HEAD头机制什么是HEAD头HEAD是一个指针正常状态下HEAD是指向分支但是我们可以通过分离HEAD使其指向一个具体的提交查看HEAD头cat.git/HEAD显示指向分支ref: refs/heads/master或者显示指向提交f492d0a609f526be1583d3cf93486c882b9f48c2分离HEAD头先使用git log查看历史提交的哈希值gitcheckout f492# 输入哈希值的前几位即可会显示注意正在切换到 ‘f492’。您正处于分离头指针状态。您可以查看、做试验性的修改及提交并且您可以在切换回一个分支时丢弃在此状态下所做的提交而不对分支造成影响。之后可以使用git switch -或者git checkout master结束分离HEAD头状态gitswitch -#一步操作之后gitcheckout master# 多步操作之后使用这条命令快速回到最新分支移动HEAD相对引用^—移动至父节点gitcheckout HEAD^gitcheckout main^# 或是这种~ num —移动至上 num个节点gitcheckout HEAD~4git reflog查看所有引用日志可以查看HEAD头的历史位置可以查看HEAD{n}恢复gitreflogrebase变基操作使用场景当分支状态比较杂乱的时候使用rebase相当于重新处理提交交互式变基gitrebase-i基准点例如gitrebase-iA# 会处理 B, C, D, E 这些提交# A 保持不变E(最新)D C B A(基准点)← 从这里之后开始处理 使用 ^ 符号包含该提交gitrebase-iA^# 会处理 B, C, D, E 这些提交# A 保持不变E(最新)D C B A(基准点)← 从这里开始处理(包含)执行命令后会打开编辑器显示如下内容pick abc1234 第一次提交 pick def5678 第二次提交 pick ghi9012 第三次提交 pick jkl3456 第四次提交# 变基 2e971d9..abc1234 到 2e971d94 个命令## 命令:# p, pick 使用提交# r, reword 使用提交但修改提交说明# e, edit 使用提交但停止以修正提交# s, squash 使用提交但合并到前一提交# f, fixup 同 squash但丢弃提交说明# x, exec 使用 shell 运行命令该行剩余部分# b, break 在此处停止使用 git rebase --continue 继续# d, drop 移除提交# l, label 为当前 HEAD 打上标签# t, reset 重置 HEAD 到标签# m, merge 创建合并提交之后按照需要修改即可终止变基# 如果操作失误或想放弃gitrebase--abort# 回到变基前的状态继续变基注意一定要在解决冲突之后并且保存文件之后再add否则将会把、、 这样的冲突标记提交上去这样就乱了# 解决冲突后# 保存文件后gitadd.gitrebase--continuemerge合并操作注意1在合并操作之前需要保证分支最新注意2是谁往谁上合并1、确保你在 test 分支上gitcheckouttest2、先获取远程最新代码gitfetch origin3、确保本地 main 分支是最新的gitcheckout maingitpull origin maingitcheckouttest# 切换回你的分支4、将 main 分支合并到你的分支gitmerge main# 在当前分支test上合并 main 分支reset复原操作撤销变更可以使暂存区恢复到之前的状态当前修改也有保留但是存储起来了这种恢复是通过移动HEAD指针的形式实现的# HEAD指针指回工作区保持不变gitreset 53c2688硬恢复没有commit的修改都会丢失工作区完全恢复到历史状态HEAD指针也指回历史状态。gitreset--hardf9fd6gitreset--hardHEAD~1gitreset HEAD^还可以结合HEAD{n}来撤销之前的撤销gitreset--hardHEAD{1}软恢复所有当前修改会变成暂存状态git add 过的状态可以重新提交。# 只移动 HEAD 到 53c2688但工作区文件保持不变gitreset--soft53c2688revert也是撤销变更的一种restore只修改工作区/暂存区的文件内容不进行HEAD指针的移动工作区修改了但是我想复原这样做就把之前在工作区的修改撤销了gitrestore.暂存区修改了但是我不想提交上去也就是说使用了git addgitrestore--staged.注意这个时候修改仍然存在是在工作区暂存区的修改已经撤销了如果想在把工作区的修改撤销 还需要一步git restore .cleangit clean -fdds如何从新建立一个仓库本地1、确保用户名和邮箱是自己的gitconfig--global--list2、生成SSH密钥ssh-keygen生成 SSH 密钥工具-t ed25519指定密钥算法为 ed25519推荐安全且短-C “邮箱”给密钥加注释方便在 GitHub 上识别ssh-keygen-ted25519-C你的GitHub邮箱3、ssh-agent -s启动 SSH 代理并输出需要设置的环境变量eval “$( … )”把这些环境变量立即加载到当前终端结果当前 shell 拥有可用的认证代理eval$(ssh-agent-s)4、把私钥注册到代理ssh-add把私钥注册到代理~/.ssh/id_ed25519你本机的 ed25519 私钥路径结果后续 git/ssh 操作会自动用这把钥匙认证ssh-add ~/.ssh/id_ed255195、-l列出当前代理里已加载的密钥指纹结果看到一条 ED25519 指纹就表示成功ssh-add-l6、打印公钥内容可以公开你需要把这一整行复制到 GitHubcat~/.ssh/id_ed25519.pubgithub1、在设置里面的SSH key添加刚才复制的代码2、创建新仓库点击右上角的 “” 号 → 选择 “New repository”Repository name: 仓库名称如smart_car_rosDescription: 可选简短描述Public/Private: 选择公开或私有Initialize this repository with:不要勾选 “Add a README file”不要勾选 “.gitignore”不要勾选 “License”点击 “Create repository”3、复制这个仓库的地址回到本地7、测试连接ssh-Tgitgithub.com8、初始化gitinit9、添加仓库地址gitremoteaddorigin仓库地址10、推送gitpush-uorigin master自动合并失败修正冲突然后提交修正的结果。1.查看哪些文件有冲突gitstatus会出现位于分支test您有尚未合并的路径。 解决冲突并运行git commit 使用git merge --abort终止合并 要提交的变更........未合并的路径 使用git add 文件...标记解决方案2.打开冲突文件你会看到HEAD // 当前分支的代码 int value100;// 被合并的分支的代码main int value200;main3.解决冲突文件推荐在vscode的合并编辑器当中修改删除 HEAD、、 main 标记然后修改具体内容4.将修改后的文件添加到暂存区gitadd文件名gitadd.5.修改完成后进行提交gitcommit-m注释与合作者共事时合作者在远程新建了仓库# 1. 获取远程所有分支的最新信息gitfetch origin# 2. 查看远程分支确认存在gitbranch-r# 3. 创建本地分支并切换到该分支gitcheckout-b新分支origin/新分支# 或者使用 --track 参数gitcheckout--trackorigin/新分支git仓库中的特殊文件.gitignore忽略不需要版本控制的文件指定哪些文件/目录不被 Git 跟踪通常用于编译产物、临时文件、敏感信息等。这个文件放在哪里就递归的忽略以下的所有文件夹当中的内容1、文件名/该文件夹下的所有内容2、*.o所有.o结尾的文件test.o 123.o# ROS 工作空间编译产物build/ devel/ install/ log/# Python__pycache__/ *.py[cod]*$py.class *.so .Python venv/ env/# C*.o *.so *.a *.exe *.dll# IDE.vscode/# 日志和临时文件*.log *.bag *.bag.active *.tmp当 .gitignore 不生效时使用git rm -r --cached 文件名/文件夹名 移除已跟踪的文件.gitmodules管理子模块配置 引入外部依赖[submodule “文件名”]path 相对当前文件工程文件的路径url 子模块的远程仓库地址branch 跟踪的分支默认跟踪远程仓库的 main 分支[submoduleyolov5]pathyolov5 urlhttps://github.com/ultralytics/yolov5.git[submoduleros_ws/src/odin_ros_driver]pathros_ws/src/odin_ros_driver urlhttps://github.com/manifoldsdk/odin_ros_driver.git branchmain[submoduleNeuPAN]pathNeuPAN urlhttps://github.com/ManifoldTehLtd/NeuPAN.gitkeep保留空目录 需要提交空目录时.gitmessage提交信息模板 规范提交格式# 类型: 简短描述## 类型# feat: 新功能# fix: 修复bug# docs: 文档更新# style: 代码格式# refactor: 重构# test: 测试相关# chore: 构建/工具## 示例# feat: 添加DWA局部规划器## 详细描述可选# - 实现动态窗口法算法# - 添加参数配置## 关联问题 #123# 测试方法 rosrun navigation dwa_planner## 影响范围
git指令学习
文章目录SSH设置公钥私钥基础initcloneconfigadd---暂存commit---提交statusdiffbranchlogpullpushfetchswitchrmremotecheckout多功能集合体进阶forkPR(Pull Request)remote---远程仓库操作--staged对暂存区的操作复杂HEAD头机制什么是HEAD头查看HEAD头分离HEAD头移动HEAD相对引用^---移动至父节点~ num ---移动至上 num个节点git reflogrebase交互式变基终止变基继续变基mergereset硬恢复软恢复revertrestore工作区修改了但是我想复原暂存区修改了但是我不想提交上去clean如何从新建立一个仓库本地github回到本地自动合并失败修正冲突然后提交修正的结果。与合作者共事时合作者在远程新建了仓库git仓库中的特殊文件.gitignore.gitmodules.gitkeep.gitmessageSSH设置SSHSecure Shell通过非对称加密公钥/私钥安全地建立连接然后使用对称加密进行数据传输并利用哈希算法保证消息完整性。公钥在github端的SSH Keys私钥存储在本地基础init初始化仓库gitinitclone复杂仓库至本地直接clone不用initgitclone在github上复制的地址如果下载的模块当中包含子模块那么使用递归recursive的方式进行clone否则子模块只有一个文件夹gitclone--recursive在github上复制的地址config# 查看所有配置gitconfig--global--list# 查看用户名gitconfig--globaluser.name# 查看邮箱gitconfig--globaluser.email# 查看特定配置gitconfig user.namegitconfig user.emailadd—暂存添加文件到暂存区gitadd.commit—提交提交文件到本地git仓库gitcommit -m这里输入提交注释直接运行会进入一个文本编辑器可以编写可换行的注释gitcommitstatus查看当前工作区的状态1、所处的分支2、尚未暂存以备提交的变更使用 “git add/rm 文件…” 更新要提交的内容使用 “git restore 文件…” 丢弃工作区的改动3、未跟踪的文件:使用 “git add 文件…” 以包含要提交的内容gitstatusdiffgit status可以查看哪些文件被修改但是修改了什么并不知道这时使用git diff查看修改的内容与原文件的不同之处gitdiff在git add之后查看修改gitdiff--cached会显示diff--gita/readme_cn.md b/readme_cn.md index e51fdd4..999b3b8100644--- a/readme_cn.md b/readme_cn.md -15,7 15,7 ros2 launch diablo_bringup diablo_bringup.launch.py /ros_to_mqtt_publisher /mqtt_to_ros_node -/ros_to_mqtt_publisher #### /ros_to_mqtt_publisherSubscribers: Publishers:branch查看本地的所有分支以及当前所处的分支使用*标注gitbranchgit branch -v是git branch --verbose的缩写用于显示本地分支及其最后一次提交信息gitbranch-v* chore/repo-restructure 9d28933 clean main d0636e5[落后3]Tune visual follow and diagnosticstest2e971d9 添加注释readmegit branch -vv是一个查看本地分支与远程分支跟踪关系的命令可以让你快速了解每个本地分支对应哪个远程分支以及同步状态。gitbranch-vv相比与-v会显示本地分支追踪的远程仓库的远程分支信息更加全面* chore/repo-restructure 9d28933[origin/chore/repo-restructure]clean main d0636e5[origin/main: 落后3]Tune visual follow and diagnosticstest2e971d9 添加注释readmegit branch -r可以查看所有的远程分支gitbranch-rgit branch -rorigin/HEAD - origin/mainorigin/chore/github-publish-preporigin/chore/repo-restructureorigin/devorigin/docs-readme-current-stateorigin/feat/autoaim-integration-followuporigin/feat/rdk-visualizer-checkpointorigin/feat/usb-cdc-upper-test-linkorigin/feature/formula-mini-kt-cloud-followorigin/feature/upper-lower-vision-controlorigin/mainwxr/mainlog查看提交日志gitlog–graph表示图形化表示增加了连线–oneline 表示一行显示更加简洁gitlog--graph--oneline–all表示所有的日志gitlog--all--onelinepull拉取并合并当前所在的分支会从远程仓库拉取同名的远程分支gitpullpush推送至远程github仓库gitpush当有多个远程仓库时注意不能有空格gitpush远程仓库名本地分支名:远程分支名gitpush远程仓库名本地分支名:远程分支名fetch从远程下载但是不合并gitfetchswitch切换分支分支名称使用git branch查看gitswitch分支名称回到上一个刚刚切换过来的分支gitswitch -rm不会改变仓库只会改变暂存区和工作区1.删除文件—工作区和暂存区删除gitrmfile.txt2.删除目录-r表示递归gitrm-rdirectory/3.使用通配符gitrm*.log4.只从暂存区删除—但保留工作区文件gitrm--cachedfile.txt# 停止跟踪所有文件清空暂存区gitrm--cached-r.remote列出远程仓库名称gitremote列出地址gitremote-v添加远程仓库可以添加多个gitremoteadd仓库名仓库地址删除# 删除远程仓库连接gitremote remove仓库名重新命名# 重命名远程仓库gitremoterename原名称新名称checkout多功能集合体1.切换分支分支名称使用git branch查看gitcheckout分支名称1.1.创建新分支切换新分支gitcheckout-b新分支名称1.2.放弃本地修改强制切换分支gitcheckout-f分支名称1.3.–track 创建一个本地分支让它跟踪track指定的远程分支。gitcheckout--trackorigin/devgitcheckout-b本地分支名远程仓库名/远程分支名2.恢复文件修改了文件但是要放弃这个修改注意这里的恢复文件需要在add之前也就是说我修改文件并且保存了但是我不想要我这个保存我要恢复到上一次提交完的状态使用checkout恢复gitcheckout -- file.txt#单个文件 只恢复 file.txtgitcheckout.#当前目录所有文件 恢复当前目录下所有修改过的文件gitcheckout -- *.txt#匹配模式的文件 恢复所有 .txt 文件gitcheckout -- dir/#整个目录 恢复 dir 目录下的所有文件注意- - 后面需要一个空格3.分类HEAD头gitcheckout哈希值进阶fork在github上面有一下开源的项目 可以使用fork指令 fork到自己的github仓库上PR(Pull Request)fork到自己仓库的代码经过修改提交之后可以发起PR经过原项目主的审核之后就可以PR过去了remote—远程仓库操作1.显示信息# 列出已配置的远程仓库gitremote# 输出origin# 查看详细信息gitremote-v# 输出# origin https://github.com/user/repo.git (fetch)# origin https://github.com/user/repo.git (push)2.添加远程仓库# 添加一个新的远程仓库gitremoteadd仓库名地址gitremoteaddorigin https://github.com/user/repo.git3.删除远程仓库gitremotermorigin–staged对暂存区的操作git diff --stagedgitdiff--staged比较暂存区和最后一次提交HEAD之间的差异git restore --staged .gitrestore--staged.从暂存区移除恢复到未暂存的状态但保留工作区的修改可以理解为撤销git add操作git rm -r --cached 文件名 gitrm-r--cached文件名使用场景使用.gitignore新添加了需要忽略的文件夹.vscode/ 但这个文件夹已经添加到了暂存区gitrm-r--cached.vscode/运行上述指令之后暂存区的.vscode文件夹就会递归删除了同时记得在.gitignore当中添加.vscode/复杂HEAD头机制什么是HEAD头HEAD是一个指针正常状态下HEAD是指向分支但是我们可以通过分离HEAD使其指向一个具体的提交查看HEAD头cat.git/HEAD显示指向分支ref: refs/heads/master或者显示指向提交f492d0a609f526be1583d3cf93486c882b9f48c2分离HEAD头先使用git log查看历史提交的哈希值gitcheckout f492# 输入哈希值的前几位即可会显示注意正在切换到 ‘f492’。您正处于分离头指针状态。您可以查看、做试验性的修改及提交并且您可以在切换回一个分支时丢弃在此状态下所做的提交而不对分支造成影响。之后可以使用git switch -或者git checkout master结束分离HEAD头状态gitswitch -#一步操作之后gitcheckout master# 多步操作之后使用这条命令快速回到最新分支移动HEAD相对引用^—移动至父节点gitcheckout HEAD^gitcheckout main^# 或是这种~ num —移动至上 num个节点gitcheckout HEAD~4git reflog查看所有引用日志可以查看HEAD头的历史位置可以查看HEAD{n}恢复gitreflogrebase变基操作使用场景当分支状态比较杂乱的时候使用rebase相当于重新处理提交交互式变基gitrebase-i基准点例如gitrebase-iA# 会处理 B, C, D, E 这些提交# A 保持不变E(最新)D C B A(基准点)← 从这里之后开始处理 使用 ^ 符号包含该提交gitrebase-iA^# 会处理 B, C, D, E 这些提交# A 保持不变E(最新)D C B A(基准点)← 从这里开始处理(包含)执行命令后会打开编辑器显示如下内容pick abc1234 第一次提交 pick def5678 第二次提交 pick ghi9012 第三次提交 pick jkl3456 第四次提交# 变基 2e971d9..abc1234 到 2e971d94 个命令## 命令:# p, pick 使用提交# r, reword 使用提交但修改提交说明# e, edit 使用提交但停止以修正提交# s, squash 使用提交但合并到前一提交# f, fixup 同 squash但丢弃提交说明# x, exec 使用 shell 运行命令该行剩余部分# b, break 在此处停止使用 git rebase --continue 继续# d, drop 移除提交# l, label 为当前 HEAD 打上标签# t, reset 重置 HEAD 到标签# m, merge 创建合并提交之后按照需要修改即可终止变基# 如果操作失误或想放弃gitrebase--abort# 回到变基前的状态继续变基注意一定要在解决冲突之后并且保存文件之后再add否则将会把、、 这样的冲突标记提交上去这样就乱了# 解决冲突后# 保存文件后gitadd.gitrebase--continuemerge合并操作注意1在合并操作之前需要保证分支最新注意2是谁往谁上合并1、确保你在 test 分支上gitcheckouttest2、先获取远程最新代码gitfetch origin3、确保本地 main 分支是最新的gitcheckout maingitpull origin maingitcheckouttest# 切换回你的分支4、将 main 分支合并到你的分支gitmerge main# 在当前分支test上合并 main 分支reset复原操作撤销变更可以使暂存区恢复到之前的状态当前修改也有保留但是存储起来了这种恢复是通过移动HEAD指针的形式实现的# HEAD指针指回工作区保持不变gitreset 53c2688硬恢复没有commit的修改都会丢失工作区完全恢复到历史状态HEAD指针也指回历史状态。gitreset--hardf9fd6gitreset--hardHEAD~1gitreset HEAD^还可以结合HEAD{n}来撤销之前的撤销gitreset--hardHEAD{1}软恢复所有当前修改会变成暂存状态git add 过的状态可以重新提交。# 只移动 HEAD 到 53c2688但工作区文件保持不变gitreset--soft53c2688revert也是撤销变更的一种restore只修改工作区/暂存区的文件内容不进行HEAD指针的移动工作区修改了但是我想复原这样做就把之前在工作区的修改撤销了gitrestore.暂存区修改了但是我不想提交上去也就是说使用了git addgitrestore--staged.注意这个时候修改仍然存在是在工作区暂存区的修改已经撤销了如果想在把工作区的修改撤销 还需要一步git restore .cleangit clean -fdds如何从新建立一个仓库本地1、确保用户名和邮箱是自己的gitconfig--global--list2、生成SSH密钥ssh-keygen生成 SSH 密钥工具-t ed25519指定密钥算法为 ed25519推荐安全且短-C “邮箱”给密钥加注释方便在 GitHub 上识别ssh-keygen-ted25519-C你的GitHub邮箱3、ssh-agent -s启动 SSH 代理并输出需要设置的环境变量eval “$( … )”把这些环境变量立即加载到当前终端结果当前 shell 拥有可用的认证代理eval$(ssh-agent-s)4、把私钥注册到代理ssh-add把私钥注册到代理~/.ssh/id_ed25519你本机的 ed25519 私钥路径结果后续 git/ssh 操作会自动用这把钥匙认证ssh-add ~/.ssh/id_ed255195、-l列出当前代理里已加载的密钥指纹结果看到一条 ED25519 指纹就表示成功ssh-add-l6、打印公钥内容可以公开你需要把这一整行复制到 GitHubcat~/.ssh/id_ed25519.pubgithub1、在设置里面的SSH key添加刚才复制的代码2、创建新仓库点击右上角的 “” 号 → 选择 “New repository”Repository name: 仓库名称如smart_car_rosDescription: 可选简短描述Public/Private: 选择公开或私有Initialize this repository with:不要勾选 “Add a README file”不要勾选 “.gitignore”不要勾选 “License”点击 “Create repository”3、复制这个仓库的地址回到本地7、测试连接ssh-Tgitgithub.com8、初始化gitinit9、添加仓库地址gitremoteaddorigin仓库地址10、推送gitpush-uorigin master自动合并失败修正冲突然后提交修正的结果。1.查看哪些文件有冲突gitstatus会出现位于分支test您有尚未合并的路径。 解决冲突并运行git commit 使用git merge --abort终止合并 要提交的变更........未合并的路径 使用git add 文件...标记解决方案2.打开冲突文件你会看到HEAD // 当前分支的代码 int value100;// 被合并的分支的代码main int value200;main3.解决冲突文件推荐在vscode的合并编辑器当中修改删除 HEAD、、 main 标记然后修改具体内容4.将修改后的文件添加到暂存区gitadd文件名gitadd.5.修改完成后进行提交gitcommit-m注释与合作者共事时合作者在远程新建了仓库# 1. 获取远程所有分支的最新信息gitfetch origin# 2. 查看远程分支确认存在gitbranch-r# 3. 创建本地分支并切换到该分支gitcheckout-b新分支origin/新分支# 或者使用 --track 参数gitcheckout--trackorigin/新分支git仓库中的特殊文件.gitignore忽略不需要版本控制的文件指定哪些文件/目录不被 Git 跟踪通常用于编译产物、临时文件、敏感信息等。这个文件放在哪里就递归的忽略以下的所有文件夹当中的内容1、文件名/该文件夹下的所有内容2、*.o所有.o结尾的文件test.o 123.o# ROS 工作空间编译产物build/ devel/ install/ log/# Python__pycache__/ *.py[cod]*$py.class *.so .Python venv/ env/# C*.o *.so *.a *.exe *.dll# IDE.vscode/# 日志和临时文件*.log *.bag *.bag.active *.tmp当 .gitignore 不生效时使用git rm -r --cached 文件名/文件夹名 移除已跟踪的文件.gitmodules管理子模块配置 引入外部依赖[submodule “文件名”]path 相对当前文件工程文件的路径url 子模块的远程仓库地址branch 跟踪的分支默认跟踪远程仓库的 main 分支[submoduleyolov5]pathyolov5 urlhttps://github.com/ultralytics/yolov5.git[submoduleros_ws/src/odin_ros_driver]pathros_ws/src/odin_ros_driver urlhttps://github.com/manifoldsdk/odin_ros_driver.git branchmain[submoduleNeuPAN]pathNeuPAN urlhttps://github.com/ManifoldTehLtd/NeuPAN.gitkeep保留空目录 需要提交空目录时.gitmessage提交信息模板 规范提交格式# 类型: 简短描述## 类型# feat: 新功能# fix: 修复bug# docs: 文档更新# style: 代码格式# refactor: 重构# test: 测试相关# chore: 构建/工具## 示例# feat: 添加DWA局部规划器## 详细描述可选# - 实现动态窗口法算法# - 添加参数配置## 关联问题 #123# 测试方法 rosrun navigation dwa_planner## 影响范围