本文旨在记录初学git版本控制的经验,因不常使用git,为防止忘记故写成笔记。

Git基本用法

git工作流

从下图中可以看到git pull命令与git fetch命令的不同。

bilibili@技术蛋老师 整理的图

git基础操作

  • git测试联通性:ssh -T git@github.com

  • 分支操作

    • git branch列出本地所有分支,参数-r列出远程分支,-a:list both remote-tracking and local branches
    • git branch <newBranch>只会创建新分支newBranch,不会自动切换到新分支。
    • 使用git checkout <branchName>切换到branchName分支上
    • git branch -d <branchName>删除某个分支。注意删除前自己决定要不要合并分支
    • git merge <branchName>合并某个分支到当前分支
  • 本地初始化、远程连接库

    • 本地使用git init初始化本地仓库。
    • 先使用git链接到远程仓库,用法为git remote add <remoteRepoAvatar> <url:ssh> ,此处remoteRepoAvatar指的是任一字符串,用于表示这个远程仓库(可以与云端仓库名字不同)。之后可以使用git remote -v检查项目中已有的远程仓库列表(该命令会显示远程仓库的名称和URL,如不加-v,则显示所有的AvatarName)
  • 拉取和推送代码

    • 一般的,本地更新完代码后,需要执行git add .git commit -m "updateLogs"更新到本地仓库。

    • 要从新的远程仓库拉取最新的代码,可以使用以下命令:git pull <remoteRepoAvatar> <分支名称>。将 <分支名称> 替换为你要拉取的分支名称,例如 master

    • 推送代码:git push命令用于从将本地的分支版本上传到远程并合并。命令格式如下:git push <远程主机名> <本地分支名>:<远程分支名>。如果本地分支名与远程分支名相同,则可以省略冒号,远程主机名即为自定义的remoteRepoAvatar

      这里总结了一份gitcheatsheet,方便用到的时候查询。

  • git日志:可以通过git log命令查看本地仓库的commit记录,按q键即可退出。

  • git忽略提交文件:使用touch .gitignore创建文件并写入要忽略上传的文件名,之后git status命令便不会追踪到要忽略的文件。

  • 如遇到git拉取失败,可参考此博客寻找解决办法
    进一步的,我们可以参考此视频学习一个规范的git工作流应当如何搭建。

Git仓库合并error: refusing to merge unrelated histories

参考该博客solved

注:本地新建文件夹开始git remote add操作前,需先git init,否则报错fatal: not a git repository (or any of the parent directories): .git

环境:系统:Win10,git版本:2.42.0.windows.2

问题:本地有一个初始化的git仓库,GitHub端手动创建了private库(含README文件),想要把本地合并到云端出现错误。

解决方案及原因:git使用不当。一般需先创建云端库再clone下来后更新代码。若遇到代码先于仓库的情况,从远程库拉取代码并将当前分支同其合并,使用git pull <remoteRepoAvatar> master --allow-unrelated-histories,之后完成本地更新commit等操作后push到远端即可。

一个应用实例

之前自己的Github pages部署hexo主题为Matery,因为故障问题,近期改为了Butterfly。
面临需要将远程端代码重新更新的问题。

本地端hexo文件:先git init && git add . && git commit,之后git remote add origin 远端链接(ssh和https均可),再使用git branch检查本地和远端分支情况,使用git push x x --force强制替换远端,后使用npm install hexo-deployer-git --save安装deploy插件,再进行hexo d操作。deploy配置写在了config.yml中。