আপডেটগুলি প্রত্যাখ্যান করা হয়েছিল কারণ আপনার বর্তমান শাখার অগ্রভাগ পিছনে রয়েছে


154

আমি গিতে নতুন, তাই আমাকে নবজাতকের মতো নির্দ্বিধায় বিবেচনা করুন।

আমাদের কর্মপ্রবাহ এমনই। আমাদের একটি শাখা রয়েছে devযা আমি পৌঁছাতে পারি origin/dev। যখন আমরা পরিবর্তনগুলি করি, আমরা একটি শাখা তৈরি করে দেব:

গিট চেকআউট-বি ফিক্সফোর্ড বাগ উত্স / দেব

এখন আমার একটি শাখা রয়েছে FixForBugযা ট্র্যাক করছে (আমি মনে করি এটি সঠিক শব্দ) origin/dev। সুতরাং, আমি যদি git pullএটি করি তবে এটি নতুন পরিবর্তন আনবে origin/devযা থেকে দুর্দান্ত। এখন, যখন আমি আমার ফিক্সটি শেষ করেছি, আমি একই জিনিস নামক একটি দূরবর্তী শাখায় ধাক্কা দিয়েছি।

প্রথমে আমি যে কোনও পরিবর্তন এনেছি origin/devএবং একটি রিবেস করব:

গিট টান --rebase

তারপরে আমি পরিবর্তনগুলি একই নামের একটি প্রত্যন্ত শাখায় ঠেকিয়ে দিই:

গিট পুশ অরিজিন ফিক্সফোগ

এখন, রিমোট সার্ভারে একটি শাখা রয়েছে এবং আমি এই পরিবর্তনটি অনুমোদিত হওয়ার জন্য এবং দেব শাখায় ফিরে একীভূত হওয়ার জন্য একটি টান অনুরোধ তৈরি করতে পারি। আমি চাই না কখনো কিছু ধাক্কা origin/devনিজেকে। আমি অনুমান করছি এটি প্রায় সাধারণ ওয়ার্কফ্লো।

আমি প্রথমবার git pushএটি করি , এটি সূক্ষ্মভাবে কাজ করে এবং দূরবর্তী শাখা তৈরি করে। যাইহোক, আমি যদি দ্বিতীয়বার চাপ দিই (কোড-পর্যালোচনা চলাকালীন বলি, কেউ কোনও সমস্যা দেখায়) তবে আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

ত্রুটি: ' https://github.limeade.info/Limeade/product.git ' ইঙ্গিতটি: কিছু রেফকে ধাক্কা দিতে ব্যর্থ হয়েছে আপডেটগুলি আপনার প্রত্যাবর্তনের কারণে প্রত্যাবর্তিত হয়েছিল কারণ আপনার বর্তমান শাখার অগ্রভাগটি ইঙ্গিতটির পিছনে রয়েছে: এর দূরবর্তী অংশটি। পুনরায় চাপ দেওয়ার আগে দূরবর্তী পরিবর্তনগুলি (যেমন: ইঙ্গিত: 'গিট টান ...') একীভূত করুন। ইঙ্গিত: বিশদটির জন্য 'গিট পুশ - হেল্প' এ 'ফাস্ট-ফরওয়ার্ডস সম্পর্কে নোট দেখুন'।

যাইহোক, যদি আমি git statusএটি করি তবে আমি origin/dev1 টি প্রতিশ্রুতি দ্বারা এগিয়ে রয়েছি (যা বোঝায়) এবং যদি আমি ইঙ্গিতটি অনুসরণ করি এবং চালনা git pullকরি তবে এটি বলে যে সবকিছু আপ টু ডেট। আমি মনে করি এটি এর কারণ আমি আমার উজানের শাখার চেয়ে আলাদা শাখায় ঠেলাচ্ছি। আমি চালিয়ে এই সমস্যাটি সমাধান করতে পারি:

git push -f origin FixForBug

সেক্ষেত্রে এটি দূরবর্তী শাখায় পরিবর্তনগুলি চাপিয়ে দেবে, বলছে (জোর করে আপডেট) এবং প্রত্যন্ত শাখায় সবকিছু ভাল বলে মনে হচ্ছে

আমার প্রশ্নগুলো:

