গিটহাবের দিকে ধাক্কা দিতে পারে না - একত্রিত হওয়ার প্রয়োজন বলে


743

আমি নতুন নই GitHub । আমি যখন আমার কোডটি গিটহাবের দিকে ঠেলে দেওয়ার চেষ্টা করছিলাম তখন আমি কিছু সমস্যার মুখোমুখি হয়েছি।

Pushing to git@github.com:519ebayproject/519ebayproject.git
To git@github.com:519ebayproject/519ebayproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

আমি এখনও সংগ্রহশালায় কিছু ঠেলাতে পারি নি, তবে কেন আমাকে কিছু টানতে হবে?


6
নোট করুন যে পূর্বে স্থানীয়ভাবে পরিদর্শন করা শাখাগুলির ক্ষেত্রেও এটি ঘটতে পারে, যা উজানের স্টোরগুলির মধ্যে কমিট করেছে। এত সহজে কোনও পুরানো শাখাটি দ্রুত ফরোয়ার্ড করার সহজ উপায় বা স্থানীয় ভান্ডারগুলিতে গিটটি ভুলে যেতে দেওয়া যায় কি?
থরবজর্ন রাভন অ্যান্ডারসন

50
@ থরবজরন রাভানএন্ডারসেন - আমি 'গিট পুশ-এফ' ব্যবহার করে এই দৃশ্যের সমাধান করতে পেরেছি যা দেখে মনে হয়েছিল যে গিটটি এর কাল্পনিক সমস্যাগুলি ভুলে যেতে পারে :)
এচেলন

6
গিট নতুনদের কাছ থেকে এ সম্পর্কে একটি অভিযোগ দেখেছেন। কারণটি হ'ল যখন তারা গিটহাবের উপর একটি নতুন প্রকল্প তৈরি করেন, তারা টিকবক্সটি "রিডমি উইথ ইনিশিয়াল" বা চয়ন করেন g
রুসলান কাবালিন

4
এইচেলন -২f চাপটি জোর করার বিকল্পটি বিপজ্জনক। আমি এটি কেবল একটি টিম প্রকল্পে ব্যবহার করেছি এবং 6 টি কমিটগুলি "স্ট্রিপড" করা হয়েছিল, কেবল সার্ভার থেকে মুছে ফেলা হয়েছিল এবং সেগুলি ফিরে পাওয়ার কোনও উপায় নেই!
মুছে ফেলুন

42
গিটের প্রশংসা করার জন্য এটির ট্রেন্ডি। তবে আমি প্রায় প্রতিটি বিকাশকারী যার সাথে আমি কথা বলেছি, তারা ব্যক্তিগতভাবে সম্মত হন যে তারা ব্যক্তিগতভাবে গিটকে ঘৃণা করে। তারা যখন গিট ব্যবহার করে তারা পারফরম বা টিএফএস ব্যবহার করার সময় তারা যে পরিমাণ সময় ব্যয় করত তার তুলনায় তারা সোর্স নিয়ন্ত্রণে এত বেশি সময় ব্যয় করে।
বিকাশকারী

উত্তর:


762

এর ফলে দূরবর্তী সংগ্রহস্থলটি কমিটগুলি হারাতে পারে; যত্ন সহকারে এটি ব্যবহার করুন।

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

git push -f origin <branch>

originআপনার দূরবর্তী রেপোর নাম কোথায় ।

সাধারণত, কমান্ড একটি রিমোট রেফ আপডেট করতে অস্বীকার করে যা এটি ওভাররাইট করতে ব্যবহৃত স্থানীয় রেফের পূর্বপুরুষ নয়। এই পতাকা চেকটি অক্ষম করে। এর ফলে দূরবর্তী সংগ্রহস্থলটি কমিটগুলি হারাতে পারে; যত্ন সহকারে এটি ব্যবহার করুন।


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

24
আপনি এই পোস্টে মন্তব্য শেষ লাইনটি পড়েছেন তা নিশ্চিত করুন! "এর ফলে দূরবর্তী সংগ্রহস্থলটি কমিটগুলি হারাতে পারে; যত্ন সহ এটি ব্যবহার করুন।" দলের পরিবেশে জোর ঠেকানো একটি বিপজ্জনক জিনিস, এবং সাধারণত এড়ানো উচিত।
আদম কালনাস

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

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

এটি আমার পক্ষে কাজ করেছে। আমি চেষ্টা করেছি $ git pull origin master -vকিন্তু এটি ত্রুটি দেয় fatal: refusing to merge unrelated histories। তারপরে আমি এটি চেষ্টা করেছি এবং এটি কাজ করেছে এবং আমার স্থানীয় ফাইলগুলি গিথুব রিমোট রেপোতে উপস্থিত হয়েছিল।
বীর

238

যেমনটি বার্তা আপনাকে বলেছে,

দূরবর্তী পরিবর্তনগুলি মার্জ করুন (যেমন 'গিট টান')

