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 |
|
#352 在 Cargo 插件 中
每月 28 次下载
42KB
848 行
cargo-git
一个有观点的辅助命令,用于与 cargo 一起使用 git。这并不取代 git 命令,但应与之结合使用。
此程序处于测试阶段,请谨慎使用!如果您丢失任何数据,作者将不承担责任!此程序分发时希望对您有所帮助,但没有任何保证。
用法
-
开始一个新的分支。
通常您想先抓取,然后在 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
-
推送分支
通常您希望将远程分支与本地分支同名进行推送。为此,您将使用 Git 执行以下操作
git push # if it fails: git push --set-upstream origin new-branch
使用 cargo-git,只需要一个命令,因为它将自动设置上游,如果尚未设置
# alias cg="cargo git" cg push
-
更新分支
通常您想将本地分支更新为 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
会执行的操作。) -
删除分支
通常,当您完成工作时,您想本地和远程删除分支。在 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.lockgitcheckout[params] --(git diff --name-only| grep -vCargo.lock)
-
cargogit squash[<其他-提交>]
gitreset --soft <其他提交|分叉分支>
此命令通过将当前分支重置到父分支来允许压缩当前分支。此命令最终应跟随
git commit
。如果当前分支与父分支不最新,此命令将失败。
-
cargogit check[<修订版本>]
检查HEAD是否可以无冲突地合并
如果没有提供
修订版本
参数,则使用父分支。如果父分支不存在,则使用origin/main。
依赖关系
~16MB
~365K SLoC