Git项目管理

Git项目管理

分区概念:

创建了本地仓库以后,有三个区:

  1. 工作区(workspace)
  2. 暂存区(index)
  3. 本地仓库(repository)
    我们新创建的文件,叫做untracked,
    我们修改了已有的文件,叫做unstaged,
    他们都在工作区里

创建本地仓库

git init

在当前目录中执行git init,你的这个文件夹里就会多出一个.git文件夹,并成为一个本地仓库

查看当前仓库的状态

git status

如果你在一个不是本地仓库的目录里执行这条指令,会报错:

F:\Program Files\Obsidian\Notes>git status

fatal: not a git repository (or any of the parent directories): .git

如果你在一个本地仓库里执行这条指令,那就会显示:

  • 当前仓库的工作区中所有unstaged和untracked
  • 当前仓库的暂存区中所有uncommitted

工作区添加到暂存区

git add

将上述的工作区中的文件,经过add进入到暂存区index,这时候就准备好commit了

git add 后面可以跟文件名,也可以跟目录名

git add filename.subfix

git add . //将当前目录下所有文件都放到暂存区了

暂存区恢复到工作区

git restore

git restore --staged filename.subfix

unstage,将一个文件从暂存区里取出来

工作区提交到本地仓库

git commit

git commit -m "描述"

暂存区的内容,经过commit以后到达本地仓库的当前分支成为一个版本

一次commit,产生一个版本

commit不能提交单个文件,一提交就是将整个暂存区里的东西全部提交了

查看提交日志

log

查看commit记录,对于每一个记录,可以查看其:

  • 提交标识号:每次提交都会有一个极长的字符串作为其标识号
  • Author:提交者
  • Date:提交日期
  • 提交描述:每次commit都必须附带一个对本次提交的decription

options:

--all 显示所有分支

--pretty-oneline 将提交信息显示为一行

--abbrev-commit 使得输出的commitID更简短

--graph 以图的形式显示

当前还没有过任何提交记录

版本回滚

git reset

git reset --hard ID

版本回滚

如果你回滚到以前的某个版本,那么它之后的版本,你再通过git log去查的话就没有了

查看版本变更的所有记录

git reflog

记录了所有的版本变化的记录

git里面只要你提交过就丢不了

分支

每个人的开发互不影响,或者支线与主线互不影响

查看分支

git branch

创建分支

git branch branch_name

创建这个分支是根据当前分支的当前状态来拷贝一个副本

删除分支

git branch -d branch_name

git branch -D branch_name # 强制删除

切换分支

git checkout branch_name

切换这个分支以后,你的所有commit都会作用于当前分支,对另一个分支毫无影响

git checkout -b branch_name

创建并切换

合并分支

git merge branch_name

将branch_name合并到当前分支

冲突解决

当两个分支,他们对同一个文件的同一行有不同修改时,就会confict

这时git会让你来决定这一行的内容到底是什么

HEAD指针

头指针,指向当前的分支

分支使用的一般规范

master

线上分支,发行分支,一般不直接对这个分支进行任何修改

develop

开发分支

feature

每当项目要添加一个新功能时,就从develop创建一个新分支feature_x,然后对这个分支开发,开发好了以后merge到develop

当一个功能开发完了以后,这个功能对应的分支就可以删除了

hotfix

当线上项目发生bug时,就从master创建一个hotfix分支,修改bug,修改好了以后再merge回master,同时也要merge到develop上面

其他常见的分支还有pre,test等

其余分支不同公司有不同要求,不同团队有不同规范

远程仓库

创建SSH公钥(public key)

Gitee和Github上都会让我们给账户设置一个SSH公钥

ssh keygen -t rsa

克隆远程仓库到本地

git clone 远程项目地址 [项目在本地的别名]

添加远程仓库

首先要把远程仓库和本地仓库建立一个对应关系

git romote add 远程仓库别名 远程仓库地址(SSH或HTTPS)

git remote add origin git@github.com:ztsrxh/RoadBEV.git

99%情况下,一个本地仓库对应一个远程仓库,极少数情况下,一个本地仓库会对应到多个远程仓库

查看远程仓库

查看本地仓库所对应到的所有远程仓库

git remote

之前你git remote add 过的所有远程仓库都会被显示

推送到远程仓库

git push [-f] [--set-upstream] [远程仓库别名] [本地分支名] [:远端分支名]

git push origin master

push其实是个merge操作,就是把本地的分支merge到远端分支,那么同样可能产生conflict

--options:

-f:

如果产生conflict,无脑强制用本地覆盖远端

一般公司里会把-f禁用,以免小白把仓库里的代码全覆盖了

--set-upstream:

推送到远端的同时还建立与远端分支的联系,一次执行,永远绑定

git push --set-upstream origin master: master

远端分支名如果跟本地分支一样,那么就可以省略本地分支

查看本地分支和远程分支的对应关系

git branch -vv

抓取

抓取就是将仓库里的更新都抓取到本地,不会进行合并

如果不指定远端名称和分支名,那就抓取全部分支

git fetch [remote name] [branch name]

git merge origin/master

拉取

拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge

如果不指定远端名称和分支名,则抓取更新所有分支

git pull

.gitignore

当前项目下有一些文件我们希望git忽视掉,

创建一个叫.gitignore的文件,里面保存你希望忽视的文件格式:

*.a

.gitignore文件一般是项目组统一给一个,不需要自己写

references:

教程视频

https://www.bilibili.com/video/BV1MU4y1Y7h5?spm_id_from=333.788.player.switch\&vd_source=aa5c28fd779dafffc339fb1f6d26c788\&p=7

Git官方文档

https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control

相关推荐
Smile丶凉轩10 分钟前
微服务即时通讯系统的实现(服务端)----(1)
c++·git·微服务·github
pumpkin845141 小时前
GitHub 和 GitLab
gitlab·github
油泼辣子多加5 小时前
2024年11月21日Github流行趋势
github
A洛6 小时前
Vercel 设置自动部署 GitHub 项目
github·webhooks·自动部署·vercel
油泼辣子多加7 小时前
2024年11月22日Github流行趋势
github
兰琛1 天前
20241121 android中树结构列表(使用recyclerView实现)
android·gitee
Stara05111 天前
Git推送+拉去+uwsgi+Nginx服务器部署项目
git·python·mysql·nginx·gitee·github·uwsgi
坐公交也用券1 天前
使用Python3实现Gitee码云自动化发布
运维·gitee·自动化
不能只会打代码1 天前
大学课程项目中的记忆深刻 Bug —— 一次意外的数组越界
java·github·intellij-idea·话题博客