Bagaimanakah Git menarik komit tertentu cawangan tertentu?
大家讲道理
大家讲道理 2017-05-02 09:32:03
0
5
999

Kini terdapat dua cawangan iaitu cawangan A dan cawangan B. Terdapat beberapa penyerahan pada setiap cawangan; b5, terdapat lima penyerahan kesemuanya;

Nota: Nilai cincangan 10 penyerahan di atas adalah berbeza.

Maafkan saya: Bagaimanakah saya boleh menarik nod komit b2, b3 dan b4 cawangan B ke cawangan A sahaja?

Memerlukan bahawa selepas menarik ke cawangan A, maklumat komit pada cawangan B asal mesti dikekalkan.

Sila patahkan gaya ( ̄▽  ̄)╭ ~

Kaedah

yang disebut oleh @junnplus adalah betul, dan saya juga boleh melakukannya tetapi adakah jawapan yang lebih baik?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(5)
迷茫

Pada cawangan A, laksanakan

git cherry-pick <commit_id>
黄舟

Jika automasi tidak diperlukan, cara yang paling mudah adalah seperti berikut:

$ git rebase -i HEAD $name_of_branch_b

Editor akan memaparkan lima baris dari b1 hingga b5, memadamkan dua baris b1 dan b5, simpan dan keluar.

过去多啦不再A梦

Mungkin sukar untuk mendapatkan jawapan yang lebih baik, bukan? Menurut prinsip git-flow, dev-feature secara amnya tidak menggabungkan beberapa penyerahan tengah menjadi dev Mungkin keperluan penyoal adalah berdasarkan strategi pengurusan versi yang tidak munasabah Atau yang sangat istimewa. adegan.

刘奇

Sepatutnya hanya chrry pick

淡淡烟草味

Semua orang betul, tidak ada cara yang baik; tetapi saya masih mempunyai keperluan istimewa ini dalam proses kerja sebenar saya.
Malam ini saya menggunakan kemahiran pengaturcaraan shell yang lemah untuk menulis program yang boleh mencapai keperluan saya, dan ia boleh dicapai melalui cherry-pick.

Program kecil ini boleh memenuhi keperluan saya selagi ia dilaksanakan seperti berikut:

# b5省略时取到最新的节点
cherry-picks B b2 b5

Seterusnya ialah debut saya: pautan github

#!/usr/bin/env bash

# 初始化
targetBranch=
start=
end= #如果没有这读到最新
currentBranch=$(git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3)

# 切换到目标分支
git checkout $targetBranch

echo start proccess commit message...

rawList=$(git log | grep '^commit' | sed '1,$s/commit//')

startIndex=$(echo "$rawList" | sed -n "/$start/=" )

# 如果end不为空,取得结束的偏移量,否则默认为1,也就是最新
if [ -n "$end" ]; then
    endIndex=$(echo "$rawList" | sed -n "/$end/=")
else
    endIndex=1
fi

# 取得需要cherry-pick的区间
list=$(echo "$rawList" | head -$startIndex | tail +$endIndex)

## 倒序
list=$(echo "$list" |sed '1!G;h;$!d')


echo '待cherry-pick的有:'
echo list:
echo "$list"
echo

# 切换回当前分支
git checkout $currentBranch

for i in "$list"; do
    git cherry-pick $i
done

echo '完成'
exit 0
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan