【发布时间】:2015-02-26 06:33:23
【问题描述】:
出于代码审查目的,我想
- cherry pick 特定的提交
- 与他们一起创建一个新分支并
- 将该分支推送到远程
以便我可以将分支网址提供给同行进行审核。
我想创建一个 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
但是卡在几个地方。
- 我想验证 trackingID 格式。应该是
AGW-<somenumber> -
看起来樱桃精选有合并问题。
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.
我采摘樱桃的方式有误吗?另外,请提出任何更改以使此脚本更健壮。
【问题讨论】:
-
看起来您可能会按照与最初提交的顺序相反的顺序进行挑选。请记住,
git log将最新的提交放在其输出的顶部。此外,还有一个名为git review的工具用于与 Gerrit 交互,因此您可能需要选择其他名称以避免混淆。 -
我个人建议您使用
git rev-list而不是git log --pretty=%H。它接受与git log相同的选项,但直接打印提交的 SHA1。 -
@Novelocrat 看起来问题不仅在于选择错误的顺序。我做了一些改变。我将我的更改推送给大师。现在我正在从 master 创建一个分支,并尝试应用一些具有代码更改的提交!如何解决这个问题?对我来说,这个分支的唯一目的是审查。我们目前没有在我们的团队中关注分支,每个人都直接推送到 master。我未能说服他们使用分支。
-
@TechCrunch 你没能说服他们使用分支?那为什么还要费心使用git呢?这就像买了一把无绳螺丝刀,然后继续用肌肉力量拧螺丝。