Git学习

git安装步骤:https://www.cnblogs.com/wj-1314/p/7993819.html

git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

git工作流:https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md

git代码管理机制

在这里插入图片描述

名称解释
Workspace本地的工作区
Index/Stage暂存区
Repository本地仓库
Remote远程仓库

git常用命令:

基本信息设置(git config)

  • 设置(config)用户名 和 邮箱
  • git config --global user.name “用户名,例如我就会写Leonidas”
    //为“某一个仓库”配置只需要去掉global即可
  • git config --global user.email “邮箱,例如我就会写956xxxxx@qq.com”
    //为“某一个仓库”配置只需要去掉global即可
  • git config --list
    //查询用户信息
  • git config --system --unset credential.helper
    //如果push遇到在输入密码错误后,就会报这个错误fatal: Authentication failed for,以上命令行是解决方案,之后你在push就会提示输入名称和密码。
  • 初始化(init)本地代码仓库
  • cd d:/dev/android/gitstory
    //进入到相应的文件目录下,除了使用命令行之外,(Windows环境下)还可以直接通过“文件资源管理器”自己进入到想作为本地仓库的位置,点击鼠标右键打开Git Bash,然后在进行初始化操作也行。
  • git init
    //在此目录下初始化此目录为git仓库
    //git init 用于本地代码库,根文件夹下包括所有的源代码,git版本控制相关的文件在.git目录下。
  • git init --bare
    //在此目录下初始化为一个bare git仓库
    //git init --bare 意思是建一个裸库,执行命令后,根目录下只包括git版本控制相关的文件等,相对于上面.git文件夹下的所有文件。跟目录是不包括项目源代码的。
    一般来讲,作为远端备份或公共版本库时,应该使用git init --bare
  • PS:两种初始化方式的结果如下图

git init操作的结果
在这里插入图片描述

git init --bare操作的结果
在这里插入图片描述

  • 克隆(clone)远程仓库到本地
  • 添加(add)到暂存区
  • git add README.md
    //添加某个文件夹或文件到暂存区
  • git add .
    //添加所有修改到stage区
  • 提交(commit)到本地仓库(repository)。
  • git commit -m “本次提交的注释信息”
  • 状态(status)查看
  • git status
    //用于查看当前工作区(repository) 和 暂存区(stage)文件的状态。