কেন -fএই পরিস্থিতিতে প্রয়োজন হয়? সাধারণত যখন আপনি কিছু জোর করে থাকেন তখন এর কারণ আপনি কোনও ভুল করছেন বা কমপক্ষে স্ট্যান্ডার্ড অনুশীলনের বিরুদ্ধে। আমি কি ঠিকঠাক করছি, বা এটি দূরবর্তী শাখায় কিছু জগাখিচুড়ি করবে বা অবশেষে যারাই আমার স্টাফগুলিকে দেবের সাথে একীভূত করতে হবে তার জন্য ঝামেলা তৈরি করবে?


2
দেখে মনে হচ্ছে আপনি যে বার্তাটি পাচ্ছেন সেটি বলছে যে দূরবর্তী শাখা ফিক্সফোর্ড আপনার স্থানীয় শাখা ফিক্সফোর্ডের আগে রয়েছে। আপনার সেই দূরবর্তী শাখা থেকে পরিবর্তনগুলি নীচে নামানো উচিত এবং চাপ দেওয়ার আগে এগুলি আপনার স্থানীয় শাখায় মার্জ করা উচিত।
mhatch

4
@ এমএইচএচ - git pull origin FixForBugআমি যে ধাক্কা দেওয়ার আগে এটি মূলত চালান ? ঠিক আছে যে বোধগম্য। একটি উত্তর হিসাবে যুক্ত মনে নির্দ্বিধায়!
মাইক ক্রিস্টেনসেন

উত্তর:


199

-f হয় আসলে রি-বেসের ফলে কারণে প্রয়োজন। আপনি যখনই রিবেস করেন তখন আপনাকে একটি ফোর্স পুশ করতে হবে কারণ দূরবর্তী শাখাটি আপনার প্রতিশ্রুতিতে দ্রুত অগ্রসর হতে পারে না। আপনি সর্বদা এটি নিশ্চিত করতে চাইবেন যে আপনি চাপ দেওয়ার আগে একটি টান করছেন, তবে আপনি যদি এই বিষয়টির জন্য মাস্টার বা দেবকে জোর করে চাপাতে না চান তবে আপনি একটি নতুন শাখা তৈরি করতে পারেন এবং তারপরে মার্জ বা PR তৈরি করতে পারেন ।


2
এই খুব সহায়ক উত্তরের জন্য ধন্যবাদ! :)
এআইএম_বিএলবি

1
আপনি কি "আপনি সর্বদা নিশ্চিত করতে চান যে আপনি ধাক্কা দেওয়ার আগে একটি টান করছেন" এই বিষয়টিটি স্পষ্ট করে বলতে পারেন? এটি স্পষ্ট যে স্থানীয় শাখার পুনর্বাসনের পরে "পুশ-এফ" কেন প্রয়োজন। এক্ষেত্রে, চাপ দেওয়ার আগে রিমোটের একটি টান মেরে কাজ করে স্থানীয়দের পুনর্বাসনা কি পূর্বাবস্থায় ফেরা যাবে না?
হরিপকান্নান

51

আপনার স্থানীয় শাখা ফিক্সফোর্ডটি দূরবর্তী শাখার ফিক্সফোর্ড আগে এগিয়ে নেই তা নিশ্চিত করার জন্য এবং চাপ দেওয়ার আগে পরিবর্তনগুলি মার্জ করে।

git pull origin FixForBug
git push origin FixForBug

2
ওপি জানিয়েছে যে তারা ইতিমধ্যে একটি গিট টান করেছে এবং চাপ দেওয়ার চেষ্টা করেছে। আপনার উত্তর ওপির প্রশ্নের ক্ষেত্রে প্রযোজ্য নয়।
প্যাট্রিক

1
একটি শক্তি ধাক্কা এড়ানো সর্বদা ভাল। এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ!
অ্যান Kilzer

16

আপনি যদি ব্যবহার না করে এড়াতে চান -fতবে আপনি কেবল ব্যবহার করতে পারেন

git pull

পরিবর্তে

git pull --rebase

নন-রিবেস পরিবর্তনগুলি আনবে origin/devএবং এগুলি আপনার শাখায় মার্জ করবে FixForBug। তারপরে, আপনি চালাতে সক্ষম হবেন

git push origin FixForBug

ব্যবহার না করে -f


