Điều này khó làm tốt. Trong git, một nhánh chỉ là một con trỏ tự động tiến tới một cam kết, và một cam kết có thể có bất kỳ số lượng tên chi nhánh nào trên nó. Hãy xem xét trường hợp này:
your master: y1---y2---y3
/
master: a---b---c---d---e
\
feature: f1---f2---f3---f4
Bạn đã đăng ký ra chi nhánh "master" tại c
, và cam kết y1
, y2
và y3
. Do đó, lịch sử của bạn trông giống như a b c y1 y2 y3
. Trong khi đó chính đã nâng cấp lên d
và e
, nhưng ai đó đã tạo chi nhánh tính năng và cam kết f1
thông qua f4
dựa trên c
. Git không có cách nào để xác định rằng chi nhánh của bạn đến từ master
thay vì feature
, vì vậy tốt nhất bạn sẽ có một sự lựa chọn của các chi nhánh để hợp nhất.
Bạn có tự động thực hiện điều này không, bạn phải áp dụng phương pháp heuristic về việc chọn nhánh ngắn nhất, hoặc nhánh dài nhất, hoặc nhánh có số tiền ít nhất/ít nhất, hoặc cái khác như thế. Đương nhiên, vì có rất nhiều lựa chọn, nó không thực sự là một lựa chọn tốt cho một hàm dựng sẵn git
. Tuy nhiên, sử dụng các chức năng "đường ống dẫn nước" của git, bạn có thể viết các chức năng của riêng mình:
#!/bin/bash
# Tries to determine a good merge base from among all local branches.
# Here used, a "good" merge base is the one sharing the most recent commit
# on this branch. This function will exit 1 if no branch is found,
# or exit 2 in a tie.
#
# Untested - use at your own risk.
MAX_SEARCH=20 # only search the last 20 commits on this branch
FOUND=0
LAST_BRANCH=
# iterate through the commits, most recent first
for COMMIT in $(git rev-list --max-count=$MAX_SEARCH HEAD); do
# check every local branch
for BRANCH in $(git for-each-ref --format="%(refname)" refs/heads); do
# look for the commit in that branch's history
if (git rev-list $BRANCH | fgrep -q COMMIT); then
echo $BRANCH
FOUND=$((FOUND + 1))
LAST_BRANCH="$BRANCH"
fi
done
if [ $FOUND -gt 1 ]; then
# more than one choice; exit
exit 2
elif [ $FOUND -eq 1 ]; then
git merge $LAST_BRANCH
exit 0
fi
done
exit 1 # could not find a parent
Nguồn
2012-11-01 17:01:18
có thể trùng lặp của [Tìm nhánh gốc của nhánh] (http: // stackoverflow.com/questions/3161204/find-the-parent-branch-of-a-branch) – pisaruk