git pullদূরবর্তী সংগ্রহস্থল থেকে আপনার স্থানীয় সংগ্রহস্থলে সর্বশেষ পরিবর্তনগুলি টানতে ব্যবহার করুন । এই ক্ষেত্রে পরিবর্তনগুলি টানতে একত্রীকরণের প্রয়োজন হবে কারণ আপনি নিজের স্থানীয় সংগ্রহস্থলে পরিবর্তন করেছেন।

আমি ব্যাখ্যা করার জন্য একটি উদাহরণ এবং একটি ছবি সরবরাহ করব। আসুন ধরে নেওয়া যাক উত্স / শাখা থেকে আপনার শেষ টানটি কমিট বি তে ছিল আপনি কিছু কাজ শেষ করেছেন এবং প্রতিশ্রুতিবদ্ধ করেছেন (কমিট সি)। একই সময়ে, অন্য কেউ তাদের কাজ শেষ করে এটিকে উত্স / শাখায় (কমিট ডি) এ ঠেলে দিয়েছেন। এই দুটি শাখার মধ্যে একত্রীকরণের প্রয়োজন হবে।

local branch:                         --- Commit C 
                                    /
                                   /
                                  /
origin/branch: Commit A ------ Commit B ---- Commit D

আপনি যে ধাক্কা দিতে চান সেহেতু, গিট আপনাকে মার্জটি সম্পাদন করতে বাধ্য করে। এটি করতে, আপনাকে প্রথমে উত্স / শাখা থেকে পরিবর্তনগুলি টানতে হবে।

local branch:                         --- Commit C -- Commit E
                                    /               /           
                                   /               /             
                                  /               /               
origin/branch: Commit A ------ Commit B ---- Commit D 

মার্জটি শেষ করার পরে, আপনাকে এখন আপনার পরিবর্তনগুলি ঠেকিয়ে দ্রুত অঙ্গীকারের উত্স / শাখা কমিটিকে ই অনুমতি দেওয়া হবে।

গিটের প্রয়োজন হয় আপনি নিজেরাই মার্জগুলি হ্যান্ডেল করুন, কারণ একীভূত হওয়ার ফলে বিবাদ হতে পারে।


7
আপনি যদি একীভূত করতে না চান? এবং কেবল সাইড শাখা হিসাবে ডি ছেড়ে দিন (অন্তত এখন জন্য)। পরে, আমি সি এর পরে আরও প্রতিশ্রুতিবদ্ধ হতে পারি; ডি এর পরে অন্য কেউ আরও প্রতিশ্রুতিবদ্ধ হতে পারে মার্জ করার তাড়াতাড়ি কী? একত্রীকরণ ছাড়া আমি কীভাবে একটি পাশের শাখাটি ঠেলাতে পারি? ~~~
স্টিভ পিচার্স

3
স্থানীয় / শাখা এবং উত্স / শাখা একই শাখাকে উপস্থাপন করতে বোঝানো হয় তবে বিভিন্ন মেশিনে (স্থানীয় বনাম উত্স); স্থানীয় / শাখা পুশ করা হল মূল / শাখা আপডেট করা। যদি আপনি চান আপনার শাখার অবস্থা অন্যের কাছে দৃশ্যমান হয় (যেমন উত্স অনুসারে) তবে আপনি উত্স / শাখার সাথে একত্রীকরণ করতে চান না, তবে আপনার স্থানীয় / শাখা (গিট শাখা [নাম]) এর বাইরে একটি নতুন শাখা তৈরি করা উচিত এবং সেই শাখাকে উত্সতে চাপুন (গিট পুশ-ইউ উত্স [নাম])
জ্যাক গ্রিন

1
দুর্দান্ত ব্যাখ্যা। এই ভিডিওটি এই সমস্যার সংক্ষিপ্ত প্রদর্শন এবং @ জ্যাকগ্রিনের বর্ণনা অনুসারে এটি কীভাবে সমাধান করা যায় তা দেখানোর পাশাপাশি একটি নতুন সংগ্রহস্থল স্থাপন করার সময় প্রথম স্থানে এড়াতে হবে এমন দুটি উপায় দেখায়।
কেভিন মার্কহাম

4
কয়েক বছর পরে, এটি ঠিক মনে হচ্ছে যে এই উত্তরটি এই
অন্যটির সাথে

1
আমার git pullজন্যও মুদ্রিত Already up-to-date। দেখা গেল আমি যদিও ছিলাম আমি সেই শাখায় ছিলাম না, তবে একটি বিচ্ছিন্ন হেড শাখা (সম্ভবত ব্যর্থ মার্জ থেকে?) এটি চলমান পরে স্পষ্ট ছিল git branch। চালানোর পরে git checkout mybranchপ্রত্যাশার মতো কাজ করল।
স্ট্রাইডার

200

আপনি কি চাপ দেওয়ার আগে নিজের কোড আপডেট করেছেন?

git pull origin masterআপনি কিছু ধাক্কা দেওয়ার আগে ব্যবহার করুন ।

