git学习

基本命令

参考:https://nulab.com/zh-cn/learn/software-development/git-tutorial/git-commands-settings/remote-git-commands/

  • git config --global user.name “”
  • git config --global user.email “”
  • git init
    • 初始化或add,commit一个文件后会自动创建master分支
  • git clone xxx
  • git add sample.txt
  • git commit -m “mark”
  • git status
  • git log --graph --oneline // 以图形显示,压缩输出信息
  • git remote add origin https://xxx // 创建一个名为origin的远程仓库
  • git remote 列出所有远程仓库分支
  • git push -u origin master // 将本地仓库中的更改推送到远程仓库的master分支,-u表示下次就不用指明推送的分支,直接git push即可
  • git pull origin master

使用标签

  • git tag tag1 // 创建一个名为tag1的标签
  • git tag // 查看所有标签
  • git log --decorate // 查看带有标签信息的历史日志
  • 注释
    • git tag -am “mark” tag2 // 给标签添加注释,使用-a则在vim中编辑注释信息
    • git tag -n // 列出所有标签及其注释
  • git tag -d tag2 // 删除标签

管理历史记录

  • 修改提交(将修改最近一次提交的文件内容,提交的注释,但是git log显示的时间不变)

    • 修改文件
    • git add sample.txt
    • git commit --amend // 将打开文本编辑器,写注释
  • 撤销提交

    • git revert HEAD // 撤销最新HEAD提交,git log中能看到撤销的历史记录
  • 移除之前的提交

    • git reset --hard HEAD~~ // 移除了HEAD的前两次提交,git log中前两次提交记录消失了
    • git reset --hard ORIG_HEAD // ORIG_HEAD指向重置之前的原始提交,可以使用该命令来恢复重置
  • 将提交复制到不同分支

    • git checkout master // 切换到需要其他副本的分支
    • git cherry-pick 99daed2 // 在当前分支中使用该命令来复制其他分支中的副本,参数为副本的哈希值,可以使用git log命令查看
    • git add sample.txt // 如果发生了冲突,解决之后提交即可
    • git commit // 使用git log查看,历史记录中的时间与之前的分支一样,哈希值和注释不一样
  • 组合提交 (将后一个提交合并到前一个提交,文件内容不变,只需要修改一下注释)

    • git rebase -i HEAD~~ // 进入文本编辑器,处于 rebase-interactive模式,将此时前两个应该都为pick,将第二个pick修改为squash,表示提交第二个但是是与前一个合并的方式,之后编辑组合提交的注释
    • 使用git log查看,时间为前一个的,注释为修改之后的
  • 修改历史中的某个提交(可以改变历史中某个文件的内容,本次提交的注释,和他后一次提交的注释)

    • git rebase -i HEAD~~ // 进入rebase-interactive模式,将要修改的那次提交pick修改为edit,这里为能看到前两次的提交,将第一个pick修改为edit
    • 此时会回归到之前那次提交,可以修改文件内容
      • git add sample.txt
      • git commit --amend // 之后可以修改这次提交后的注释
      • git rebase --continue
    • 若发生了冲突,解决冲突后添加,继续合并即可
      • git add sample.txt // 解决冲突后不需要再次提交
      • git rebase --continue
  • 组合某个分支中的提交,并合并入主分支中(git log查看,主分支中多了一次合并的历史记录,其他分支中的日志不变)

    • git checkout master
    • git merge --squash issue1
    • 解决冲突
    • git add sample.txt
    • git commit // 在这里填写这次合并的注释