3
রিবাস আমাদের কাজের প্রবাহের এখানে একটি অংশ। আমি যদি এটি না করি তবে আমি চিৎকার করব।
মাইক ক্রিস্টেনসেন

1
@ মাইকচ্রিস্টেনসেন: ঠিক আছে, তবে অবশ্যই নথিবদ্ধ পদ্ধতি অনুসরণ করুন। আপনি যা বর্ণনা করেছেন -fসেগুলি থেকে আপনার ব্যবহারের প্রয়োজন হবে কারণ আপনি আপ স্ট্রোমেটরীতে কমিট (গুলি) এর পরিবর্তে আলাদা আলাদা (রিবেসড) ইতিহাস রয়েছে এমন বিভিন্নগুলির সাথে প্রতিস্থাপন করছেন । আপনি যদি জেরিটের মতো কোনও পণ্য ব্যবহার করতে চান তবে এটি -fধাক্কা দেওয়ার সময় ব্যবহার না করেই এই ধরণের রিবাইজ কোড-রিভিউ ওয়ার্কফ্লোকে সমর্থন করে । আমরা জেরিটকে এভাবে কাজে ব্যবহার করি এবং এটি খুব ভালভাবে কাজ করে।
গ্রেগ হিউগিল

13

the tip of your current branch is behind its remote counterpartএর অর্থ হল যে স্থানীয়ভাবে আপনার নেই এমন দূরবর্তী শাখায় কিছু পরিবর্তন হয়েছে। এবং গিট আপনাকে নতুন পরিবর্তনগুলি আমদানি করতে বলে REMOTEএবং এটিকে আপনার কোডের সাথে একত্রীকরণ করতে এবং তারপরে pushএটি রিমোটে বলে।

স্থানীয় রেপো () সহ সার্ভারে পরিবর্তনগুলি জোর করতে আপনি এই কমান্ডটি ব্যবহার করতে পারেন।

git push -f origin master

সঙ্গে -fট্যাগ আপনি ওভাররাইড করবে Remote Brach codeআপনার কোড সহ।


6

যখন আমি "আপডেটগুলি প্রত্যাখ্যান করা হয়েছিল কারণ আপনার বর্তমান শাখার ডগা পিছনে রয়েছে" বার্তাটি সম্মুখীন হয়েছিল তখন আমি আজুর ডিভোপসের সাথে যে আদেশটি ব্যবহার করেছি তা এই আদেশটি ছিল / ছিল:

গিট টান মূল মাস্টার

(বা একটি নতুন ফোল্ডার দিয়ে শুরু করতে এবং একটি ক্লোন করতে পারে) ..

এই উত্তরটি উত্থাপিত প্রশ্নের সমাধান করে না, বিশেষত কেইফ উপরে এটির উত্তর দিয়েছেন, তবে এটি প্রশ্নের শিরোনাম / শিরোনামের পাঠ্যটির উত্তর দেয় এবং এটি অ্যাজুরে ডিভস ব্যবহারকারীদের জন্য একটি সাধারণ প্রশ্ন হবে be

আমি মন্তব্যটি উল্লেখ করেছি: "আপনি সর্বদা নিশ্চিত করতে চাইবেন যে আপনি উপরে চাপার আগে একটি টান করছেন" উপরের কেয়েফের উত্তরে!

আমি গিট কমান্ড লাইন সরঞ্জামের পাশাপাশি গিট গুই সরঞ্জামও ব্যবহার করেছি।

(গিট গুইয়ের মধ্যে কীভাবে কমান্ড লাইন কমান্ড "গিট পুল অরিজিন মাস্টার" এর সমপরিমাণ করব তা আমি নিশ্চিত ছিলাম না সুতরাং এটি করতে আমি কমান্ড লাইনে ফিরে এসেছি)।

একটি ডায়াগ্রাম যা বিভিন্ন কাজগুলির জন্য বিভিন্ন গিট কমান্ড দেখায় যা আপনি গ্রহণ করতে চাইতে পারেন তা হ'ল:

এখানে চিত্র বর্ণনা লিখুন


4

