كيف تحصل على تغييرات على فرع في بوابة

StackOverflow https://stackoverflow.com/questions/53569

  •  09-06-2019
  •  | 
  •  

سؤال

ما هي أفضل طريقة للحصول على سجل التقديمات في فرع ومنذ ذلك الوقت كان متفرعة من فرع الحالية?الحل هو حتى الآن:

git log $(git merge-base HEAD branch)..branch

وثائق بوابة مهرجان دبي السينمائي الدولي يشير إلى أن git diff A...B ما يعادل git diff $(git-merge-base A B) B.من ناحية أخرى, وثائق بوابة-rev-تحليل يشير إلى أن r1...r2 ويعرف r1 r2 --not $(git merge-base --all r1 r2).

لماذا هذه مختلفة ؟ علما بأن git diff HEAD...branch يعطيني ديفس أريد ، ولكن في المقابل بوابة سجل الأوامر يعطيني أكثر من ما أريد.

في الصور ، افترض هذا:

         x---y---z---branch
        /
---a---b---c---d---e---HEAD

أود الحصول على السجل التي تحتوي على يرتكب x, y, z.

  • git diff HEAD...branch يعطي هذه يرتكب
  • ومع ذلك ، git log HEAD...branch يعطي x, y, z, c, d, e.
هل كانت مفيدة؟

المحلول

في سياق تنقيح القائمة ، A...B كيف git-rev-parse يعرف ذلك.بوابة سجل يأخذ تنقيح قائمة. git-diff لا تأخذ على قائمة المراجعات - فإنه يأخذ واحد أو اثنين من التنقيحات ، وقد عرف A...B بناء الجملة يعني كيف يتم تعريفه في git-diff manpage.إذا git-diff لم تحدد صراحة A...B, ثم أن الجملة قد تكون غير صالحة.علما بأن git-rev-parse manpage يصف A...B في "تحديد نطاقات" القسم, و كل شيء في هذا القسم هي صالحة فقط في الحالات التي يكون فيها مراجعة مجموعة صالحة (أيعندما تنقيح القائمة هو المطلوب).

للحصول على سجل تحتوي فقط على x, y, z, حاول git log HEAD..branch (نقطتين وليس ثلاث).هذا مطابق git log branch --not HEAD, و يعني كل التقديمات في فرع ليست على الرأس.

نصائح أخرى

git cherry branch [newbranch]

يفعل بالضبط ما كنت طالبا ، عندما كنت في master فرع.

أنا أيضا مولعا جدا من:

git diff --name-status branch [newbranch]

وهي ليست بالضبط ما تطلبه ولكن لا تزال مفيدة جدا في نفس السياق.

ما كنت تريد أن ترى لائحة الصادرة يرتكب.يمكنك القيام بذلك باستخدام

git log master..branchName 

أو

git log master..branchName --oneline

حيث أفترض أن "branchName" وقد تم تتبع فرع من "سيد".

وبالمثل ، لمعرفة واردة التغييرات التي يمكنك استخدامها:

git log branchName..master

هذا هو مماثل الجواب نشرت لي على: معاينة بوابة دفع

إسقاط هذه الوظائف في الخاص باش الشخصي:

  • gbout - بوابة فرع المنتهية ولايته
  • gbin - بوابة فرع واردة

يمكنك استخدام هذا مثل:

  • إذا كان على الماجستير:gbin branch1 <-- هذا سوف تظهر لك ما في branch1 ، لا في الماجستير
  • إذا كان على الماجستير:gbout branch1 <- هذا سوف تظهر لك ما هو في إتقان هذا ليس في فرع 1

هذا سوف تعمل مع أي فرع.

function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}

function gbin {
    echo branch \($1\) has these commits and \($(parse_git_branch)\) does not
    git log ..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

function gbout {
    echo branch \($(parse_git_branch)\) has these commits and \($1\) does not
    git log $1.. --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local
}

على غرار عدة إجابات مثل أليكس الخامس و NDavis ، ولكن أيا منها هي نفسها تماما.

عندما بالفعل في فرع في السؤال

باستخدام:

git diff master...

الذي يجمع بين العديد من الميزات:

  • انها السوبر قصيرة
  • يظهر التغيرات الفعلية

تحديث:

ربما يكون git diff master, ولكن أيضا هذا يدل على مهرجان دبي السينمائي الدولي ، لا يرتكب مثل هذا السؤال المحدد.

رمي -p في بعض تغييرات الملف

git log -p master..branch

جعل بعض الأسماء المستعارة:

alias gbc="git branch --no-color | sed -e '/^[^\*]/d' -e 's/* \\(.*\\)/\1/'"

alias gbl='git log -p master..\`gbc\`'

انظر فرع فريدة من نوعها يرتكب:

gbl

لمعرفة السجل الحالي منذ فرع يتفرع الماجستير:

git log master...

إذا كنت حاليا على الماجستير ، راجع سجل من فرع مختلف لأنه تشعب الماجستير:

git log ...other-branch

git log --cherry-mark --oneline from_branch...to_branch

(3dots) ولكن في بعض الأحيان يظهر '+' بدلا من '='

وجدت

git diff <branch_with_changes> <branch_to_compare_to>

أكثر فائدة ، حيث لا يمكنك فقط الحصول على ارتكاب الرسائل ولكن كل مهرجان دبي السينمائي الدولي.إذا كنت بالفعل على فرع كنت تريد أن ترى التغييرات و (على سبيل المثال) تريد أن ترى ما الذي تغير إلى سيد ، يمكنك استخدام:

git diff HEAD master
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top