拉取请求

  • 不是git的功能,大多是git托管服务都提供拉取请求。开发人员代码写好后发起拉取请求,审查者查看代码有没有问题,如果有问题则让开发人员修改,没问题则合并分支。

  • Example of a pull request workflow

  • 步骤

    • 在代码仓库中切换到相应的分支,新建一个拉取请求
      • 设置要合并的目标分支
      • 设置当前分支
      • 设置审查者
    • 审查者在代码左边可以进行评论
    • 开发者看到有关代码错误的评论后,修改代码重新上传
    • 审查者觉得没问题后通过审查,最后执行合并到分支即可
  • 合并分支时可能会有冲突(这样不是拉取了一次代码然后重新修改了一遍吗???)

    • git pull origin master // 在本地拉取主分支
    • 解决冲突 // 使用希望的代码
    • git add sort.js
    • git commit -m “”
    • git push origin add-sort-func // 推送回去即可

分支

  • git branch issue1 // 创建分支
  • git branch -m main // 将当前分支重命名
  • git branch // 列出所有本地分支,*表示当前所在分支
    • git branch -r // 列出所有远程分支
    • git branch -a // 列出本地和远程所有分支
  • git checkout issue1 // 切换分支
  • git checkout -b issue1 // 创建分支并切换分支
  • 合并分支的两种方式
    • 直接合并
      • git merge issue1 // 当前分支为master,将当前分支与issue1合并,合并之后解决冲突即可
      • git add myfile.txt
      • git commit -m “mark”
    • 变基
      • git rebase master // 当前分支为issue2,将当前分支变基到master,变基之后解决冲突
      • git add my file.txt
      • git rebase --continue // 解决冲突后恢复变基
      • git checkout master // 切换回master分支
      • git merge issue2 // 进行快速合并
  • git branch -d issue1 // 删除分支
  • git reset --hard HEAD~ // 取消之前的合并

git flow模型

参考:http://wed.xjx100.cn/news/192394.html?action=onClick

理论

  • git flow 是一种关于分支管理的模型,它可以使小组之间的开发相互隔离,使产品在不同的阶段也相互隔离,避免开发混乱和效率低下。

  • 该模型的主分支有master,develop,辅助分支有hotfix,release,feature。master分支为生产版本,develop分支为开发版本,hotfix分支用于修复master中的bug,release分支作为develop和master之间的缓冲区,可以进行测试之类的工作,feature分支为功能分支,一个功能完成好后提交给develop分支。

实践

  • 想象一个场景:远程有一个代码仓库,仓库中有master分支和develop分支,现在有两个代码开发人员同时准备进行开发。
  1. 先创建这个仓库和develop分支
# 创建仓库,并连接远程仓库
mkdir git-learning2
cd git-learning2
git init 
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/xxx/xxx.git
git push -u origin "master"
# 创建develop分支
git branch develop
git push -u origin develop
  1. 新的开发人员从远程clone代码仓库并追踪develop分支
git clone https://gitee.com/xxx/xxx.git
git checkout -b develop origin/develop
  1. 开发新功能时从develop分支创建新的feature分支
git checkout -b feature2 develop
git add xxx.txt
git commit
  1. 新功能开发完成后将feature分支合并到develop分支并推送到远程仓库
git pull origin develop # 先从远程仓库中拉取,更新develop分支
git checkout develop
git push
git branch -d feature1
  1. 从develop分支创建release分支准备产品发布
git checkout -b release-0.1 develop # 之后在release分支进行测试等工作
  1. 发布,即将发布分支合并到master分支
git checkout master
git merge release-0.1
git push
git checkout develop # 记得更新一下develop分支
git merge release-0.1 
git push
git branch -d release-0.1
  1. 对master打上标签
git tag -a 0.1 -m "initial public release" master
git push --tags
  1. 用户发现bug,从master创建hotfix分支修复bug,修复好后重新合并到master分支和develop分支
git checkout -b hotfix master
git checkout master # 修复好bug之后进行合并
git merge hotfix
git push
git checkout develop # 别忘了更新一下develop分支
git merge hotfix
git push
git branch -d hotfix

.gitignore文件

  • 大致可以理解为用正则表达式在里面写要忽略哪些文件,这些被忽略的文件不会被git上传到远程代码仓库

https://blog.csdn.net/nyist_zxp/article/details/119887324

https://blog.csdn.net/weixin_44860226/article/details/129668726

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值