2026/10/22 7:21:52

学习使用Git

学习使用Git 作为一个编程的初学者我是根据我自己的理解来写的我想我的这篇文章会有很多词不达意的地方欢迎大家的指正我会积极修改并再次学习的。一.Git下载并注册登录Gitee因为之前已经对Gitee有所了解所以很早就完成了对Gitee的下载注册那么现在以登录界面来记录Gitee的使用过程git命令在电脑终端或者命令行里敲gitee或者github是用来管理代码帮助进行协作回溯查找。如果想知道当前终端在哪个文件夹Windows中在CMD用cd可以查看PowerShell用pwd也可以查看二.了解哈希值分支branchhead之间的关系哈希值每次提交过程中代码的内容提交的时间其父节点等等会生成一串数字取该数字中的一部分作为简要标记分支branchmain为主线那么在与我的搭档合作过程中我们想要实现同时工作于这条线上的不同部分就可以通过创建分支branch在各自的分支上写代码提高效率。通过git branch 分支名来实现更多收获·git branch-git commit-git checkout-git commit新创建好的branch里面还是没有代码的commit后现在还是处于main主线上的可以checkout到branch上head指当前的所在提交记录当下在哪里提交默认隐藏在分支名下面当checkout到当前提交记录的提交节点上时为分离head状态此时commit会出现新的提交但原来的分支名不会动最好创建一个新的分支名应用场景在原代码上想进行试验但是害怕搞砸那就这么做。实验失败了直接退回原代码三.了解本地仓库基本操作initcommit相对引用branch合并merge变基rebase撤销变更reset与revert移动工作addrestoretagdescribe1.initgit init就是用来把当前文件夹变成一个Git仓库并创建一个.git文件夹来记录版本历史不关联任何远程2.commit比如在main主线上写代码那就可以通过commit来一次次提交代码并且之前写的代码的记录都可以通过checkout查找main就相当于是一个标签我通过commit来不断将main标签贴在最新存档的代码上。用git commit实现3.相对引用想要到达某个提交节点可以通过checkout哈希值来完成但没有被简写的哈希值很长为了省事便利可通过git checkout 分支名^到达其最新提交的父节点git checkout 分支名或HEAD ~number实现多级提交记录的跨越同时当面对被合并出来的一个提交记录它具有两个父节点已经知道通过git checkout HEAD~number可以实现向上移动那么该节点向上移动是移动到哪个父结点上呢一般来说默认移动到其正上方的节点可以通过git checkout 分支名^来实现想要移动到另一个父结点上可以通过git checkout 分支名^2来实现^是指移动到父节点~是向上移动多少个提交4.合并merge如果当前在main主线上并且已经创立了bugfix分支且commit过了那么这时通过git merge bugfix可以把分支上做出修改的新内容合并共享到main里面但此时bugfix仍存在于新commit出来的main分支的parent里面并没有同步main里面的新的内容再通过git merge main 可以使bugfix中也同步最新内容。通过git merge 名字来实现更多收获应用场景当我的搭档在bugfix分支写好代码时我可以将他写的内容合并到我这里来我继续写代码当我的搭档想要再继续写代码的时候他可以合并我的内容再继续进行代码修改5.变基rebase简单可以理解为改变基底比如将bugfix分支rebase到main主线上就相当于把bugfix不同于main的部分单独取出来并作废掉了bugfix之前的基底放到了main上交互式变基git rebase -i HEAD~num执行后会出现弹窗在弹窗内部可以对提交记录进行修改或顺序排列修改之后会把刚刚修改的内容再去旁边复制一遍另外交互式rebase可以将想要修改的文件放在前面然后通过git commit --amend进入编辑merge和rebase的比较相同都实现了两个分支的结合使得所编写的内容越来越全面而且执行这两个命令的双方可以是并列的状态也可以是先后两次提交的状态不同merge相当于保留两支线共同的内容并把分支上的新内容加到主线上但是分支只是停留在新的main的parent里面还是完整的只不过没有新内容且没有作废之前的记录清晰展现结合的过程。适合团队工作。rebase相当于把分支上的新内容挑出来结合到main主线里面那么分支新内容就相当于换成了main的基底并且之前分支的记录被作废。适合个人工作。6.撤销变更reset与revert相同resetrevert都可使分支名上移到一个原来的提交从而实现变更的撤销不同reset撤销更改后原来最新一次的提交记录就看不到了,branch回到了上一次的提交记录处revert撤销后只是多了一个修改后的新提交原来的记录还在reset后变更确实还在但是不在暂存区本地仓库自己做更改是可以的但远程仓库大家一起合作就不起作用了这时用revert。7.移动工作利用git cherry-pick想要复制的内容可以将之前所有提交记录中想要的记录自由移动到目前所在的分支下面。8.add在讲add的功能前不得不提到Staging Area暂存区暂存区就像是一个有待打包的候选名单在当前的分支上面工作时目前有三个文件如果想要一次性全部存档提交就用git commit,但如果其中有一个文件还没编写完整有待测试就可以用git add 文件名暂存单个文件如果想要暂存所有文件可以用git add .先git add文件名那么这个文件就进入了暂存区再git commit就把这个文件保存为正式的节点了但是暂存区仍旧有这个文件的记录。通过git status也可以查看文件状态。9.撤销工具restore如果不小心把两个文件同时放入了暂存区相当于不小心将它们捆绑在一起了想要更加自由地提交就需要把其中的一个文件从暂存区撤销就可以通过git restore --staged 文件名来实现如果一个文件它本身没有作用想要把它彻底删除掉可以通过git restore 文件名来实现10.tag在日常的提交当中分支名是会随着提交移动的但有时候有的提交比较重要我们会选择创立一个tag来标记一下这里的tag就像是一个里程碑或者锚点一样通过使用git tag 标记名 分支名来创立11.describe通过git describe 分支名来查找距离该分支名最近的锚点是哪个距离是多少通常得到的结果是锚点名 距离长度 标签名四.了解远程仓库基本操作clonefetchpullpush1.clone通过git clone可以将远程的仓库下载到本地不仅是代码所有的分支所有的提交都会复制过来这时会出现o/main的分支这个就是远程分支远程仓库就叫o,但是在本地仓库提交无法控制远程仓库的。远程分支反映上次与远程仓库通信的过程2.fetch于远程仓库交互的过程就是从其他仓库传输或者获取数据那么fetch就可以帮助我们获取数据帮我们更新远程仓库最新的状态通过git fetch来实现它只是把远程仓库下载下来并不会更新本地仓库该分支上的状态3.pullgit pull本质上是git fetch跟一次merge的简写同样git pull --rebase就是一次fetch和一次rebase的简写执行后会把远程仓库的提交拉过来再合并.4.pushpush就像是将自己的成果提交到远程仓库但如果在本地仓库中的某次提交是基于远程仓库中的某个提交并且本地以及远程仓库都分别在自己的仓库中进行了提交那么这时候就会出现不能push的情况,那么我们需要做的就是使我们的工作基于最新的远程分支。五.代码管理平台的平台功能issuePR(Pull Request)团队开发a.主分支稳定main是稳定可发布的版本b.功能分支开发新的功能修改Bug都在分支上实现c.分支命名规范feature/ 新功能bugfix/ 修Bughotfix/ 紧急修复d.所有改动经过PR审查后再合入1.issueissue通常用来描述问题Bug提出需求提出新功能分配任务发起讨论。issue的组成a.title用一句话来概括问题b.body详细的说明背景想要实现什么效果解决什么问题期待的结果c.comments其他开发者加入进行讨论解决方法d.lables给问题分类e.assignee被指派负责的人f.milestone关联到某个版本或截止日期2.PR(PullRequest)用来请求将某个分支的代码合并到另一个分支并在这个过程中进行代码的审查讨论自动化检查。要写清楚改了什么为什么改怎样测试a.开发者先在本地仓库开发commit到本地仓库b.push到远程仓库c.去代码管理平台Gitee选择来源分支和目标分支点击创建PRd.审核讨论代码没有问题由维护者合入PR若有问题直接在分支上进行修改不用关闭PR再创建新的PRPR与branch强相关将新的修改再push到远程仓库就可以了