আমি ধরে নিই যে আপনি originআপনার রিমোটের নাম হিসাবে ব্যবহার করছেন ।

কিছু ধাক্কা দেওয়ার আগে আপনার স্থানীয় সংগ্রহশালাটিকে আধুনিক করে তুলতে আপনাকে ধাক্কা দেওয়ার আগে টানতে হবে (কেবলমাত্র অন্য কেউ ইতিমধ্যে কোডটি আপডেট করেছে github.com)। এটি স্থানীয়ভাবে বিরোধ নিষ্পত্তি করতে সহায়তা করে।


1
আমি কীভাবে সংগ্রহস্থলটির নাম জানতে পারি? যখন আমি টাইপ git pull origin masterGit অভিযোগ যে'origin' does not appear to be a git repository
ziyuang

3
'উত্স' একটি রিমোট। আপনি git remote --verboseআপনার গিট ফোল্ডারের অধীনে সমস্ত রিমোট কনফিগার করা দেখতে ব্যবহার করতে পারেন। স্ক্রিনে প্রদর্শিত তথ্যের মধ্যে "git@github.com" পাথ বা এইচটিটিপিএস পাথও অন্তর্ভুক্ত থাকবে, সেখান থেকে আপনাকে কোথায় ধাক্কা দিতে হবে তা সনাক্ত করতে সক্ষম হওয়া উচিত। আশাকরি এটা সাহায্য করবে !
AYK

16
git pull origin masterইতিমধ্যে আপ টু ডেট দেখাচ্ছে তবে তারপরে যখন অরিজিন_ ব্রাঞ্চকে ধাক্কা দেওয়ার চেষ্টা করুন তখন প্রশ্নে উল্লিখিত একই সতর্কতাটি বলুন। যেকোনো পরামর্শ !!
CoDe

2
@ শুভ আপনি কি কখনও সমস্যার সমাধান করেছেন? আমি একই জিনিস পাচ্ছি!
অরিজিনালএলকেমিস্ট

3
@ অরিগিনালএলচেমিস্ট হ্যাঁ..এছাড়া আমি কেবলমাত্র বিকাশকারী যারা দূরবর্তী-স্থানীয় শাখায় কাজ করি ... সুতরাং আমি স্থানীয় শাখাকে জোর করে চাপিয়ে দিয়েছিলাম .. এবং এটি স্থানীয় সিস্টেম থেকে আমার পরিবর্তনগুলির সাথে সার্ভারে উন্মুক্ত শাখার সমস্ত পরিবর্তনকে ওভাররাইড করে। git push -f <remote> <branch>যেমন Git ধাক্কা উৎপত্তি <your_local_branch> এই পরীক্ষা থ্রেড
CoDe

122

এটি সাধারণত তখন ঘটে যখন আপনি git commitএবং সেই শাখায় git pushআগে পরিবর্তন করার চেষ্টা করবেন যেখানে অন্য কেউ ইতিমধ্যে পরিবর্তন করেছে।git pullingx

স্বাভাবিক প্রবাহ নীচের মতো হবে,

পদক্ষেপ 1 : git stashসেই শাখায় আপনার স্থানীয় আপত্তিবিহীন পরিবর্তনগুলি।

ধাপ 2 : git pull origin branch_name -vথেকে pull and merge(যে শাখা স্থানীয়ভাবে সংঘটিত পরিবর্তনের । এই একত্রীকরণ কিছু বার্তা প্রদান করে এবং ফিক্স দ্বন্দ্ব যদি থাকে )

ধাপ 3 : ইডি পরিবর্তনগুলি ( তারপর আপনি ভেসে ফাইল করে যদি তুমি চাও অথবা ইতিমধ্যেই ধাক্কা অঙ্গীকারবদ্ধ পরিবর্তনগুলি (Step4) প্রথম এবং নতুন পরে ফাইল কমিট করতে করতে পারেন। )git stash popstash

পদক্ষেপ 4 : git push origin branch_name -vএকীভূত পরিবর্তনগুলি।

( শাখার জন্য ) branch_nameদিয়ে প্রতিস্থাপন করুন ।mastermaster


3
কোথায় commit? আপনার কি পরে আপনার পরিবর্তনগুলি করা উচিত নয় stash pop?
মেহমেট

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

51

প্রথম এবং সহজ সমাধান (প্রস্তাবিত নয়)

  • এই আদেশ ব্যবহার করে দেখুন git push -f origin master
  • এই কমান্ড জোর করে দূরবর্তী সংগ্রহস্থল (গিটহাব) ওভাররাইট করবে

প্রস্তাবিত সমাধান

  • এই আদেশগুলি চালান:
git pull --allow-unrelated-histories  //this might give you error but nothing to worry, next cmd will fix it
git add *
git commit -m "commit message"
git push

