首页 > 其他分享 >Git开发工作流

Git开发工作流

时间:2024-09-12 19:52:04浏览次数:13  
标签:origin HEAD Git 工作 开发 提交 git main 分支

1.git基础

首先在当前目录下使用

git init

初始化当前仓库

git clone 目标git仓库的ssh地址

将远程仓库所有文件克隆到本地

git log
/*commit 21e227b2a8e7049322c72030e1da307cea542c7e (HEAD -> main, origin/main, origin/HEAD)
Author: halfmelon <[email protected]>
Date:   Wed Sep 11 08:57:50 2024 +0800

    Initial commit*/

使用gitlog ,查看到当前的Head指针是指向main分支的

向当前工作区添加一个Main.cpp文件,使用

git status

可以查看当前状态为

位于分支 main
您的分支与上游分支 'origin/main' 一致。

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
	main.cpp

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

也就是目前main.cpp文件已经在工作区了,但是还没有进行跟踪,按照提示进行操作

git add .

这是将工作区所有的文件都提交到暂存区,也可以使用

git add 目标文件

来提交单个文件到暂存区,这样目前的git状态就变更为

位于分支 main
您的分支与上游分支 'origin/main' 一致。

要提交的变更:
  (使用 "git restore --staged <文件>..." 以取消暂存)
	新文件:   main.cpp

使用

git commit -m "第一次提交"

将暂存区的文件提交到本地分支中,这里-m是message的意思,为本次提交添加描述

此时,git的状态变更为

位于分支 main
您的分支领先 'origin/main' 共 1 个提交。
  (使用 "git push" 来发布您的本地提交)

无文件要提交,干净的工作区

本地分支要领先远程分支一个提交

但目前仍不能直接git push将代码之间上传,在实际的开发工作中,由于是多人合作开发,因此在上传自己的分支或代码前,还需要使用

git pull

来更新最新的代码,然后才可以使用

git push origin main

将本地分支的文件提交到远程main分支中

这个时候使用git log查看,得到

commit b858702356fcec8ae1baa0bdd28e973f52433d56 (HEAD -> main, origin/main, origin/HEAD)
Author: chenzhichao-learn <[email protected]>
Date:   Wed Sep 11 09:20:48 2024 +0800

    第一次提交

说明目前已经正常提交,将代码从工作区提交到暂存区,然后从暂存区提交到本地分支,最后上传到远程仓库分支中

2.git各阶段代码回退操作

在实际工作中,可能会存在需要更新或者抛弃旧版本代码的场景,这个时候就需要将代码文件进行回退,在不同的阶段回退的操作不一样

2.1工作区代码回退

对工作区代码进行回退比较简单,可以直接修改代码,也可以使用git checkout --文件名的方式来放弃修改

模拟对main.cpp进行修改的场景

chen@czc:~/AV_Development/Git_test/Git_test$ git status
位于分支 main
您的分支与上游分支 'origin/main' 一致。

尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     main.cpp

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

这个时候我们想丢弃main.cpp的修改,使用

git checkout -- main.cpp

此时使用git log,发现目前状态变更为

位于分支 main
您的分支与上游分支 'origin/main' 一致。

无文件要提交,干净的工作区

2.2暂存区代码回退

当使用git add . 将文件提交到暂存区后,可以使用

git reset HEAD <file>

来取消文件的提交,这里的file是具体的文件名

2.3本地分支代码回退

当使用git commit将文件提交到本地分支后,使用git log查看日志发现

ommit b858702356fcec8ae1baa0bdd28e973f52433d56 (HEAD -> main, origin/main, origin/HEAD)
Author: chenzhichao-learn <[email protected]>
Date:   Wed Sep 11 09:20:48 2024 +0800

    第一次提交

这里已经提交了,可以使用

git reset --hard 21e227b2a8e7049322c72030e1da307cea542c7e

来将本地分支的代码版本回退,21e227b2a8e7049322c72030e1da307cea542c7e这一段数字可以理解为唯一版本号,或是指针。将版本回退到这个数字所代表的版本,也就是将HEAD指针指向这个版本。

这个时候我们再采用git log查看,会发现日志变更为

commit 21e227b2a8e7049322c72030e1da307cea542c7e (HEAD -> main)
Author: halfmelon <[email protected]>
Date:   Wed Sep 11 08:57:50 2024 +0800

    Initial commit

还可以通过 git reflog 来查看HEAD变更的记录



git reflog


