Pertanyaan Bagaimana saya bisa tahu di git jika cabang telah digabung menjadi master?


Saya memiliki repositori git dengan banyak cabang.

Bagaimana saya bisa tahu cabang mana yang sudah digabung menjadi cabang master?


853
2017-10-22 18:23


asal


Jawaban:


git branch --merged master daftar cabang digabung menjadi menguasai

git branch --merged daftar cabang digabung menjadi KEPALA (mis. tip dari cabang saat ini)

git branch --no-merged daftar cabang yang belum digabung

Secara default ini hanya berlaku untuk cabang lokal. Itu -a Bendera akan menampilkan cabang lokal dan remote, dan -r hanya menampilkan cabang-cabang terpencil.


1387
2017-10-22 18:33



Anda dapat menggunakan git merge-base perintah untuk menemukan komitmen umum terbaru antara dua cabang. Jika komit itu sama dengan kepala cabang Anda, maka cabang tersebut telah benar-benar digabung.

Perhatikan itu git branch -d apakah hal semacam ini sudah karena ia akan menolak untuk menghapus cabang itu belum sudah benar-benar digabung.


78
2017-10-22 18:25



Ada solusi antarmuka grafis juga. Ketik saja

gitk --all

Jendela aplikasi baru akan meminta representasi grafis dari seluruh repo Anda, di mana sangat mudah untuk menyadari jika cabang sudah digabung atau tidak


22
2017-10-23 10:19



Pada topik membersihkan cabang-cabang terpencil

git branch -r | xargs -t -n 1 git branch -r --contains

Ini mencantumkan setiap cabang terpencil diikuti dengan cabang jarak jauh mana SHA terbaru mereka berada.

Ini berguna untuk membedakan cabang-cabang terpencil mana yang telah digabung tetapi tidak dihapus, dan yang belum digabungkan dan dengan demikian membusuk.

Jika Anda menggunakan 'tig' (itu seperti gitk tetapi berbasis terminal) maka Anda bisa

tig origin/feature/someones-decaying-feature

untuk melihat riwayat komitmen cabang tanpa harus membayar checkout


12
2017-10-23 10:09



Menggunakan git merge-base <commit> <commit>.

Perintah ini menemukan leluhur yang paling baik antara dua komit. Dan jika leluhur bersama identik dengan komitmen terakhir dari "cabang", maka kita dapat berasumsi bahwa "cabang" telah digabung menjadi master.

Inilah langkah-langkahnya

  1. Temukan hash commit terakhir di cabang master
  2. Temukan hash commit terakhir pada "cabang"
  3. Jalankan perintah git merge-base <commit-hash-step1> <commit-hash-step2>.
  4. Jika keluaran langkah 3 sama dengan keluaran dari langkah 2, maka "cabang" telah digabung menjadi master.

Info lebih lanjut tentang git merge-base https://git-scm.com/docs/git-merge-base.


7
2017-10-13 02:05



Berikut adalah teknik saya ketika saya perlu mencari tahu apakah cabang telah digabungkan, bahkan jika itu telah di-rebased menjadi up to date dengan cabang utama kami, yang merupakan skenario umum untuk cabang-cabang fitur.

Tak satu pun dari pendekatan-pendekatan ini adalah bukti yang bodoh, tetapi saya telah menemukan mereka berguna berkali-kali.

1 Tampilkan log untuk semua cabang

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 mengetahui apakah cabang fitur ini telah digabung atau tidak.

2 Selalu hapus cabang jarak jauh saat menggabungkan dalam cabang fitur

Jika Anda memiliki kebiasaan baik selalu menghapus cabang lokal dan cabang jarak jauh ketika Anda bergabung dalam cabang fitur, maka Anda cukup memperbarui dan memangkas remote pada komputer Anda yang lain dan cabang-cabang fitur akan hilang.

Untuk membantu mengingat melakukan ini, saya sudah menggunakan git flow extensions (edisi AVH) untuk membuat dan menggabungkan cabang fitur saya secara lokal, jadi saya menambahkan pengait aliran git berikut untuk bertanya apakah saya juga ingin menghapus cabang jarak jauh secara otomatis.

Contoh buat / selesaikan 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-feature-finish 

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

3 Cari berdasarkan pesan commit

Jika Anda tidak selalu menghapus cabang jarak jauh, Anda masih dapat mencari commit serupa untuk menentukan apakah cabang telah digabung atau tidak. Perangkap di sini adalah jika cabang terpencil telah di-rebased ke yang tidak dapat dikenali, seperti mem-squash commit atau mengubah pesan commit.

  • Ambil dan pangkas semua remote
  • Temukan pesan komit terakhir di cabang fitur
  • Lihat apakah komit dengan pesan yang sama dapat ditemukan di cabang master

Contoh perintah di cabang master:

gru                   
gls origin/feature/foo
glf "my message"

Dalam konfigurasi bash .profile saya

alias gru='git remote update -p'
alias glf=findCommitByMessage

findCommitByMessage() {
    git log -i --grep="$1"
}

5
2018-05-29 08:45



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
}

2
2018-03-22 16:49