যদি এটি কাজ না করে তবে along অনুসরণ করুন 🔰

  • .gitফোল্ডার থেকে ডিরেক্টরি মুছুন ।
  • তারপরে এই আদেশগুলি কার্যকর করুন:

    git init
    git add .
    git commit -m "First Commit"
    git remote add origin [url]
    git push -u origin master
    

অথবা

git push -f origin master 

কেবলমাত্র git push -f origin masterযদি -uআপনার জন্য কাজ না করে তবে ব্যবহার করুন ।

এটি আপনার ফাইলগুলি ধাক্কা দেওয়ার সময় ঘটে যাওয়া প্রায় কোনও প্রকার ত্রুটির সমাধান করবে।


4
আপনার গিট রেপো মোছা এবং আপনার সম্পূর্ণ প্রতিশ্রুতিবদ্ধ ইতিহাস হারাতে "প্রস্তাবিত" সমাধান? হুট করে বলে মনে হচ্ছে।
নিলস গিলারমিন

@ নিলস গিলারমিন এটি আপনার পরিস্থিতির উপর নির্ভর করে। আমি যদি এমন কোনও বৃহত প্রকল্পে কাজ করছি যেখানে আমাকে সমস্ত মার্জ সংঘাতগুলি সমাধান করতে হবে তবে আমি সমস্ত পরিবর্তনগুলি পর্যালোচনা করতে এবং সহজেই মার্জ করতে vscode ব্যবহার করব। যদিও আপনার মতামতের জন্য ধন্যবাদ।
স্মিত প্যাটেল

47

কখনও কখনও আমরা টানা ভুলে গিয়েছিলাম এবং স্থানীয় পরিবেশে প্রচুর কাজ করেছি।

কেউ যদি টান ছাড়াই ধাক্কা দিতে চায়,

git push --force

কাজ করছে. অন্যান্য ব্যক্তির সাথে কাজ করার সময় এটির প্রস্তাব দেওয়া হয় না, তবে যখন আপনার কাজটি কোনও সাধারণ জিনিস বা ব্যক্তিগত খেলনা প্রকল্প হয়, তখন এটি একটি দ্রুত সমাধান হবে।


it

2
এটি আমার জন্য কাজ করেছে: 0 অন্যান্য সহযোগীদের সাথে ব্যক্তিগত প্রকল্প। আমি এখানে এসও-তে আরও বেশ কয়েকটি প্রস্তাবিত "সমাধান" চেষ্টা করেছিলাম, যার মধ্যে কোনওটিই খুব সহজ সমস্যাটি ঠিক করেনি: আমি reset --hardএকটি পুরানো প্রতিশ্রুতিতে স্থানীয় করেছিলাম এবং এরপরে আরও দু'বার করেছি। তারপরে আমি কেবল চেয়েছিলাম pushকিন্তু দূরবর্তী রেপো আমাকে দেওয়ার জন্য প্রস্তুত ছিল না। ওয়ারেনপি আসলে কম রানিক হয়ে গিট শিখরীদের সহায়তা করতে পারে। হয়তো সে চায় না।
মাইকে রডেন্ট

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

35

আপনারা কেউ কেউ এই ত্রুটি পেয়ে যাচ্ছেন কারণ আপনি কোন শাখাটি চাপ দেওয়ার চেষ্টা করছেন তা গিট জানেন না।

যদি আপনার ত্রুটি বার্তায়ও অন্তর্ভুক্ত থাকে

error: failed to push some refs to 'git@github.com:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.

তারপরে আপনি জিম কুবিসেকের কাছ থেকে ডিফল্ট শাখাকে স্রোতে সেট করতে গিটটি কেবলমাত্র পুষ্প কারেন্ট ব্রাঞ্চে কনফিগার করুন from

git config --global push.default current

32
git pull origin branch_name --rebase

এটি আমার পক্ষে কাজ করেছে - কমান্ডটি git pull origin branch_name --rebaseপ্রথমে দূরবর্তী শাখা_নাম থেকে পরিবর্তনগুলি টেনে আনবে, তারপরে তার rebaseবর্তমান শাখাটি।


20

উপরের উত্তরগুলি ছাড়াও, নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে: -

পরিস্থিতি -

  1. আমি আমার_ব্রাঞ্চকে সফলভাবে উত্সে ঠেলে দিয়েছি
  2. আমি আরও কিছু পরিবর্তন করেছি।
  3. আমি যখন আবার চাপ দেওয়ার চেষ্টা করেছি, (অবশ্যই যোগ করার পরে, প্রতিশ্রুতিবদ্ধ), তখন আমি উল্লিখিত ত্রুটি পেয়েছি।

সমাধান -

 1. git checkout **my_branch**
 2. git add, commit your changes.
 3. git pull origin **my_branch** (not origin, master, or develop)
 4. git push origin **my_branch**

প্রমাণ


