gpt4 book ai didi

Git cherry 选择那些包含关键字(跟踪 id)的提交

转载 作者:行者123 更新时间:2023-12-04 16:16:28 24 4
gpt4 key购买 nike

出于代码审查的目的,我想

  1. 挑选特定的提交
  2. 和他们一起创建一个新的分支
  3. 将该分支推送到远程

以便我可以将分支 url 提供给同行进行审查。

我想创建一个 shell 脚本并发出像这样的简单命令

git-review <trackingID>

输出如下

Branch <currentgitusername>_<trackingID> created and pushed to remote.

我编写了一个执行上述步骤的脚本。

#!/bin/bash

if [ -z $1 ]; then
echo "Rationale: Cherry pick all commits in master, matching the tracking ID and create a new branch.";
echo "";
echo "Usage: $0 traackingID";
echo "";
exit 1;
fi

#If $1 doesn't match a AGW-<number> pattern, thrown an error
#Best of luck if you did not add add tracking ID in commits.

user="$(id -u -n)" > /dev/null

echo "You are - $user"

branchname=$user"_"$1"_review"

echo "Creating branch - $branchname"

git checkout -b $branchname > /dev/null

git log master --pretty=%H --grep="$1" | while read rev
do
echo $rev
# git cherry-pick $rev > /dev/null
done

#git push &> /dev/null

echo "Created branch, cherry picked, pushed to remote. Now switching back to master. Bye."

git checkout master

但是卡在了几个地方。

  1. 我想验证 trackingID 格式。应该是AGW-<somenumber>
  2. 看起来 cherry-picks 有 merge 问题。

    myname@mymachine ~/myproj
    $ ../git-review.sh AGW-1234
    You are - myname
    Creating branch - myname_AGW-1234_review
    Switched to a new branch 'myname_AGW-1234_review'
    2dfafa89e10062e7cfccb1d7a947ebb848c40cc6
    The previous cherry-pick is now empty, possibly due to conflict resolution.
    If you wish to commit it anyway, use:

    git commit --allow-empty

    Otherwise, please use 'git reset'
    1e295000bc3d80880518c9cac5e34ef3b28fc29e
    error: Your local changes to the following files would be overwritten by merge:
    rest-service/src/main/java/package/HealthCheckDAOImpl.java
    Please, commit your changes or stash them before you can merge.

我是不是 cherry-pick 的方式不对?此外,请提出任何更改建议,以使该脚本更健壮。

最佳答案

正如@novelocrat 在评论中指出的那样,您在错误地 cherry-pick 。默认情况下,git log 会输出从最新提交到第一次提交的信息。为此,要么将 git log --oneline 的输出输入到 tac,要么使用 --reverse 标志:

git log --oneline | tac
git log --oneline --reverse

第二个选项显然是首选,因为它确保逐行输出,而第一个(使用 tac)需要一次性输入所有输入。


此外,由于您正在从 master 中创建一个新分支,因此当您执行 git checkout -b $branchname 时。

当你这样做时,当前分支的所有历史记录都是从中选择的。

所以你需要创建一个孤立的 git 分支,like mentioned here .

关于Git cherry 选择那些包含关键字(跟踪 id)的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28735942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com