使用git status命令后,会出现如下内容:
在这里插入图片描述各个部分的含义如下:
(参考:http://www.softwhy.com/article-8791-1.html)
on branch master:当前工作的分支

Your branch is up to date with ‘origin/master’.:该信息只是一个提示信息!您origin/master分支是最新的。
原因可能是:
您没有更改任何内容或者更改了被忽略的文件或者更改了未提交!

Untracked files:处于未跟踪状态的文件,

  • 文件所处状态介绍:
    (参考:https://jingyan.baidu.com/article/cbf0e50045410a2eab28937f.html
    在这里插入图片描述
    (1)未跟踪状态(Untracked):
    未跟踪状态的文件,是在工作区,但是未纳入Git管理的文件,不参与版本控制。使用git add命令即可将未跟踪文件纳入管理。
    (2)位于暂存区待提交状态(Staged):一般将文件、文件夹add后,就进入Staged状态了
    (3)已修改状态(Modified):纳入跟踪的文件在工作区中被修改后就会处于Modified状态。
    (4)未修改状态(unmodified):当对一个文件、文件夹进行commit操作后就进入了unmodified状态了

  • 提交到远程仓库(push)操作
    (参考:https://www.yiibai.com/git/git_push.html

git push的一般形式为 git push <远程主机名> <本地分支名>:<远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin是在克隆仓库时Git创建的远程中央仓库别名

第一个master是本地分支名,第二个master是远程分支名

  • git push origin master
    // 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
  • 注意:在提交之前应该要先pull远程仓库,因为在这之前可能会有其它成员已经提交了他自己的修改,因此会报错。
    git push origin :master
    // 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master。
  • git push -u origin master
    // 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
  • git push origin
    // 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支。
  • git push
    // 如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名。
  • pull request

pull request是git flow里的一个流程,并不是git操作,目的在于让项目组内成员知道你已经完成某模块的开发,将要合并分支了,让大家进行code review。
pull request通过则将开发完成的分支合并到稳定版本的master分支中。
合并操作分为以下几个部分:

  1. git checkout master
  2. git pull
    (https://www.yiibai.com/git/git_pull.html )
  3. git pull origin my-feature
  4. git push
  • git pull

git pull = git fetch + git merge

  • pull 和 fetch的区别

不要用git pull,用git fetch和git merge代替它

  • 分支(branch)管理:
    (参考:https://www.cnblogs.com/TonyYPZhang/p/6219265.html
    PS: 此篇博文有个地方错误了,在分支合并的那个地方,应该是master指向的c2快照,而不是c3快照(指向c3的是iss53功能分支))
  • git branch branch0
    // 创建一个名叫branch0的新分支
  • git checkout branch0
    // 切换到branche0分支
  • git merge branch0
    // 合并branche0到master分支
  • git三路合并(three-way merge):
    合并的内容分别来之三个地方:Git 采用三路合并( three-way merge ) 方式进行合并,创建了一个 commit ( c6 ),用于包含合并后的结果。三路合并方式,是指通过两个分支的最新提交( c4 和 c5 ),以及他们的共同祖先 c2,来进行分支合并。c6 是一个合并提交记录,特别之处是有两个祖先。
    如下图:
    在这里插入图片描述
  • git branch
    // 查看本地分支,前面带有“*”的分支是当前的分支。
  • git branch -al
    //该命令列出本地和服务器上的所有分支
  • git branch -d branch0
    // 删除本地分支, 不能删除当前checkout 的分支,如果是-D的话就是强制删除。
  • git remote add origin https://github.com/Leonidas-Li/GameOfLife.git
    //添加关联的远程仓库到本地
  • git push -u origin master
    //master是以
  • git remote
    //远程仓库的名称一般默认为origin(也可以设置为其它名称)
  • git remote -v
    //查看关联的远程仓库的详细信息
  • git remote remove origin(远程仓库的名字)
    //删除远程仓库关联
  • rm -rf .git //删除git仓库
  • git rebase用于将多个commit合并为一个或多个commit,使commit历史看起来更加清爽
    - 使用方式
    git rebase -i HEAD~ [n] (其中n指的是从当前commit往后要合并的总commit的个数)
    然后git会显示出每条commit,并在每条commit前加上"pick"的字样,然后我们可以将想合并的commit的"pick"改为"s"就可以将这几个commit合并为一个commit了
    - 实践
    - git rebase -i HEAD~5
    pick “commit5”
    s “commit4”
    s “commit3”
    pick “commit2”
    s “commit1”
    s “commit0”
  • 其它常用操作
  • git log
    // 查看已经提交的日志,使用Ctrl+C退出log查看页面
  • git diff --cached
    // 查看此次提交的修改
  • git log -p <要对比的文件>
    // 查看某个文件与上次提交的不同之处
  • git cheery - v
    // 查看未push的commit历史(查看commit区)
    git reset --hard <commit_id>
    // 前面3个单词不需改变,将<commit_id>改成对应的commit_id的值

1、git冲突的场景
情景一:多个分支代码合并到一个分支时;
情景二:多个分支向同一个远端分支推送代码时;
实际上,push操作即是将本地代码merge到远端库分支上。

关于push和pull其实就分别是用本地分支合并到远程分支 和 将远程分支合并到本地分支

所以这两个过程中也可能存在冲突。

git的合并中产生冲突的具体情况:
  <1>两个分支中修改了同一个文件(不管什么地方)
  <2>两个分支中修改了同一个文件的名称
两个分支中分别修改了不同文件中的部分,不会产生冲突,可以直接将两部分合并。
2、冲突解决方法

情景一:在当前分支上,直接修改冲突代码—>add—>commit。
情景二:在本地当前分支上,修改冲突代码—>add—>commit—>push
注:借用vim或者IDE或者直接找到冲突文件,修改。

  • git reset – soft HEAD^
    // 只撤回commit,任然保留写的代码
    // HEAD^的意思是上一个版本,也可以写成HEAD~1
    如果你进行了2次commit,想都撤回,可以使用HEAD~2
  • git reset --mixed HEAD^
    // 不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
    这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
  • git reset --hard HEAD^
    // 删除工作空间改动代码,撤销commit,撤销git add .
    注意完成这个操作后,就恢复到了上一次的commit状态。
  • git commit --amend
    ,如果commit注释写错了,只是想改一下注释,此时会进入默认vim编辑器,修改注释完毕后保存就好了。
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值