21e227b (HEAD -> main) HEAD@{0}: reset: moving to 21e227b2a8e7049322c72030e1da307cea542c7e
b858702 (origin/main, origin/HEAD) HEAD@{1}: commit: 第一次提交
21e227b (HEAD -> main) HEAD@{2}: clone: from github.com:halfrmon/Git_test.git

2.4远程仓库分支代码回退

当将代码上传到了远程仓库后,这个时候不能随意进行回退,然后再上传。团队协作的环境下,可能目前其他人将他们的代码进行了上传,这个时候如果直接将代码版本回退,然后重新上传可能会导致覆盖了别人的代码(不想挨骂就少干点)

这里可以给出两个方案,一个是使用git pull将最新的代码拉取下来,然后在上面改。第二个可以确认没有人上传的时候,将代码回退,然后git push -f强制上传

3.git推送代码出现冲突

在团队协作下的情况下,假设目前有版本1,A、B两人都在这个版本基础上进行开发,A将代码版本2推送到远程仓库,此时没有问题,远程仓库版本变更为2,此时B就没有办法将他的版本3上传至远程仓库

这个时候可以使用git pull将文件进行更新,git会自动合并,如果无法进行自动合并,就需要手动进行合并操作。

4.git创建本地分支

如果不想影响本地的main分支,可以创建其他的分支

使用

git branch -r //查看远程仓库分支
git branch -a //查看本地和远程仓库的分支
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

使用git branch -vv可以查看当前分支跟踪的远程分支

chen@czc:~/AV_Development/Git_test/Git_test$ git branch -vv
* main 3a57ae2 [origin/main] 修改代码

创建新分支、并切换到新分支

git checkout -b 新分支名


切换到一个新分支 '新分支名'

此时git log状态变更为

commit 3a57ae22ac4a481625a7b0209d39a8a964a2f38d (HEAD -> sortdev, origin/main, origin/HEAD, main)
Author: chenzhichao-learn <[email protected]>
Date:   Wed Sep 11 16:43:36 2024 +0800


但是目前只是创建了一个新分支,并没有将这个分支跟踪任何远程分支,因此目前不能进行git pull,也无法将代码推送到远程仓库

此时将分支切换到main,并可以将新分支和主分支合并

git checkout main

切换到分支 'main'



git merge sortdev

更新 3a57ae2..0e66ed4
Fast-forward
 main.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

其实这个操作就相当于直接在main分支上进行修改代码

也可使用

git push origin sortdev:main

将sortdev的代码推送到远程origin仓库的main分支中

使用

git branch -d 新分支名

删除这个分支,一定要注意,如果新分支没有和main分支进行合并,是无法删除的

5.解决本地分支合并冲突

上一节合并的时候,本地的main分支没有任何改变,因此可以很容易的就将新分支和本地分支合并,但很有可能接出现这种情况:在本地创建了一个新的分支,但是随后又切换到main分支并git

pull了,此时main分支和新分支就出现很多不同,假设此时main分支中的改动和新分支的改动是同一个文件,此时就不能进行直接合并,会出现conflict提示,此时需要手动的去进行合并操作

6.git远程分支管理

在实际的开发工作中,完成了项目的基本功能后,一般会在远程拉一个新的分支,后期的功能添加、bug修改等工作都在新分支中进行,而不会一直在main分支中进行开发,而远程新分支的创建一般是由管理员进行创建的,其他人员没有创建的权限。

现在创建了一个dev_1.1的分支,使用git pull将代码拉取

 * [新分支]          dev_1.1    -> origin/dev_1.1
已经是最新的。



chen@czc:~/AV_Development/Git_test/Git_test$ git branch -r
  origin/HEAD -> origin/main
  origin/dev_1.1
  origin/main

发现出现了一个新的分支

此时我们使用git checkout -b dev_1.1创建一个同样名字的本地分支,并让其跟踪远程的dev_1.1分支

chen@czc:~/AV_Development/Git_test/Git_test$ git checkout -b dev_1.1 origin/dev_1.1
分支 'dev_1.1' 设置为跟踪来自 'origin' 的远程分支 'dev_1.1'。
切换到一个新分支 'dev_1.1'

此时可以使用git branch -vv查看跟踪情况,发现已经跟踪到了

chen@czc:~/AV_Development/Git_test/Git_test$ git branch -vv
* dev_1.1 0e66ed4 [origin/dev_1.1] 新分支提交
  main    0e66ed4 [origin/main] 新分支提交

如果本地分支名与远程分支名不一致,此时推送远程分支代码需要变更为

git push origin 本地分支名:dev_1.1

总结

