ශාඛාවක් දැනටමත් ස්වාමියා සමඟ ඒකාබද්ධ වී ඇත්දැයි දැන ගන්නේ කෙසේද?


1161

මට බහු ශාඛා සහිත git ගබඩාවක් ඇත.

මාස්ටර් ශාඛාවට දැනටමත් ඒකාබද්ධ කර ඇති ශාඛා මොනවාදැයි දැන ගන්නේ කෙසේද?

Answers:


1826

git branch --merged masterශාඛා මාස්ටර් සමඟ ඒකාබද්ධ කරන ලදි

git branch --mergedHEAD සමඟ ඒකාබද්ධ කරන ලද ශාඛා ලැයිස්තුගත කරයි (එනම් වත්මන් ශාඛාවේ අග)

git branch --no-merged ඒකාබද්ධ නොකළ ශාඛා ලැයිස්තුගත කරයි

පෙරනිමියෙන් මෙය අදාළ වන්නේ දේශීය ශාඛාවලට පමණි. මෙම -aධජය යන දෙකම දේශීය හා දුරස්ථ ශාඛා පෙන්වනු ඇත, සහ -rධජය දර්ශන දුරස්ථ ශාඛා පමණි.


2
පැත්තක සටහනක්, දුරස්ථ ශාඛාවක් ඒකාබද්ධ වී ඇත්දැයි බැලීමට මා උත්සාහ කළ විට, මම මුලින්ම දේශීය ෙසොයා ගැනීෙම් ශාඛාවක් පිහිටුවා, එහි තත්ත්වය හඳුනාගෙන git branch --mergedපසුව දේශීය හා දුරස්ථ ශාඛා මකා දැමුවෙමි.
කෙනත් කල්මර්

83
git branch -a --merged/no-mergedමෙම ක්‍රියාවලියේදී දේශීය ෙසොයා ගැනීෙම් ශාඛාවක් නිර්මාණය ෙකොට, පෙනෙන පරිදි, ද වැඩ කරයි.
fresskoma

70
නැතහොත් git branch -r --merged/--no-mergedදුරස්ථ ශාඛා පමණක් සොයා ගැනීම සඳහා ය.
අස්ෆන්ඩ් කාසි

7
ප්‍රතිනිර්මාණය කිරීමෙන් පසු සැබවින්ම ඒකාබද්ධ කරන ලද නොකැඩූ අතු මකා දැමීමට ක්‍රමයක් තිබේද?
අෂ්ෆේම්

10
ඊට --merged/--no-mergedපසු විකල්ප බැඳීම් තර්කයක් ගන්නා බව සලකන්න . අවම වශයෙන් මගේ git (1.9.1) අනුවාදයේ, -aහෝ -rධජය එකතු කිරීමෙන් පසුව මට මාරාන්තික දෝෂයක් ඇතිවේ . -aහෝ ඊට -r පෙර එකතු කරන්න --(no-)merged.
ජොනතන් ගැව්රිච්

117

git merge-baseශාඛා දෙක අතර නවතම පොදු බැඳීම සොයා ගැනීමට ඔබට විධානය භාවිතා කළ හැකිය . එම කැපවීම ඔබේ ශාඛා ප්‍රධානියාට සමාන නම්, ශාඛාව සම්පූර්ණයෙන්ම ඒකාබද්ධ වී ඇත.

git branch -dමේ වන විටත් මෙවැනි දේ කරන බව සලකන්න, මන්දයත් දැනටමත් සම්පුර්ණයෙන්ම ඒකාබද්ධ වී නොමැති ශාඛාවක් මකා දැමීම ප්‍රතික්ෂේප කරනු ඇත.


3
ri හරීගේ පිළිතුර මෙය භාවිතා කරන්නේ කෙසේද යන්න පිළිබඳ සවිස්තරාත්මකව විස්තර කරයි.
මුහ්ඩ්

අපට මෙය ස්වයංක්‍රීයව / ක්‍රමලේඛිකව කළ හැක්කේ කෙසේද?
ඇලෙක්සැන්ඩර් මිල්ස්

1
"දැනටමත් සම්පුර්ණයෙන්ම ඒකාබද්ධ වී නොමැත" ... සම්පූර්ණයෙන්ම කුමන ශාඛාවට ඒකාබද්ධ වී තිබේද?
ඇලෙක්සැන්ඩර් මිල්ස්

Lex ඇලෙක්සැන්ඩර්මිල්ස්: ඔබේ වර්තමාන ශාඛාවට.
ග්‍රෙග් හෙව්ගිල්

