Lệnh Git không thể giải quyết vấn đề này. Tôi đã viết kịch bản này, nó có thể giúp.
Tập lệnh đầu tiên tính cơ sở hợp nhất của cả hai nhánh branch1 và branch2. Sau đó, nó làm cho hai danh sách từ cơ sở hợp nhất thành phần đầu của nhánh1 và nhánh2 tương ứng. Sau đó, nó tạo ra một bảng băm của cam kết trên branch2 với md5sum của thư cam kết. Sau đó, nó đi qua danh sách cam kết của branch1 và kiểm tra xem có tồn tại trong branch2 hashtable hay không?
Trong trường hợp trên branch1 là ổn định và branch2 là bậc thầy
#!/bin/bash
## Usage: ./missing_cherrypicks.sh branch1 branch2
## This script will find commits in branch1 missing in branch2
## Final list of missing commit will be in file missing_commits_branch1_branch2.csv
branch1=$1
branch2=$2
# Calculate mergebase of branch1 and branch2
mb=`git merge-base origin/$1 origin/$2`
rm -rf missing_commits_${branch1}_${branch2}.csv
echo "COMMIT,AUTHOR,MESSAGE,FILESLIST" >> missing_commits_${branch1}_${branch2}.csv
# Get commit list on both branches from merge-base
declare -a commitlist1=`git rev-list $mb..origin/$1`
declare -a commitlist2=`git rev-list $mb..origin/$2`
## Make HashKey for branch2
declare -A CommitHash
for com2 in ${commitlist2[@]}
do
message2=`git log --pretty=oneline $com2 | head -1| sed "s/${com2} //" | sed 's/ *$//' | cut -c1-35`
hashkey=`echo $message2 |md5sum |xargs | awk '{print $1}'`
CommitHash[${hashkey}]=$com2
done
# Find commits of commitlist1 and check if they are in commitlist2
for com1 in ${commitlist1[@]}
do
message1=`git log --pretty=oneline $com1 | head -1| sed "s/${com1} //"| sed 's/ *$//'| cut -c1-35`
hashkey1=`echo $message1 |md5sum |xargs | awk '{print $1}'`
if [[ -z ${CommitHash[${hashkey1}]} ]]
then
echo "------$com1-----------"
author=$(git show $com1 |grep ^Author:|awk -F":" '{print $2}')
fileslist=`git diff-tree --no-commit-id --name-only -r $com1`
fl=""
for file in ${fileslist[@]}
do
fl=${fl}":"$file
done
echo "------$author-------"
echo "$com1,$author,$message1,$fl" >> missing_commits_${branch1}_${branch2}.csv
fi
done
Nguồn
2017-10-17 05:03:07
Tôi muốn nó có tùy chọn --no-sáp nhập mà git log có. – angularsen
@anjdreas Có vẻ như anh đào không liệt kê các cam kết hợp nhất, với git 2.13.2. – fossilet