#git-branch #git #git-workflow #git-commit #cargo #git-checkout #workflow

app cargo-git

一个有观点的辅助命令,用于与 cargo 一起使用 git。这并不取代 git 命令,但应与之结合使用。

9 个版本 (5 个重大更改)

0.7.0 2020年10月4日
0.6.0 2020年7月3日
0.5.1 2020年2月14日
0.4.0 2020年2月10日
0.1.0 2020年1月30日

#352Cargo 插件

每月 28 次下载

MIT 许可证

42KB
848

cargo-git

一个有观点的辅助命令,用于与 cargo 一起使用 git。这并不取代 git 命令,但应与之结合使用。

此程序处于测试阶段,请谨慎使用!如果您丢失任何数据,作者将不承担责任!此程序分发时希望对您有所帮助,但没有任何保证。

用法

  1. 开始一个新的分支。

    通常您想先抓取,然后在 main 上创建一个分支。为此,您将使用 Git 执行以下操作

    git checkout main
    git pull --ff-only
    git checkout -b new-branch
    

    使用 cargo-git,您可以从任何分支直接执行

    # alias cg="cargo git"
    cg fork new-branch
    

    此命令将

    • 确保没有未提交的更改(干净状态)
    • 从远程获取(更新)main
    • 创建一个新的分支 "new-branch",它将基于 origin/main

    注意:本地分支 main 不会更新。实际上,您甚至不需要本地分支 main。与 Git 精确等效的操作可能更像是这样的

    git fetch
    # <ensure manually no uncommitted changes are pending>
    git branch -f new-branch origin/main
    git checkout new-branch
    
  2. 推送分支

    通常您希望将远程分支与本地分支同名进行推送。为此,您将使用 Git 执行以下操作

    git push
    # if it fails:
    git push --set-upstream origin new-branch
    

    使用 cargo-git,只需要一个命令,因为它将自动设置上游,如果尚未设置

    # alias cg="cargo git"
    cg push
    
  3. 更新分支

    通常您想将本地分支更新为 origin/main。为此,您将使用 Git 执行以下操作

    git fetch
    git merge origin/main
    # then you will solve all the conflicts of all the commits in one commit,
    # no matter how many commits are conflicting
    

    使用 cargo-git,您将执行

    # alias cg="cargo git"
    cg update
    # either there is no conflict and you're done
    #
    # or: all the non-conflicting commits will be merged in a single merge
    # commit until the first conflicting commit is reached THEN the first
    # conflicting commit will be merged alone, leaving you in a merge state
    #
    # this will allow you to solve the first conflict separetaly in its own
    # merge commit
    #
    # repeat the command `cg update` until there is nothing more to merge
    

    注意:所有冲突的提交都将逐个合并,这将允许您完全理解冲突的原因并单独解决它们。(类似于 git rebase 会执行的操作。)

  4. 删除分支

    通常,当您完成工作时,您想本地和远程删除分支。在 Git 中,您将执行以下操作

    git branch -d new-branch
    git push origin :new-branch
    

    使用 cargo-git,您可以一次执行这两个操作

    # alias cg="cargo git"
    cg delete new-branch
    

可用命令列表

  • cargogit fork<new-branch> [<从-branch>]

    创建一个基于 (origin/main 默认) 的新分支并切换到它。同时创建一个初始化提交以跟踪分叉分支及其来源的提交。

  • cargogit delete<existing-branch>

    删除本地和其上游的现有分支。

  • cargogit merge<branch>

    仅使用合并提交将分支合并到当前分支(传统合并)。之后删除本地和远程分支。

    如果存在任何冲突,此命令将失败。(如果指定的分支与当前分支的更新不够及时。

  • cargogit update

    通过将父分支合并到当前分支来更新当前分支。

    此命令将基本分支缺少的提交合并到当前分支,并在遇到冲突前停止。

    如果要合并的第一个提交存在冲突,它将只合并此提交,允许用户解决并提交。

    可以(预期可以)重复此命令,直到当前分支没有缺少的提交。

    它通过取当前分支的Cargo.lock来忽略Cargo.lock冲突。

  • cargogit update --deps

    运行cargo update并仅提交Cargo.lock

  • cargogit push

    尝试将当前分支推送到其远程分支。如果远程分支不存在,则创建一个具有相同名称的分支并将其设置为本地分支。

  • cargogit add[params]

    git add 相同,但不通过Cargo.lock

  • cargogit diff[params]

    git diff 相同,但始终忽略Cargo.lock

  • cargogit commit[params]

    提交添加的文件,消息为WIP,并在描述中添加父分支。

  • cargogit checkout[params]

    git checkout 完全相同,但始终忽略Cargo.lock

    gitcheckout[params] --(git diff --name-only| grep -vCargo.lock)

  • cargogit squash[<其他-提交>]

    gitreset --soft <其他提交|分叉分支>

    此命令通过将当前分支重置到父分支来允许压缩当前分支。此命令最终应跟随 git commit

    如果当前分支与父分支不最新,此命令将失败。

  • cargogit check[<修订版本>]

    检查HEAD是否可以无冲突地合并

    如果没有提供 修订版本 参数,则使用父分支。如果父分支不存在,则使用origin/main。

依赖关系

~16MB
~365K SLoC