1
আপনি আমাকে সাহায্য করেছেন। --allপতাকাটি ব্যবহার করে অন্য একটি শাখায় টান দিচ্ছিলাম এমন কি আমার অন্য একটি শাখায় চেকআউট করার প্রয়োজন হয়েছিল এবং এটি দূরবর্তী থেকে টানতে হবে তা লক্ষ্য করার জন্য আমার খুব কষ্ট হয়েছিল ।
এমজেনেটি

18

আমার একই সমস্যা ছিল, আমি যা করেছি তা হ'ল আমি প্রথমে এটি ব্যবহার করে জোর করে ধাক্কা দিয়েছি

git push --force

আমি ফাইলগুলি কমিট করার পরে এটি করেছি এবং আপনি পেয়ে যাওয়ায় একটি ত্রুটি হচ্ছে all এরপরের সময় আমি গিথুবের দিকে চাপ দিচ্ছিলাম it আমি যা বলেছিলাম তা আমি করেছি এবং তখন ঠিক আছে। আশা করি এটি আপনার জন্যও কার্যকর হয় :)


এটি কাজ করবে তবে এটি আপনি যা চান তা নাও হতে পারে! এর অর্থ আপনি কেবলমাত্র এমন পরিবর্তনগুলি উপেক্ষা করছেন যা এখন চিরতরে হারিয়ে যাবে।
রোলগুলি

3
git push --set-upstream origin master --force
কিংবদন্তি

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

এটি একটি সদৃশ উত্তর এবং মূলটি যাইহোক দুর্দান্ত পরামর্শ ছিল না।
moopet

এটি আসলে আমি যা করতে চাই তা কিন্তু আমি কেবল গিতলাব দিয়ে চেষ্টা করেছি এবং গিটল্যাব নকশার দ্বারা "সুরক্ষিত শাখাগুলিতে" এটি অনুমতি দেয় না
jeffery_the_wind

13

আমি আমার টিউটোরিয়ালে এই উল্লেখ করা হয়েছে, কিভাবে করতে ব্যবহার করুন GitHub: নতুনদের জন্য একটি টিউটোরিয়াল

আপনি যখন গিটহাবের উপর একটি নতুন ভান্ডার তৈরি করেন, গিটহাব আপনাকে একটি রিডমি ফাইল তৈরি করতে বলতে পারে। আপনি যদি গিটহাবে সরাসরি একটি রেডমি ফাইল তৈরি করেন, তবে 'পুশ' অনুরোধটি সফল হওয়ার আগে আপনাকে প্রথমে একটি 'টান' অনুরোধ করতে হবে। এই কমান্ডগুলি দূরবর্তী সংগ্রহস্থলকে 'টান' দেবে, এটি আপনার বর্তমান ফাইলগুলির সাথে একীভূত করবে এবং তারপরে সমস্ত ফাইলগুলিকে গিটহাবে ফিরে 'ধাক্কা' দেবে:

git pull https://github.com/thomas07vt/MyFirstRepo.git master

git push https://github.com/thomas07vt/MyFirstRepo.git master

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

1
আনতে আপনাকে স্থানীয় শাখায় মার্জ না করে পরিবর্তনের দিকে ঝুঁকতে দেয়। টান আনতে এবং তারপরে মার্জ করার শর্টকাট ut আমি নিশ্চিত আপনি গত 13 মাসে এটি বুঝতে পেরেছেন। আমি কেবল তার মধ্য দিয়ে যাচ্ছি কারণ আমি নিজের একটি জগাখিচুড়ি তৈরি করেছি। ;-)
ওল্ফহাউন্ডজেস

6

আমি আমার বর্তমান শাখাটি ধাক্কা দেওয়ার চেষ্টা করার সময় আমি উপরে বর্ণিত ত্রুটি বার্তাটি পেয়েছিলাম foobar:

git checkout foobar
git push origin foo

দেখা যাচ্ছে যে আমার দুটি স্থানীয় শাখা একই দূরবর্তী শাখা ট্র্যাক করছে:

foo -> origin/foo (some old branch)
foobar -> origin/foo (my current working branch)

এটি আমার বর্তমান শাখাটি ব্যবহার করে আমার পক্ষে কাজ করেছিল:

git push origin foobar:foo

... এবং সাথে পরিষ্কার করা git branch -d


6

গিট ধাক্কা -f মূল শাখার নাম

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


5
এটি একটি খারাপ উত্তরের সদৃশ।
মোপেট

5

যদি আপনি আপনার বর্তমান প্রকল্পের মধ্যে টানতে না চান (এবং সম্ভাব্যভাবে সংহত দ্বন্দ্বগুলির সমাধানের জন্য আপনি কিছু করেন না) এবং আপনি অন্য একটি শাখা তৈরি করতে চান না (এটি অন্য কোনও শাখা পরিচালনা করতে ক্লান্তিকর হবে), এবং আপনি ডন না কোনও ঝুঁকিপূর্ণ এবং স্থায়ী গিট forceকমান্ড করতে চাই না (যা তারা কী করে তা পড়ার পরেও আমি প্রায়শই এটি করার প্রভাব সম্পর্কে অবাক হয়)।

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

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