এই মাত্র আমার ঘটেছে।

  • আমি গতকাল আমাদের মাস্টারের কাছে একটি টান অনুরোধ করেছি।
  • আমার সহকর্মী আজ এটি পর্যালোচনা করে দেখলেন যে এটি আমাদের মাস্টার ব্রাঞ্চের সাথে সমলাপের বাইরে চলে গেছে, তাই আমাকে সাহায্য করার উদ্দেশ্যে, তিনি আমার শাখায় মাস্টারকে একীভূত করলেন।
  • আমি জানতাম না সে তা করেছে।
  • তারপরে আমি স্থানীয়ভাবে মাস্টারকে একীভূত করেছি, এটি ধাক্কা দেওয়ার চেষ্টা করেছি, কিন্তু এটি ব্যর্থ হয়েছিল। কেন? কারণ আমার সহকর্মী মাস্টারের সাথে একীভূত হওয়ার কারণে স্থানীয়ভাবে আমার কাছে অতিরিক্ত প্রতিশ্রুতি তৈরি হয়নি !

সমাধান: আমার নিজের শাখাটি নীচে টানুন যাতে আমি সেই অতিরিক্ত প্রতিশ্রুতি পাই। তারপর ধাক্কা এটা আমার দূরবর্তী শাখায় ফিরে।

আক্ষরিকভাবে আমি আমার শাখায় যা করেছি তা হ'ল:

git pull
git push

3

এইভাবে আমি আমার সমস্যার সমাধান করেছি

ধরে নেওয়া যাক যে প্রবাহিত শাখাটি আপনি সেই জায়গা থেকে শুরু করেছিলেন এবং এটিই আপনার রেপো এবং আপনি প্রবাহের শাখায় একটি এমআর / পিআর প্রেরণ করতে চান।

আপনার কাছে ইতিমধ্যে 4 টি কমিট সম্পর্কে বলতে হবে এবং আপনি পাচ্ছেন Updates were rejected because the tip of your current branch is behind.

এখানে আমি কি করেছি

প্রথমে আপনার 4 টি কমিটকে স্কোয়াশ করুন

git rebase -i HEAD~4

pickতাদের উপর লিখিত কমিটের একটি তালিকা পাবেন । (একটি সম্পাদক এ খোলা)

উদাহরণ

pick fda59df commit 1
pick x536897 commit 2
pick c01a668 commit 3
pick c011a77 commit 4

প্রতি

pick fda59df commit 1
squash x536897 commit 2
squash c01a668 commit 3
squash c011a77 commit 4

এর পরে, আপনি আপনার সম্মিলিত প্রতিশ্রুতি সংরক্ষণ করতে পারেন

পরবর্তী

আপনাকে আপনার প্রতিশ্রুতিবদ্ধতা আটকে রাখতে হবে

এখানে কিভাবে

git reset --soft HEAD~1
git stash

এখন আপনার উজানের শাখা দিয়ে পুনর্বাসনা করুন

git fetch upstream beta && git rebase upstream/beta

এখন আপনার স্ট্যাশড কমিটকে পপ করুন

git stash pop

এই পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ এবং তাদের ধাক্কা

git add -A
git commit -m "[foo] - foobar commit"
git push origin fix/#123 -f

2

এটা অবশ্যই আপনার বর্তমান ধাক্কা এগিয়ে প্রতিশ্রুতি কারণ হতে হবে।

1) গিট টান উত্স "আপনি যে শাখার দিকে চাপ দিতে চান" নাম

2) গিট রিবেস

যদি গিট রিবেস সফল হয়, তবে ভাল। অন্যথায়, আপনি স্থানীয়ভাবে সমস্ত মার্জ সংঘাতগুলি সমাধান করেছেন এবং রিমোটের সাথে রিবেস সফল হওয়া অবধি এটি চালিয়ে যেতে থাকবেন।

3) গিট রিবেস - অবিরত


0

ভিজুয়াল স্টুডিও কোডের মাধ্যমে রিবেসের পরে চাপ দেওয়ার চেষ্টা করার সময় আমার এই সমস্যাটি হয়েছিল, আমার সমস্যাটি কেবল গিট আউটপুট উইন্ডো থেকে কমান্ডটি অনুলিপি করে এবং ভিজ্যুয়াল স্টুডিও কোডের টার্মিনাল উইন্ডো থেকে চালিত করে সমাধান করা হয়েছিল।

আমার ক্ষেত্রে কমান্ডটি এমন ছিল:

git push origin NameOfMyBranch:NameOfMyBranch

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.