zoukankan      html  css  js  c++  java
  • Git相关命令及用法

    add commit push

    git add *
    git commit -m ""
    git push -u origin branch

    在删除某一些文件时, 应使用git add .. 否则, 会出现Changes not staged for commit: ...

    添加子模块

    子模块的操作必须非常小心, 因为其中有很多坑.

    第一次添加子模块

    git submodule add git://github.com/chneukirchen/rack.git rack

    删除某个子模块

    git rm --cached pathOfSubmodule

    然后删除_config.yml以及.git/config文件中相关记录

    更改子模块后提交对子模块的修改

    进入子模块所在目录

    git add *
    git commit -m ""
    git push

    主项目提交

    我们可以直接像正常git文件一样的流程进行提交, 但是如果我们忘记提交子模块的变动, 而新的项目和子模块的变动又相关. 那么其他人从远程仓库中clone的文件可能并不能正确运行(缺少必要的子模块变动).

    所有推荐使用以下两种方法:
    1. git push --recurse-submodules=check. 若有子模块的变动没有推送, 那么该push会失败.
    2. git push --recurse-submodules=on-demand. 若有子模块的变动没有推送, 那么它会先推送子模块的变动, 然后再推送主项目.

    子模块的更新

    其他人如果对子模块进行了修改, 在git pull之后, 再调用以下git submodule update更新子模块.

    调用git submodule update也更新子模块的相关内容, 但是会将子模块留在一个称作 detached HEAD的状态. 这意味着没有本地工作分支(例如 “master”)跟踪改动。 所以你做的任何改动都不会被跟踪。即使你使用了commit提交了一些变动, 在你下一次使用git submodule update时, 这些变动会全部丢失.

    所以需要进入每一个你希望对其进行修改的子模块,git checkout branchName检出一个分支. 从远程仓库中更新本地文件时, 使用git submodule update --remote --merge, 也可以使用--rebase.

    如果忘记了--rebase或者--merge, git会将子模块更新为远程仓库上的状态, 而且该项目将再一次进入 detached HEAD 的状态. 解决方法:

    1. 检出包含之前本地更改的分支
    2. 然后手动的merge或者rebase任何一个远程分支即可.

    即使没有提交子模块的更改也某有问题, 此时git只会抓取更改, 而不会覆盖本地内容.

    克隆一个带子模块的项目

    克隆一个包含子模块的项目.git clone下来之后, 该子模块并不会被clone下来.需要调用以下两个命令:
    1. git submodule init来下载本地所需的子模块配置文件文件
    2. git submodule update来下载主项目中列出的合适的子模块提交

    也可以使用git clone --recursivegit clone --recursive https://github.com/...自动地初始化并更新仓库中的每一个子模块.

  • 相关阅读:
    java Future模式的使用
    Objects源码解析
    VUE优秀的组件库总结
    数据库的一致性读,赃读,多线程与赃读,ACID,UNDO
    线程基础,多线程架构,高并发,线程安全基础知识
    程序员必备的开发利器
    spring security 实现登录验证码及记住我
    springboot 集成 spring security 自定义登录
    ELK整合SpringBoot日志收集
    ElasticSearch整合SpringBoot的API操作
  • 原文地址:https://www.cnblogs.com/fei-hsueh/p/6106281.html
Copyright © 2011-2022 走看看