Jawaban:
git branch --merged master
daftar cabang digabung menjadi master
git branch --merged
daftar cabang yang digabung ke dalam HEAD (yaitu ujung cabang saat ini)
git branch --no-merged
daftar cabang yang belum digabung
Secara default ini hanya berlaku untuk cabang lokal. The -a
bendera akan menunjukkan kedua cabang lokal dan remote, dan -r
bendera menunjukkan hanya cabang terpencil.
git branch -a --merged/no-merged
itu juga berfungsi, tanpa membuat cabang pelacakan lokal dalam proses.
git branch -r --merged/--no-merged
untuk hanya menemukan cabang yang jauh.
--merged/--no-merged
membutuhkan argumen komit opsional setelahnya. Setidaknya dalam versi git saya (1.9.1), menambahkan -a
atau -r
menandai setelah itu memberi saya kesalahan fatal. Tambahkan -a
atau -r
sebelumnya --(no-)merged
.
Anda dapat menggunakan git merge-base
perintah untuk menemukan komit umum terbaru antara dua cabang. Jika komit itu sama dengan kepala cabang Anda, maka cabang telah sepenuhnya digabung.
Perhatikan bahwa
git branch -d
lakukan hal semacam ini karena akan menolak untuk menghapus cabang yang belum sepenuhnya digabung.
git branch -d
akan menolak untuk menghapus cabang yang belum digabungkan ke cabang saat ini. Tidak menghapus cabang saat ini .
Ada solusi antarmuka grafis juga. Ketik saja
gitk --all
Jendela aplikasi baru akan meminta dengan representasi grafis dari seluruh repo Anda, di mana sangat mudah untuk menyadari jika cabang sudah digabung atau tidak
git
klien. Di Ubuntu apt-get install gitk
,.
brew install git-gui
, untuk mendapatkan gitk
di commandline.
Saya menggunakan fungsi bash berikut seperti: git-is-merged develop feature/new-feature
git-is-merged () {
merge_destination_branch=$1
merge_source_branch=$2
merge_base=$(git merge-base $merge_destination_branch $merge_source_branch)
merge_source_current_commit=$(git rev-parse $merge_source_branch)
if [[ $merge_base = $merge_source_current_commit ]]
then
echo $merge_source_branch is merged into $merge_destination_branch
return 0
else
echo $merge_source_branch is not merged into $merge_destination_branch
return 1
fi
}
Gunakan git merge-base <commit> <commit>
.
Perintah ini menemukan leluhur bersama terbaik di antara dua commit. Dan jika nenek moyang yang sama identik dengan komit terakhir dari "cabang", maka kita dapat dengan aman berasumsi bahwa "cabang" telah digabung menjadi master.
Inilah langkah-langkahnya
git merge-base <commit-hash-step1> <commit-hash-step2>
. Info lebih lanjut tentang git merge-base https://git-scm.com/docs/git-merge-base .
master
digabungkan branch
, dan kemudian 4 komitmen ditambahkan branch
.
git log -1 $(git merge-base base-branch feature-branch)
dan jika Anda melihat feature-branch
di output, maka Anda tahu mereka digabungkan?
Pada topik membersihkan cabang-cabang terpencil
git branch -r | xargs -t -n 1 git branch -r --contains
Ini mencantumkan setiap cabang jarak jauh yang diikuti oleh cabang jarak jauh mana SHA terbaru mereka berada.
Ini berguna untuk membedakan cabang jarak jauh mana yang telah digabung tetapi tidak dihapus, dan mana yang belum digabung dan karenanya membusuk.
Jika Anda menggunakan 'tig' (seperti gitk tapi berbasis terminal) maka Anda bisa
tig origin/feature/someones-decaying-feature
untuk melihat riwayat komit cabang tanpa harus melakukan checkout
Untuk memverifikasi cabang mana yang digabungkan menjadi master, Anda harus menggunakan perintah ini:
git branch <flag[-r/-a/none]> --merged master
daftar semua cabang digabung menjadi master.git branch <flag[-r/-a/none]> --merged master | wc -l
hitung jumlah semua cabang yang digabung menjadi master.Bendera:
-a
flag - (semua) yang menunjukkan cabang jarak jauh dan lokal-r
flag - (jarak jauh) hanya menampilkan cabang jarak jauh<emptyFlag>
- menunjukkan lokal cabangmisalnya: git branch -r --merged master
akan menunjukkan semua repositori jarak jauh yang digabung menjadi master.
Berikut adalah teknik saya ketika saya perlu mencari tahu apakah cabang telah digabung, bahkan jika mungkin telah diubah kembali agar tetap up to date dengan cabang utama kami, yang merupakan skenario umum untuk cabang fitur.
Tidak satu pun dari pendekatan ini adalah bukti bodoh, tetapi saya telah menemukan mereka berguna berkali-kali.
Menggunakan alat visual seperti gitk atau TortoiseGit, atau cukup git log dengan --all, lihat sejarah untuk melihat semua penggabungan ke cabang utama. Anda harus dapat melihat apakah cabang fitur khusus ini telah digabung atau tidak.
Jika Anda memiliki kebiasaan yang baik untuk selalu menghapus cabang lokal dan remote ketika Anda bergabung dalam cabang fitur, maka Anda dapat dengan mudah memperbarui dan memangkas remote di komputer lain dan cabang fitur akan hilang.
Untuk membantu mengingat hal ini, saya sudah menggunakan ekstensi git flow (edisi AVH) untuk membuat dan menggabungkan cabang-cabang fitur saya secara lokal, jadi saya menambahkan kait aliran git berikut untuk bertanya apakah saya juga ingin menghapus otomatis cabang jarak jauh.
Contoh membuat / menyelesaikan cabang fitur
554 Andreas:MyRepo(develop)$ git flow start tmp
Switched to a new branch 'feature/tmp'
Summary of actions:
- A new branch 'feature/tmp' was created, based on 'develop'
- You are now on branch 'feature/tmp'
Now, start committing on your feature. When done, use:
git flow feature finish tmp
555 Andreas:MyRepo(feature/tmp)$ git flow finish
Switched to branch 'develop'
Your branch is up-to-date with 'if/develop'.
Already up-to-date.
[post-flow-feature-finish] Delete remote branch? (Y/n)
Deleting remote branch: origin/feature/tmp.
Deleted branch feature/tmp (was 02a3356).
Summary of actions:
- The feature branch 'feature/tmp' was merged into 'develop'
- Feature branch 'feature/tmp' has been locally deleted
- You are now on branch 'develop'
556 Andreas:ScDesktop (develop)$
.git / hooks / post-flow-fitur-selesai
NAME=$1
ORIGIN=$2
BRANCH=$3
# Delete remote branch
# Allows us to read user input below, assigns stdin to keyboard
exec < /dev/tty
while true; do
read -p "[post-flow-feature-finish] Delete remote branch? (Y/n) " yn
if [ "$yn" = "" ]; then
yn='Y'
fi
case $yn in
[Yy] )
echo -e "\e[31mDeleting remote branch: $2/$3.\e[0m" || exit "$?"
git push $2 :$3;
break;;
[Nn] )
echo -e "\e[32mKeeping remote branch.\e[0m" || exit "$?"
break;;
* ) echo "Please answer y or n for yes or no.";;
esac
done
# Stop reading user input (close STDIN)
exec <&-
exit 0
Jika Anda tidak selalu menghapus cabang jarak jauh, Anda masih bisa mencari komit yang sama untuk menentukan apakah cabang telah digabung atau belum. Perangkap di sini adalah jika cabang jarak jauh telah direstrukturisasi menjadi yang tidak dapat dikenali, seperti squashing commit atau mengubah pesan komit.
Contoh perintah pada cabang utama:
gru
gls origin/feature/foo
glf "my message"
Di bash saya. Konfigurasi profil
alias gru='git remote update -p'
alias glf=findCommitByMessage
findCommitByMessage() {
git log -i --grep="$1"
}
git log --all --color --graph --decorate --topo-order --date=relative --abbrev-commit --pretty=format:"%C(green)%h %C(red bold)[%<(14)%ad] %Creset%s%Cred%d%C(blue) [%an]"
git log
Anda dapat menambahkan --merges
untuk hanya menampilkan komit gabungan. stackoverflow.com/a/25986615/134761
Berikut ini adalah satu-liner kecil yang akan memberi tahu Anda jika cabang Anda saat ini menggabungkan atau kehabisan data dari cabang asal / master jarak jauh:
$ git fetch && git branch -r --merged | grep -q origin/master && echo Incorporates origin/master || echo Out of date from origin/master
Saya menemukan pertanyaan ini ketika mengerjakan cabang fitur dan sering ingin memastikan bahwa saya memiliki karya terbaru yang dimasukkan ke dalam cabang kerja saya sendiri yang terpisah.
Untuk menggeneralisasi tes ini, saya telah menambahkan alias berikut ke ~ / .gitconfig saya:
[alias]
current = !git branch -r --merged | grep -q $1 && echo Incorporates $1 || echo Out of date from $1 && :
Maka saya bisa menelepon:
$ git current origin/master
untuk memeriksa apakah saya terkini.
git branch --merged
dan kemudian menghapus cabang-cabang lokal dan jauh.