Git提交代码
目录
[写作为了记忆,个人最终输出的内容往往是遗忘后最容易捡起的内容,故以此作文]
[写作为了记忆,个人最终输出的内容往往是遗忘后最容易捡起的内容,故以此作文]
前提
工作中多人协助一个大型项目,每个参与的成员完成其中的一部分提交代码,或者是后续产品维护需要多人改bug以满足客户需求,故有了本文。
之前的上一份工作,代码托管平台是gitlab,和我们平时使用的git命令是一样的操作,甚至,我可以去借助tortoise这个图形化的工具去完成git操作。这样就根本不需要记住git命令了。当然这也是在完全熟悉这个图形化工具后才行.而熟悉Git命令则在任何平台下都能满足自己的需求.
而目前手上的这一份工作,使用的代码托管平台是gerrit, 会在代码的合并之前有一个对代码进行评分的操作,而且公司内部对git命令进行了多层封装,对git操作也给了更加严格的权限。
内容
在一个分工明确的大型项目中,通过这个项目下会有多个git仓库.通常是用repo 这个工具来进行管理.
repo是一个管理多个Git仓库的工具,它可以帮助我们一次管理多个Git仓库,使代码库的管理更加简单。
本文后续会以repo来管理多个git仓库来进行命令举例.
拉取远程项目到本地
1.repo init xxxx (ssh / https)的链接. 初始化仓库.
2.repo sync
repo sync的作用就是把各个Git子仓库(projects)都检出出来放在本地。
其基本步骤是:
1. 根据本地manifest配置,获取各个子仓库的Git地址。
2. 对每个子仓库执行git clone,检出代码到本地。
3. 如果子仓库有多个分支,还会检出指定的分支。
4. 如果需要,可以执行git pull来更新代码。
5. 重复这个过程,直到把manifest中指定的所有子仓库都检出到本地。
6. 如果某些仓库已经存在,会进行增量更新而不是全新的clone。
所以,repo sync可以高效地完成把众多代码仓库检出和同步更新的工作,使我们更容易地管理这些代码库。
3.repo2start
初始化一个仓库让用户快速开始使用 repo。
通过 repostatus 查看当前repo管理的各个git仓库的状态,比如说各个git参考下修改了那些文件等等。
在git仓库下的命令
repo下有多个git仓库,通过repo status 可以查看repo管理了那些仓库(带着路径).
我们通过切换到到具体的仓库,通过ls -la 查看 是否有.git文件,若有则说明这已经是某个git仓库的根路径了,当然,切换到具体的仓库,某些智能化的终端本身也会显示当前git仓库的分支是什么,从没有分支到有分支的这一个过程就能明白这时已经到了某个具体的仓库了。
说一下一般工作的步骤
git branch xxx 创建别的分支
git checkout xxx切换到别的分支
…………进行开发……
git status (可以不需要) 主要是为了查了当前工作区有哪些文件进行了修改.
git add . 把工作区进行改动的文件全部添加到暂存区,可以指定添加哪些文件,比如哪些编译生成的中间文件就可以不需要添加.
git status (可以不需要) 查看添加到暂存区的文件是否顺利添加,是否有遗漏的文件未添加.
git commit -m xxxx 提交到本地. xxx为提交的信息.
git show -查看最近一次提交的信息.,包括做出的那些修改,已经那些文件
git push 提交本地提交推送到远端,可带参数分支名.
平日用到的重要的命令大全(工作总结)
git branch xxx 新建其他分支,其他分支和当前分支的代码相同,且有相同的提交历史.
git branch -d xxx 删除某个分支,需要注意,删除分支时需要在其他分支下进行才有效.
git branch 查看所有分支 一般接个参数 -a
git checkout 切换到某个分支或者提交.
git show --stat --提交号 可以查看某次提交修改了那些文件,提交信息
git log 查看所有提交 可以带参数 -n ,查看前n个提交,--oneline 所以提交一行显示.
git reflog 跟踪head指针的变化,包括提交,撤销提交的变化.
git status 查看git仓库的当前状态.
git diff xxx (可以接多个文件)表示当前的工作区与暂存区的差异,可以同时对比多个文件.
git add xxx 把文件从工作区存放到暂存区,为下一次提交做准备.
git reset xxx 把已经添加的暂存区里的文件恢复到工作区,但修改的内容不会变化.
git log /git blame + 文件 查看过去对文件的修改的提交
git reset --hard xxx (xxx是提交号),则能回到某个提交号的版本.
git pull 拉取远程最新代码并与本地合并.
git cherry-pick xxx (xxx可以是其他分支或者是提交号)复制其他提交或分支的修改到当前分支,会触发冲突.
它的常见的用途有:
- 从其他分支复制bug修复或特性提交到当前分支。
- 在维护旧版本的同时,将修复bugs的提交复制到旧版本分支。
- 复制其他人的提交而不用触发完全的merge和rebase。
- 在同一个分支内复制提交,用于修改或重排当前分支的提交历史。
git stash 把工作区的修改临时存放起来,如同入栈,并清除当前工作区的修改.
git stash list 查看存放的stash
git stash pop 弹出栈顶的stash的修改并应用到工作区,同时删除存放的stash(弹栈).
git stash apply stash@{1} 将编号为 stash@{1} 的 stash 应用到当前工作区,但不会将这个 stash 从 stash 列表中删除。
git stash drop stash@{1} 将编号为 stash@{1} 的 stash 从列表中删除.
git stash clear 删除所有保存的stash列表.
git commit --amend 修改上一次的提交.
工作中遇到的git代码管理问题
1.提交了最新的一个版本,但是有些文件忘记提交了或者要修改一下自己的修改内容,或者是提交信息需要修改?
解决:新增自己要提交的文件或者修改自己的修改后,执行git add . 后使用git commit --amend .再次提交.
2. 很多开发人员共同参与,开发完后,发现别人已经推送到最新的修改且已经合并了,这时,你要推送自己的代码并请求合并?
解决:把当前分支的修改 执行 git add . 然后执行 git commit 提交,执行 git branch abc(假设新分支为abc) 新建新的分支, 这样新的abc分支就保留了这个修改,然后把原来的分支切换到之前的版本(你提交之前的版本)再执行 git reset --hard HEAD^ 回退到提交之前的版本,然后执行git pull 拉取远程最新修改.然后执行git cherry-pick abc .获取abc分支的修改并同步到了本地,解决冲突后直接推送到远程仓库.
3 很多时候,我们并不想有多个提交,一个问题最好就是一个提交?我们总希望提交的代码每次都是和远程仓库的最新代码做对比,而不是和自己的上一代版本做对比?
解决:首先工作区当前已经提交的修改是远程最新的一笔,通过git show 命令发现修改都不是自己的,执行git pull后提示已经是最新了,这时候git diff 参考的版本就是远程最新的状态. 使用git commit --amend 去维护仅有的一个提交就行.
4 如何保存工作的修改?
使用git stash 或 提交当前修改,新建分支的形式来进行保存
5 最为简单的提交代码的方式
假设是在几个版本前的代码工程上做出的修改,这个时候可以先git stash 保持修改到本地,后直接git pull 这个时候是肯定不会有冲突的,获取到最新代码后,执行git stash pop 弹出之前的修改(是可能遇到冲突) 解决冲突后直接提交到本地后推送远程.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)