এই পদ্ধতির একটি নেতিবাচক দিকটি হ'ল আপনার অঙ্গীকারের ইতিহাসটি লিনিয়ার প্রদর্শিত হবে যখন আপনি যখন মার্জড ডকুমেন্ট না করেই কোনও শাখায় মিলিত হন। দলগুলির সাথে কাজ করার সময় এটি সেরা পদ্ধতি নাও হতে পারে। সেই ক্ষেত্রে শাখায় কাজ!


4

ঠিক একই সমস্যা ছিল কিন্তু আমার ক্ষেত্রে আমি রিমোটে ভুল শাখাটি টাইপ করেছি। সুতরাং, মনে হচ্ছে এটি এই সমস্যার আরেকটি উত্স ... ডাবল চেক আপনি সঠিক শাখায় চাপ দিচ্ছেন।


1
এবং আমার একটি অনুরূপ জিনিস ছিল, যেখানে আমি আগের কমান্ডটি স্মরণ করেছি, যা ছিল সম্পূর্ণ আলাদা সংগ্রহস্থলের জন্য!
ক্লেয়ার ম্যাক্রে

4

আমি খুব একই সমস্যাটি अनुभव করেছি এবং এটি প্রমাণিত হয়েছে যে আমি আমার চেয়ে আলাদা একটি (স্থানীয়) শাখায় ছিলাম এবং দূরবর্তী থেকে কমিটে সঠিক স্থানীয় শাখা ছিল।

আমার সমাধান: সঠিক শাখাটি চেকআউট করুন, চেরিটি অন্য স্থানীয় শাখা থেকে কমিট করুন, গিট টানুন এবং গিট পুশ করুন


4

আমারও একই রকম সমস্যা ছিল এবং এটি প্রমাণিত হয়েছে যে আমার শাখাটি আপ টু ডেট রাখার জন্য আমার কর্মপ্রবাহ ত্রুটিযুক্ত ছিল। আমি নিম্নলিখিতটি করছিলাম:

আমার স্থানীয় 'মাস্টার'

git fetch upstream
git merge upstream/master --ff-only

তারপরে আমার স্থানীয় শাখায় ফিরে আসি

git rebase master

এটি পূর্ববর্তী গিট প্রবাহের জন্য ভাল কাজ করেছে তবে গিথুব দিয়ে নয়। git rebaseসিঙ্ক সমস্যা ঘটাচ্ছে সমস্যা এখানে ছিল (এবং আমি যে কিছু আমি সম্পূর্ণরূপে বুঝে মেনে নিতে ছিল করেছি মানা করব) এবং দুর্ভাগ্যবশত আমার একটি অবস্থান যেখানে রাখা git push -fসম্ভবত সবচেয়ে সহজ পদ্ধিতি হল বিকল্প হয়ে ওঠে। ভাল না.

আমার নতুন প্রবাহটি সরাসরি নীচে ব্যবহার করে শাখাটি আপডেট করা হবে git merge:

আমার স্থানীয় শাখায়

git fetch upstream
git merge upstream/master

কোনও দ্রুত এগিয়ে নেই, যেহেতু আমি স্থানীয় শাখায় অবশ্যই পরিবর্তন করেছি।

আপনি সম্ভবত বলতে পারেন যে, আমি গিট বিশেষজ্ঞ নই তবে আমি নির্ভরযোগ্যভাবে জানিয়েছি যে এই ওয়ার্কফ্লোটি সম্ভবত আমার যে নির্দিষ্ট সমস্যাগুলি ছিল তা এড়াতে পারবে।


3

আমার ক্ষেত্রে, আমি "মাইব্রাঞ্চ" চেক আউট করেছি এবং করেছি git pull, সুতরাং ধাক্কা কেন কাজ করছে না তা বুঝতে পারি না। অবশেষে, আমি বুঝতে পারি যে আমি ভুল শাখা চাপছি। আমি git push origin masterপরিবর্তে টাইপ করা ছিল git push origin mybranch

সুতরাং আপনি যদি ইতিমধ্যে সম্পন্ন হয়ে থাকেন git pullএবং এখনও এই বার্তাটি পেয়ে থাকেন তবে নিশ্চিত হয়ে নিন যে আপনি সঠিক শাখাটি চাপছেন।


3

আপনার শাখার নাম কি দূরবর্তী শাখার নামের মতো?

যদি না হয়, তবে আপনাকে রিমোট শাখার একই নামযুক্ত একটি নতুন শাখা চেকআউট করা উচিত এবং এটিকে আবার চাপ দেওয়ার চেষ্টা করা উচিত।

ধরে নিন যে আপনি যে প্রত্যন্ত শাখাকে ধাক্কা দিতে চান তা হল [ পরীক্ষা করা ] এবং আপনার স্থানীয় শাখার নামকরণ হয়েছে [ পরীক্ষা ]।