2
Lex ඇලෙක්සැන්ඩර්මිල්ස්: git branch -dවත්මන් ශාඛාවට ඒකාබද්ධ නොකළ ශාඛාවක් මකා දැමීම ප්‍රතික්ෂේප කරනු ඇත. වත්මන් ශාඛාව මකා නොදමයි .
ග්‍රෙග් හෙව්ගිල්

28

චිත්රක අතුරුමුහුණත් විසඳුමක් ද ඇත. ටයිප් කරන්න

gitk --all

නව යෙදුම් කවුළුවක් මඟින් ඔබේ මුළු ගබඩාවේ චිත්‍රමය නිරූපණයක් ලබා දෙනු ඇත, එහිදී ශාඛාවක් දැනටමත් ඒකාබද්ධ වී තිබේද නැද්ද යන්න වටහා ගැනීම ඉතා පහසුය


17
පැහැදිලි විය යුතු, gitසේවාදායකයාගේ කොටසක් නොවන යෙදුමක් ස්ථාපනය කිරීම අවශ්‍ය වේ . උබුන්ටු මත , apt-get install gitk.
metame

MacOS, ඔබ බරපැනක් ස්ථාපනය කර තිබේ නම්, වනු ඇත brew install git-gui, ලබා ගැනීමට gitkඇති commandline මත.
program247365

24

මම පහත දැක්වෙන bash ශ්‍රිතය භාවිතා කරමි: 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
}

3
මෙය ඇත්ත වශයෙන්ම ක්‍රියාත්මක නොවේ. ප්‍රභව ශාඛාව දැනටමත් ගමනාන්ත ශාඛාවට ඒකාබද්ධ කර ඇති අතර, ගමනාන්ත ශාඛාවට තවත් කොමිස් කිහිපයක් ලැබුනේ නම්, එය තවදුරටත් ක්‍රියාත්මක නොවනු ඇත, නමුත් ඒ මන්දැයි මම නොදනිමි
ඇලෙක්සැන්ඩර් මිල්ස්

1
ප්‍රශ්නය මෙතැනින් බලන්න: stackoverflow.com/questions/51355331/…
ඇලෙක්සැන්ඩර් මිල්ස්

19

භාවිතා කරන්න git merge-base <commit> <commit>.

මෙම විධානය මඟින් කොමිට් දෙකක් අතර හොඳම පොදු මුතුන් මිත්තන් (ය) සොයා ගනී. පොදු මුතුන් මිත්තෙකු “ශාඛාවක” අවසාන කැපවීමට සමාන නම්, “ශාඛාවක්” දැනටමත් ස්වාමියා සමඟ ඒකාබද්ධ වී ඇතැයි අපට ආරක්ෂිතව උපකල්පනය කළ හැකිය.

මෙන්න පියවර

  1. ප්‍රධාන ශාඛාවේ අවසන් කැපකිරීමේ හැෂ් සොයා ගන්න
  2. "ශාඛාවක්" මත අවසන් කැපවීමේ හැෂ් සොයා ගන්න
  3. විධානය ක්‍රියාත්මක කරන්න git merge-base <commit-hash-step1> <commit-hash-step2>.
  4. 3 වන පියවරේ ප්‍රතිදානය 2 වන පියවරේ ප්‍රතිදානයට සමාන නම්, "ශාඛාවක්" දැනටමත් මාස්ටර් සමඟ ඒකාබද්ධ කර ඇත.

Git merge-base පිළිබඳ වැඩි විස්තර https://git-scm.com/docs/git-merge-base .


2
මම හිතන්නේ මෙය ඔබට කියනු ඇත්තේ ඉඟි ඒකාබද්ධ කළහොත් පමණි. නිදසුනක් ලෙස, masterඒකාබද්ධ වී ඇත්දැයි මෙය ඔබට නොකියනු ඇත branch, පසුව තවත් කොමිස් 4 ක් එකතු කරන ලදි branch.
mkobit

ඇයි නැත්තේ git log -1 $(git merge-base base-branch feature-branch)සහ ඔබ feature-branchප්‍රතිදානයේ දැක්කොත් , ඔබ දන්නවා ඒවා ඒකාබද්ධ වී ඇති බව?
කාල් ජී

14

කුමන ශාඛා මාස්ටර් සමඟ ඒකාබද්ධ වී ඇත්දැයි තහවුරු කර ගැනීම සඳහා ඔබ මෙම විධානයන් භාවිතා කළ යුතුය:

  • git branch <flag[-r/-a/none]> --merged master සියලුම ශාඛා ලැයිස්තුව ස්වාමියාට ඒකාබද්ධ කරන ලදි.
  • git branch <flag[-r/-a/none]> --merged master | wc -l ස්වාමියා සමඟ ඒකාබද්ධ කරන ලද සියලුම ශාඛා ගණන.