目前仅仅更新了git的基础,包含了各项的基本操作,但是跟实际的开发环境还是有点出入,后面几天将实际的工作git流总结一下吧,这也是我发的第一篇博客,勿喷

标签:origin,HEAD,Git,工作,开发,提交,git,main,分支
From: https://blog.csdn.net/czc20010825/article/details/142124884

相关文章

  • 2025计算机毕设最全个人站点!(选题、开发、部署、讲解 一条龙)
    目录前言我的优势我的个人网站与我合作前言❤️博主简介:全网累计客户1000+,培训机构讲师、全栈开发工程师、知乎/小红书优秀作者、腾讯云/阿里云VIP客户、专注Java、小程序、安卓领域和毕业项目开发❤️服务:本毕设工作室提供无偿选题服务!包括Java、Python、微信小程序......
  • 7 个适合中级开发人员的酷炫 Python 项目创意
    大多数人都熟悉编程世界中的Python语言,学习Python并构建项目对于开发人员来说始终是一种奇妙的体验。这种语言在当今时代确实值得大肆宣传,如果它能解决很多现实世界的问题,那么为什么不选择它呢。每个程序员的旅程都是从学习任何编程语言的基础知识开始,一旦继续前进,就会意......
  • 剧本杀小程序开发,探索互联网剧本杀游戏体验
    经过几年的发展,剧本杀行业已经逐渐在消费市场中占据了一席之地,成为了最受消费者欢迎的娱乐休闲游戏模式之一,让越来越多的入局者赚的盆满钵满!在数字化发展的当下,线上游戏成为了一种流行趋势,不管是狼人杀还是剧本杀都逐渐走向了线上,成为大众新的社交游戏方式。剧本杀小程序的发展不仅......
  • 第21篇 TortoiseGit(大乌龟)版本管理工具的使用
    一、下载安装1.下载git必须先下载并安装git,再TortoiseGit下载安装git安装参考教程:https://blog.csdn.net/mukes/article/details/1156938332.TortoiseGit下载与安装TortoiseGit,Git客户端,32/64位最新版及对应的语言包下载地址:https://tortoisegit.org/download/进入下载页面,......
  • 在shell中使用github copilot
    brewinstallghghauthloginghextensioninstallgithub/gh-copilot   createalias:aliascopilot='ghcopilot';echo'aliascopilot="ghcopilot"'>>~/.zshrc&&source~/.zshrcaliasgcs='ghcopilo......
  • 深入剖析 USB 转串口的工作原理与实际应用
    在现代电子设备和计算机硬件的交互中,USB转串口技术扮演着至关重要的角色。它不仅提供了一种便捷的连接方式,还极大地扩展了设备的通信能力。本文将深入剖析USB转串口的工作原理及其在实际应用中的重要性。工作原理USB转串口设备的核心是一个集成电路,它负责将USB接口的信号转换为串行......
  • 面对后台管理系统,全是表格类型的页面,如何快速开发
    项目开始当我们拿到设计稿或者原型图时,看到如下图展示的页面。我们就要想如何能够减少工作量,做出可复用的组件。既然每个页面都长得差不多,那我们观察可以发现,这个页面分成四个部分,【搜索部分、新增部分、表格展示部分、分页部分】由于本人使用的vue3+ts+element-plus+s......
  • CSU18M91作为测脂模块开发体脂秤方案
    一台体脂秤通过测试体重、体脂、BMI、水分等数据并给出相应提示,并且许多人都将体脂检测数据作为身体健康指数衡量标准,辅助用户来关注身体健康,同时可以通过蓝牙与手机APP应用相连,记录日常身体变化情况,根据变化情况推荐用户饮食计划+运动计划。人体体脂秤的原理是肌肉内含有较多血液......
  • 流程自动化变革:看低代码开发如何赋能企业创新转型
    在数字化转型的浪潮中,企业面临着前所未有的挑战和机遇。为了保持竞争力,企业必须快速适应市场变化,创新业务模式,并提高运营效率。流程自动化成为企业转型的关键,而低代码开发平台如JNPF,正成为推动这一变革的重要力量。什么是低代码开发?低代码开发是一种通过图形化界面和配置化......
  • Metacritic 网站中的游戏开发者和类型信息爬取
    为了从Metacritic网站上爬取游戏的开发者和类型信息,你可以使用Python的网络爬虫工具,比如requests和BeautifulSoup,或者更高级的工具如Scrapy或Selenium。本文将介绍一种基于requests和BeautifulSoup的简单爬虫示例,并假设目标是从Metacritic的单个游戏页面上提取开发......