আপনি যদি পরীক্ষার শাখায় না থাকেন তবে প্রথমে এতে স্যুইচ করুন।

git checkout test

তারপরে একটি নতুন শাখা খুলুন এবং এটির নাম পরীক্ষা করুন

git checkout -b testing

এখন, এটি এটিকে ধাক্কা দেওয়ার সময় হয়েছে:

git push [remote repo] testing

2
কেবল $git branch -M <new_name>স্থানীয় শাখার নাম পরিবর্তন করতে ব্যবহার করুন ।
com

3

আমি আমার জিআইটি সংগ্রহস্থলে এই সমস্যাটি সমাধান করেছি। এক্ষেত্রে দরকার rebaseবা forceকমিট করার দরকার নেই । এটি সমাধানের জন্য নীচের পদক্ষেপগুলি ব্যবহার করুন -

local_barnch> git branch --set-upstream to=origin/<local_branch_name> 

local_barnch>git pull origin <local_branch_name>

local_barnch> git branch --set-upstream to=origin/master

local_barnch>git push origin <local_branch_name>

আশা করি এটি সাহায্য করবে


2

আরেকটি সমাধান হ'ল আপনি যদি পারেন তবে অন্য প্রতিশ্রুতিবদ্ধ করে রিমোটের মাথাটি এগিয়ে নেওয়া। আপনি এই উন্নত মাথাটি স্থানীয় সাবট্রিতে টান দেওয়ার পরে আপনি আবার এটিকে থেকে চাপতে সক্ষম হবেন।


2

আমি গিটওয়েবের জন্য ব্যবহার করি এমন একটি খালি গিট সংগ্রহস্থলের সর্বশেষ পরিবর্তনগুলি ঠেকানোর সময় আমি একই রকম ত্রুটি পেয়েছি । আমার ক্ষেত্রে আমি খালি সংগ্রহস্থলগুলিতে কোনও পরিবর্তন করি নি, তাই আমি কেবল আমার খালি সংগ্রহস্থান মুছে ফেলেছি এবং আবার ক্লোন করেছি:

git clone --bare <source repo path> <target bare repo path>

2

আপনি যদি নিশ্চিত হন যে কেউই আপনার গিট সংগ্রহস্থলে পরিবর্তন করেনি এবং আপনি সর্বশেষতম সংস্করণে কাজ করছেন, git pullআপনার হৃদয়ে সমাধান হিসাবে তা বোঝায় না ...

তাহলে সম্ভবত এটি ঘটেছিল, আপনি ব্যবহার করেছেন git commit --amend

এটি আপনাকে সম্পূর্ণ নতুন স্ন্যাপশট হিসাবে প্রতিশ্রুতি না দিয়ে পূর্বের প্রতিশ্রুতিবদ্ধতার সাথে মঞ্চস্থ পরিবর্তনগুলি একত্রিত করতে দেয় lets এটি পূর্বের প্রতিশ্রুতি বার্তাটির স্ন্যাপশট পরিবর্তন না করে কেবল সম্পাদনা করতেও ব্যবহার করা যেতে পারে।

আটলাসিয়ান টিউটোরিয়াল: ইতিহাস রাইটিং

তবে, git commit --amend আপনি যদি ইতিমধ্যে গিটহাবের কাছে প্রতিশ্রুতিবদ্ধ হন তবে এটি সম্পাদন করার পরামর্শ দেওয়া হয় না , কারণ এটি "সংশোধন করা সর্বাধিক সাম্প্রতিক প্রতিশ্রুতি পরিবর্তন করে না — এটি সম্পূর্ণরূপে প্রতিস্থাপন করে it গিটের কাছে এটি ব্র্যান্ডের নতুন প্রতিশ্রুতি মত দেখাবে" যার অর্থ আপনার গিটহাবের অন্যান্য বিকাশকারী, ইতিহাস দেখতে এ-> বি-> সি এর মতো লাগে তবে আপনার কাছে এটি এ-> বি-> ডি এর মতো দেখাচ্ছে, যদি গিটহাব আপনাকে ছেড়ে দেয় push, অন্য সবাইকে ম্যানুয়ালি তাদের ইতিহাস ঠিক করতে হবে

এই কারণেই আপনি ত্রুটি বার্তাটি পান ! [rejected] master -> master (non-fast-forward), যদি আপনি জানেন যে কেউ আপনার সর্বশেষ পরিবর্তনটি টানছে না git push --force, আপনি এটি করতে পারেন , এটি আপনার পাবলিক রেপোতে গিট ইতিহাসকে পরিবর্তন করবে । অন্যথায় ... আপনি পারফর্ম করতে পারেন git pull, তবে আমি বিশ্বাস করি git commit --amendএটির ফলাফল একই রকম হবে আপনি যা করেননি , এটি একটি নতুন প্রতিশ্রুতি তৈরি করবে (যেমন: গিট টানার পরে গিট ইতিহাস: এ-> বি-> সি-> ডি )