කොඩි යනු:

  • -aධජය - (සියල්ල) දුරස්ථ හා දේශීය ශාඛා පෙන්වයි
  • -rධජය - (දුරස්ථ) දුරස්ථ ශාඛා පමණක් පෙන්වයි
  • <emptyFlag>- දේශීය ශාඛා පමණක් පෙන්වයි

උදාහරණයක් ලෙස: git branch -r --merged master මාස්ටර් සමඟ ඒකාබද්ධ කළ සියලුම දුරස්ථ ගබඩාවන් ඔබට පෙන්වනු ඇත.


13

දුරස්ථ ශාඛා පිරිසිදු කිරීමේ මාතෘකාව මත

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

මෙය එක් එක් දුරස්ථ ශාඛා ලැයිස්තුගත කර ඇති අතර ඒවායේ නවතම SHAs දුරස්ථ ශාඛා ඇත.

කුමන දුරස්ථ ශාඛා ඒකාබද්ධ කර ඇති නමුත් මකා නොදැමූ ඒවා ඒකාබද්ධ වී නැති අතර ඒවා දිරාපත් වෙමින් තිබේද යන්න වටහා ගැනීමට මෙය ප්‍රයෝජනවත් වේ.

ඔබ 'ටිග්' භාවිතා කරන්නේ නම් (එය gitk වැනි නමුත් පර්යන්තය පදනම් කරගත්) එවිට ඔබට හැකිය

tig origin/feature/someones-decaying-feature

පිටවීමකින් තොරව ශාඛාවක බැඳීම් ඉතිහාසය බැලීමට


3
හොඳයි ඒ මිනිහා! එය සැබවින්ම පෙන්වන දෙය වටා හිස ඔසවා ගත් පසු ඉතා ප්‍රයෝජනවත් වේ! ධූරාවලියක් නොමැති අකාරාදී ලැයිස්තුවකට වඩා GitHub යෙදුමට මෙය ඔබේ ශාඛා වල දෘශ්‍ය සංදර්ශනයකට ඇතුළත් කළ යුතුය!
CMash

5

විශේෂාංග ශාඛා සඳහා පොදු අවස්ථාවක් වන ශාඛාවක් ඒකාබද්ධ වී ඇත්දැයි සොයා බැලීමට අවශ්‍ය වූ විට මගේ ශිල්පීය ක්‍රම මෙන්න.

මෙම ප්‍රවේශයන් දෙකම මෝඩ සාක්ෂි නොවේ, නමුත් මම ඒවා බොහෝ වාරයක් ප්‍රයෝජනවත් බව සොයාගෙන ඇත.

1 සියලුම ශාඛා සඳහා ලොග් පෙන්වන්න

Gitk හෝ TortoiseGit වැනි දෘශ්‍ය මෙවලමක් භාවිතා කිරීම, හෝ --all සමඟ සරලව git log, ඉතිහාසය හරහා ගොස් ප්‍රධාන ශාඛාවට සියලු ඒකාබද්ධ කිරීම් දැක ගත හැකිය. මෙම විශේෂාංග ශාඛාව ඒකාබද්ධ වී තිබේද නැද්ද යන්න ඔබට හඳුනාගත හැකිය.

විශේෂාංග ශාඛාවකට ඒකාබද්ධ කිරීමේදී සෑම විටම දුරස්ථ ශාඛාව ඉවත් කරන්න

ඔබ විශේෂාංග ශාඛාවකට ඒකාබද්ධ වන විට සෑම විටම දේශීය හා දුරස්ථ ශාඛාව ඉවත් කිරීමේ හොඳ පුරුද්දක් තිබේ නම්, ඔබට සරලවම ඔබේ අනෙක් පරිගණකයේ දුරස්ථ යාවත්කාලීන කර කප්පාදු කළ හැකි අතර විශේෂාංග ශාඛා අතුරුදහන් වනු ඇත.

මෙය සිදු කිරීම මතක තබා ගැනීමට, මම දැනටමත් git flow දිගු (AVH සංස්කරණය) භාවිතා කරමි ගැනීම සඳහා, මගේ විශේෂාංග ශාඛා දේශීයව නිර්මාණය කිරීම හා ඒකාබද්ධ කිරීම සඳහා කරමි, එබැවින් දුරස්ථ ශාඛාව ස්වයංක්‍රීයව ඉවත් කිරීමට මට අවශ්‍ය දැයි මගෙන් විමසීමට මම පහත දැක්වෙන git flow කොක්ක එකතු කළෙමි.

