دروس Git


بوابة و {{title}}


بوابة المساهمة


Git Advanced


بوابة التراجع




دمج فرع جيت


دمج الفروع

لدينا الإصلاح الطارئ جاهزًا ، لذا دعونا ندمج الفرعين الرئيسي وإصلاح الطوارئ.

أولاً ، نحتاج إلى التغيير إلى الفرع الرئيسي:

مثال

git checkout master
Switched to branch 'master'

الآن نقوم بدمج الفرع الحالي (الرئيسي) مع الإصلاح الطارئ:

مثال

git merge emergency-fix
Updating 09f4acd..dfa79db
Fast-forward
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

نظرًا لأن فرع إصلاح الطوارئ جاء مباشرةً من المدير ، ولم يتم إجراء أي تغييرات أخرى لإتقانه أثناء عملنا ، فإن Git يرى هذا على أنه استمرار للماجستير. لذلك يمكن "تقديم سريع" ، ما عليك سوى توجيه كل من الإصلاح الرئيسي وحالات الطوارئ إلى نفس الالتزام.

نظرًا لأن الإصلاح الرئيسي والإصلاح في حالات الطوارئ متماثلان بشكل أساسي الآن ، يمكننا حذف إصلاح الطوارئ ، حيث لم يعد هناك حاجة إليه:

مثال

git branch -d emergency-fix
Deleted branch emergency-fix (was dfa79db).

تعارض الدمج

الآن يمكننا الانتقال إلى hello-world-images ومواصلة العمل. أضف ملف صورة آخر (img_hello_git.jpg) وقم بتغيير index.html ، بحيث يظهره:

مثال

git checkout hello-world-images
Switched to branch 'hello-world-images'

مثال

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

الآن ، انتهينا من عملنا هنا ويمكننا أن نبدأ ونلتزم لهذا الفرع:

مثال

git add --all
git commit -m "added new image"
[hello-world-images 1f1584e] added new image
 2 files changed, 1 insertion(+)
 create mode 100644 img_hello_git.jpg

نرى أن index.html قد تغير في كلا الفرعين. نحن الآن جاهزون لدمج hello-world-images في Master. ولكن ماذا سيحدث للتغييرات التي أجريناها مؤخرًا على مستوى الماجستير؟

مثال

git checkout master
git merge hello-world-images
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

فشل الدمج لوجود تعارض بين إصدارات index.html. دعونا نتحقق من الحالة:

مثال

git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Changes to be committed:
        new file:   img_hello_git.jpg
        new file:   img_hello_world.jpg

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   index.html

هذا يؤكد وجود تعارض في index.html ، لكن ملفات الصور جاهزة ومرحلية للالتزام.

لذلك نحن بحاجة لإصلاح هذا الصراع. افتح الملف في محررنا:

مثال

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<<<<<<< HEAD
<p>This line is here to show how merging works.</p>
=======
<p>A new line in our file!</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>
>>>>>>> hello-world-images

</body>
</html>

يمكننا رؤية الاختلافات بين الإصدارات وتعديلها كما نريد:

مثال

<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>

<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from Space" style="width:100%;max-width:960px"></div>
<p>This is the first file in my new Git Repo.</p>
<p>This line is here to show how merging works.</p>
<div><img src="img_hello_git.jpg" alt="Hello Git" style="width:100%;max-width:640px"></div>

</body>
</html>

الآن يمكننا تنظيم index.html والتحقق من الحالة:

مثال

git add index.html
git status
On branch master
All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:
        new file:   img_hello_git.jpg
        new file:   img_hello_world.jpg
        modified:   index.html

تم إصلاح التعارض ، ويمكننا استخدام الالتزام لإتمام الدمج:

مثال

git commit -m "merged with hello-world-images after fixing conflicts"
[master e0b6038] merged with hello-world-images after fixing conflicts

وحذف فرع hello-world-images:

مثال

git branch -d hello-world-images
Deleted branch hello-world-images (was 1f1584e).

الآن لديك فهم أفضل لكيفية عمل الفروع والدمج. حان الوقت لبدء العمل مع مستودع بعيد!

اختبر نفسك مع التمارين

ممارسه الرياضه:

دمج hello-youالفرع مع الفرع الحالي:

git  hello-you