আরও বিশদের জন্য: কীভাবে আপনার সর্বশেষ প্রতিশ্রুতি পরিবর্তন করবেন


2

অন্য বিকল্প: স্থানীয়ভাবে আপনার শাখার নতুন নামকরণ করুন।

তারপরে আপনি এটিকে দূরবর্তী সংগ্রহস্থলে রেখে দিতে সক্ষম হবেন, উদাহরণস্বরূপ যদি এটি কোনও অনুলিপি (ব্যাকআপ) রাখার এবং কোনও কিছু হারিয়ে না যায় তা নিশ্চিত করার পদ্ধতি।

স্থানীয় অনুলিপি পেতে আপনি দূরবর্তী শাখাটি আনতে পারেন এবং (i) রিমোটের কী ছিল (পুরানো শাখার নাম সহ) এবং (ii) আপনার কী রয়েছে (নতুন শাখার নাম সহ) এবং কী করবেন তা সিদ্ধান্ত নিতে পারেন । যেহেতু আপনি প্রথম স্থানে রিমোটের পার্থক্য সম্পর্কে অবগত ছিলেন না (সুতরাং সমস্যাটি), কোথাও কোথাও একত্রিত হওয়া বা জোর করে পরিবর্তন করা অত্যন্ত নিষ্ঠুর।

পার্থক্যগুলি দেখুন, আপনি কোন শাখায় কাজ করতে চান তা চয়ন করুন, অন্য শাখা থেকে চেরি চয়নগুলি চয়ন করুন বা আপনি যে শাখায় পেয়েছেন সেগুলিতে আপনি চান না এমন পরিবর্তনগুলি ফিরিয়ে দিন etc.

তারপরে আপনি সিদ্ধান্ত নিতে পারেন যে আপনি নিজের ক্লিন সংস্করণটি রিমোটের উপর চাপিয়ে দিতে চান, বা নতুন পরিবর্তনগুলি যুক্ত করুন বা যা কিছু whatever


1

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


1

এই সমস্যাটি সাধারণত একটি readme.md ফাইল তৈরি করার কারণে ঘটে থাকে, যা প্রতিশ্রুতি হিসাবে গণনা করা হয়, এটি সিস্টেমে স্থানীয়ভাবে সিঙ্ক্রোনাইজ করা হয় না এবং মাথার পিছনে অভাব হয়, সুতরাং এটি গিট টান অনুরোধ দেখায়। আপনি রিডমি ফাইল এড়ানো এবং তারপরে প্রতিশ্রুতিবদ্ধ করার চেষ্টা করতে পারেন। এটা আমার ক্ষেত্রে কাজ করেছে।


0

এই সমস্যার আরেকটি কারণ (সম্ভবত এতটা সাধারণ নয়) ...

আমার সার্ভারটি যখন আমি একটি ধাক্কা দিয়েছিলাম তখন 12 ঘন্টা পিছনে ছিল

আমি আমার ক্লক এসআইএনসি সার্ভারে এনটিপি কনফিগার করেছি।

আমি একটি নতুন গিট পুশ কার্যকর করলাম যা এই পোস্টে আলোচিত ত্রুটির দিকে পরিচালিত করেছে।


0

যদি কোনও সুযোগ git pullপ্রিন্ট করে Already up-to-dateতবে আপনি গ্লোবাল গিট পরম push.default(ইন ~/.gitconfig) পরীক্ষা করতে চাইতে পারেন । এটি simpleথাকলে সেট করে দিন matching। নীচের উত্তরটি কেন ব্যাখ্যা করে:

গিট - পুশ ডিফল্ট "ম্যাচিং" এবং "সরল" এর মধ্যে পার্থক্য কী

এছাড়াও, আপনার স্থানীয় শাখাটি ব্যবহার করে মেয়াদ শেষ হয়ে গেছে কিনা তা পরীক্ষা করে দেখার git remote show originদরকার এবং প্রয়োজনে একটি টান দিন


0

git pull https://github.com/username/repository এটি ব্যবহার করুন কারণ গিথুব এবং দূরবর্তী সংগ্রহস্থলগুলি সিঙ্কে নেই। আপনি যদি pullরেপো এবং তারপরে Pushসমস্ত কিছু সিঙ্ক হয় এবং ত্রুটি চলে যায়।

`


0

git pull প্রিন্ট ইতিমধ্যে up-to-date

সমাধান:

আপনি রিমোট (সার্ভার) এ একটি সংগ্রহস্থল / প্রকল্প তৈরি করতে পারেন এবং সেখানে কিছু ফাইল যুক্ত করেছেন, তারপরে আবার আপনার স্থানীয় এবং আরম্ভিত গিটে একটি ফোল্ডার তৈরি করেছেন git init- এটি ভুল , আপনার git initলোকাল তৈরি করা উচিত নয় , পরিবর্তে প্রকল্পটি আপনার স্থানীয়টিতে ক্লোন করুন ব্যবহারgit clone

তারপরে টানুন

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