උදාහරණ ශාඛාව නිර්මාණය / නිම කිරීම

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 / කොකු / පශ්චාත් ප්‍රවාහ-විශේෂාංග-නිමාව

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 කැපවීමේ පණිවිඩයෙන් සොයන්න

ඔබ සෑම විටම දුරස්ථ ශාඛාව ඉවත් නොකරන්නේ නම්, ශාඛාව ඒකාබද්ධ වී තිබේද නැද්ද යන්න තීරණය කිරීම සඳහා ඔබට තවමත් ඒ හා සමාන කොමිස් සෙවිය හැකිය. මෙහි ඇති අවාසිය නම් දුරස්ථ ශාඛාව හඳුනාගත නොහැකි ලෙස නැවත සකස් කර ඇත්නම්, එනම් කොටු කිරීම හෝ කැපවීමේ පණිවිඩ වෙනස් කිරීම ය.

  • සියලුම දුරස්ථයන් ලබාගෙන කප්පාදු කරන්න
  • විශේෂාංග ශාඛාවේ අවසන් කැපවීමේ පණිවිඩය සොයා ගන්න
  • එකම පණිවිඩයක් සහිත බැඳීමක් ප්‍රධාන ශාඛාවෙන් සොයාගත හැකිදැයි බලන්න

ප්‍රධාන ශාඛාවේ උදාහරණ විධාන:

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

මගේ bash .profile config

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

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

janjdeas - පියවර 1 - ප්‍රධාන වශයෙන් ඒකාබද්ධ කර ඇති ශාඛා මොනවාදැයි ඔබ දන්නේ කෙසේද? මම ලොග් සහ ගු මෙවලම් දෙස බැලුවෙමි - එය පැහැදිලිව පෙන්වන තැනක් සොයාගත නොහැක ???
හෆ්

H TheHuff මෙය උත්සාහ කරන්න: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]"
angularsen

H TheHuff In TortoiseGit, ඔබ ප්‍රධාන ශාඛාවේ සිටී නම්, එය සියලු ඒකාබද්ධ කිරීම් ප්‍රධාන ලෙස පෙන්විය යුතුය.
angularsen

ස්තූතියි - නමුත් ඒකාබද්ධ කිරීම යනු කුමක්දැයි මම දැන ගන්නේ කෙසේද? මම හිතන්නේ ඒවා සියල්ලම කොමිස් - මේක හරිද?
හෆ්

HTheHuff: ඔබ "පහළ ප්‍රවාහයට" (ලොග් දර්ශනයේ ඉහළට) එක් කැපවීමකට ඒකාබද්ධ වන ධාරා දෙකක් / කොමිස් මාර්ග දෘශ්‍යමානව දැකිය යුතුය. එම කැපවීම ඒකාබද්ධ කිරීමේ බැඳීමකි. එසේම, git logඔබට එක් --mergesකළ හැක්කේ ඒකාබද්ධ කිරීමේ කොමිස් පෙන්වීමට පමණි. stackoverflow.com/a/25986615/134761
angularsen

4

ඔබගේ වර්තමාන ශාඛාව දුරස්ථ සම්භවයක් / ප්‍රධාන ශාඛාවක දත්ත වලින් බැහැරව තිබේද යන්න ඔබට දැනුම් දෙන කුඩා එක් ලයිනර් මෙන්න:

$ git fetch && git branch -r --merged | grep -q origin/master && echo Incorporates origin/master || echo Out of date from origin/master

විශේෂාංග ශාඛාවක වැඩ කරන විට සහ මගේම වෙනම වැඩකරන ශාඛාවකට ඇතුළත් කර ඇති නවතම කාර්යයන් මා සතුව ඇති බව තහවුරු කර ගැනීමට නිතරම අවශ්‍ය වන විට මට මෙම ප්‍රශ්නය හමු විය.

මෙම පරීක්ෂණය සාමාන්‍යකරණය කිරීම සඳහා මම පහත දැක්වෙන අන්වර්ථය මගේ ~ / .gitconfig වෙත එක් කර ඇත:

[alias]
   current = !git branch -r --merged | grep -q $1 && echo Incorporates $1 || echo Out of date from $1 && :

එවිට මට ඇමතිය හැකිය:

$ git current origin/master

මම වත්මන් දැයි පරීක්ෂා කිරීමට.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.