স্থানীয় সংগ্রহস্থল শাখাটিকে রিমোট রিপোজিটরি হেডের মতোই পুনরায় সেট করুন


3849

আমি কীভাবে আমার স্থানীয় শাখাটিকে দূরবর্তী সংগ্রহস্থলের শাখার মতো হতে পুনরায় সেট করব?

আমি করেছিলাম:

git reset --hard HEAD

তবে আমি যখন একটি চালাচ্ছি git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

আপনি দয়া করে আমাকে বলতে পারেন কেন আমার এই 'সংশোধিত' হয়েছে? আমি এই ফাইলগুলি স্পর্শ করিনি? আমি যদি তা করি তবে আমি সেগুলি সরাতে চাই।


8
আউটপুট অনুযায়ী git statusআপনার দ্বিতীয় কমান্ড git reset --hard HEADব্যর্থ হয়েছে। যদিও আপনি এটি আউটপুট আটকান নি। → অসম্পূর্ণ প্রশ্ন।
রবার্ট সিমার

2
আপনি এখানে দুটি সমস্যার সাথে মিশ্রণ করছেন: 1) স্থানীয় শাখাটি যেখানে দূরবর্তী অবস্থানে পুনরায় সেট করতে হবে এবং 2) কীভাবে আপনার মঞ্চস্থ অঞ্চলটি (এবং সম্ভবত কার্যনির্বাহী ডিরেক্টরি) পরিষ্কার করতে হবে, তাই git statusবলে nothing to commit, working directory clean। - নির্ধারন করুন!
রবার্ট সিমার

উত্তর:


6684

দূরবর্তী শাখার সাথে ঠিক মিলে যাওয়ার জন্য আপনার শাখাটি সেট করা দুটি ধাপে করা যেতে পারে:

git fetch origin
git reset --hard origin/master

এটি করার আগে আপনি যদি আপনার বর্তমান শাখার অবস্থা সংরক্ষণ করতে চান (কেবলমাত্র ক্ষেত্রে), আপনি এটি করতে পারেন:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

আপনি যদি সিদ্ধান্ত নেন যে আপনি এটি আবার চান (বা পরে এটি দেখতে চান বা আপনার আপডেট হওয়া শাখার বিপরীতে আলাদা করতে চান) তবে আপনার কাজটি "আমার-সংরক্ষিত-কাজ" শাখায় সংরক্ষিত হয়েছে।

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

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


4
আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ। আপনি বলেছিলেন 'নোট করুন যে প্রথম উদাহরণটি ধরে নেওয়া হয়েছে যে দূরবর্তী রেপোর নাম "উত্স" এবং দূরবর্তী রেপোতে "মাস্টার" নামে পরিচিত শাখাটি আপনার স্থানীয় রেপোর শাখার সাথে মেলে।' আমি 'গিট রিসেট --হার্ড' চালানোর আগে আমার রিমোট রেপোর নাম এবং আমার শাখার নামটি কীভাবে ডাবল চেক করব? আবার ধন্যবাদ.
hap497

21
যদি আপনি সুস্পষ্টভাবে দূরবর্তীটির নাম না দিয়ে থাকেন তবে এর নাম সম্ভবত সম্ভবত "উত্স" (ডিফল্ট)। সমস্ত দূরবর্তী নামের একটি তালিকা পেতে আপনি "গিট রিমোট" ব্যবহার করতে পারেন। এরপরে আপনি "গিট রিমোট <নাম>" ব্যবহার করতে পারেন কোন শাখা একে অপরের সাথে ধাক্কা দেয় / টানবে (উদাহরণস্বরূপ, যদি আপনার "মাস্টার" শাখাটি "উত্স" নামের রিমোটে "মাস্টার" থেকে ক্লোন করা হয়েছিল, তবে আপনি একটি লাইন পাবেন যা বলে "মাস্টার রিমোট মাস্টারের সাথে একত্রী হয়")।
ড্যান মোল্ডিং

6
"এটি একটি নন-বেয়ার
স্টোরের

27
আনার ঠিক পরে, আমি বিশ্বাস করি আপনি git reset FETCH_HEAD --hardপরিবর্তে এটি করতে পারেন , পাশাপাশি, এটি একই অর্থ।
জিন 21

5
এটি আমি যুক্ত করা ফাইলগুলি সরান নি।
ত্রিশমেগিস্টোস

416

আমার করণীয় ছিল (গৃহীত উত্তরের সমাধান):

git fetch origin
git reset --hard origin/master

অনুসরণ করেছেন:

git clean -f

স্থানীয় ফাইল অপসারণ করতে

কোন ফাইলগুলি সরানো হবে তা দেখার জন্য (আসলে সেগুলি অপসারণ না করে):

git clean -n -f

89
এছাড়াও, git clean -d -fযদি তালিকুক্ত ডিরেক্টরি উপস্থিত থাকে।
Garg

54
এছাড়াওgit clean -fdx
স্বপ্নিল কোতোয়াল

14
আপনি যদি রিমোট শাখার হুবহু কপি চান তবে আপনাকে গিট ক্লিন-এফডিএক্স অনুসরণ করতে হবে। নোট করুন যে থারে দুটি চ।
ত্রিশমেগিস্টোস

6
git clean -fঅপরিহার্য অংশ আমার প্রয়োজন ছিল। ধন্যবাদ!
ডিজিও

17
ক্লিন কমান্ড ব্যবহার করে সতর্কতা অবলম্বন করুন। এটি অন্যান্য শাখা থেকে উপেক্ষা করা ফাইলগুলি মুছতে পারে।
মাইকুপ

306

প্রথমে HEADসংশ্লিষ্ট উজানের শাখার আগের ফিচারটি পুনরায় সেট করুন :

git reset --hard @{u}

নির্দিষ্টকরণ @{u}বা এর ভার্বোস ফর্মটি দেওয়ার সুবিধাটি @{upstream}হ'ল দূরবর্তী রেপো এবং শাখার নাম স্পষ্টভাবে নির্দিষ্ট করতে হবে না।

পরবর্তী, প্রয়োজন অনুসারে, ট্রেড করা ফাইলগুলি অপসারণ করুন allyচ্ছিকর সাথে -x:

git clean -df

পরিশেষে, প্রয়োজন অনুসারে, সর্বশেষ পরিবর্তনগুলি পান:

git pull

53
এটি গ্রহণীকৃতটির চেয়ে উত্তম উত্তরের মতো বলে মনে হচ্ছে, কারণ এটি সর্বদা স্থিতাবস্থার চেয়ে গতিশীলভাবে বর্তমান উজানের শাখায় পুনরায় সেট করেorigin/master
Jon z

@ জঞ্জ স্পট অন, এটি @{upstream}খুব কার্যকরী এবং উপাধিতে ব্যবহার করা যেতে পারে:alias resetthisbranch="git reset --hard @{upstream}"
সিদ্ধার্থ

1
@ গঙ্গাধরজান্নুর git reset --hardএকটি অঙ্গীকার প্রয়োজন, অন্যথায় আপনাকে কীসে পুনরায় সেট করতে হবে তা তা জানত না। @{u}একটি নির্দিষ্ট পয়েন্ট কমিট - ট্র্যাক করা শাখার মাথা, থেকে, যখন আপনি শেষ একটি করেনি git fetch
ক্রিস্টোফার বাক্কিজর্ড

1
@ ক্রিস্টোফার বাক্কিজর্ড এই ব্যাখ্যার জন্য ধন্যবাদ তবে কমিট হ্যাশ না করেও আমরা এটি করতে পারি git reset --hardযদিও এটি প্রত্যন্ত শাখায় পুনরায় সেট হবে না
গঙ্গাধর জেএনএএনইউ

2
যে কেউ এখানে প্রায় নতুন প্রশ্ন খুললেন, আপনি যদি পাওয়ারশেল থেকে গিট করেন তবে উদ্ধৃতি ( git reset --hard "@{u}") ব্যবহার করুন । আমাকে কিছুটা সময় নিল
এমপিস্টোরিং

112

git reset --hard HEADআসলে শুধুমাত্র শেষ প্রতিশ্রুতিবদ্ধ অবস্থায় পুনরায় সেট করুন। এই ক্ষেত্রে হেড আপনার শাখার প্রধানকে বোঝায়।

আপনার যদি বেশ কয়েকটি কমিট থাকে তবে এটি কার্যকর হবে না ..

আপনি সম্ভবত যা করতে চান তা হ'ল উত্সের মাথাটিকে পুনরায় সেট করা বা যাকে আপনার দূরবর্তী সংগ্রহস্থল বলা হয়। আমি সম্ভবত ঠিক কিছু করতে হবে

git reset --hard origin/HEAD

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


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

73

উপরের সমস্ত পরামর্শগুলি সঠিক, তবে প্রায়শই সত্যিই আপনার প্রকল্পটি পুনরায় সেট করতে আপনার নিজের মধ্যে থাকা ফাইলগুলিও সরিয়ে ফেলতে হবে .gitignore

আপনার প্রকল্প ডিরেক্টরি মুছে ফেলার এবং রিমোট থেকে পুনরায় ক্লোনিংয়ের নৈতিক সমতুল্য পেতে :

git fetch
git reset --hard
git clean -x -d -f

সতর্কবাণী : git clean -x -d -fহয় অপরিবর্তনীয় এবং আপনি ফাইল এবং ডাটা (যেমন কিছু আপনি ব্যবহার উপেক্ষা করেছে হারাতে পারেন .gitignore)।


12
সতর্কতা: "গিট ক্লিন -x -d -f" অপরিবর্তনীয় এবং আপনি .gitignore এ ফাইল এবং ডেটা শিথিল করতে পারেন
আর্কষ সতীজা

একটু খাটো: git clean -xdfসমান git clean -x -d -f
কিরিল

গিট ক্লিন-এফএক্সএক্সএক্স, রেপোতে থাকা সমস্ত কিছু মুছে ফেলতে
ট্রিসমেগিস্টোস

44

নীচের কমান্ড ব্যবহার করুন। এই কমান্ডগুলি স্থানীয় গিট থেকে সমস্ত অনারাকৃত ফাইলগুলি সরিয়ে ফেলবে

git fetch origin
git reset --hard origin/master
git clean -d -f

6
এটি একটি আরও সম্পূর্ণ প্রতিক্রিয়া কারণ আমাদের ছাড়াও আমাদের git clean -d -fস্থানীয় ডিরেক্টরিতে পুরানো শাখার কিছু জিনিস থাকবে। ধন্যবাদ মানুষ.
ফ্ল্যাভিও

3
এটি বাস্তবকে একেবারে দূরবর্তীর মতো করে তোলে। পরিষ্কার গুরুত্বপূর্ণ।
ডেভিড এস

1
truely অপসারণ সবকিছু Git পরিষ্কার -ffxd
Trismegistos

1
এটাই আমার দরকার ছিল। ধন্যবাদ
AllJs

38

প্রশ্নটি এখানে দুটি সমস্যার সাথে মিশে:

  1. স্থানীয় শাখাটি কীভাবে রিমোট যেখানে পয়েন্টে যায় the
  2. কীভাবে আপনার মঞ্চের অঞ্চলটি (এবং সম্ভবত কার্যকরী ডিরেক্টরি) সাফ করবেন, যাতে git statusবলা হয়nothing to commit, working directory clean.

ওয়ান স্টপ-উত্তরটি হ'ল:

  1. git fetch --prune (alচ্ছিক) রিমোট রেপোর স্থানীয় স্ন্যাপশট আপডেট করে। পরবর্তী কমান্ডগুলি কেবল স্থানীয়।
    git reset --hard @{upstream}রিমোটের স্ন্যাপশট যেখানে রয়েছে সেখানে স্থানীয় শাখার পয়েন্টার রাখে, পাশাপাশি সেই কমিটের ফাইলগুলিতে সূচক এবং কার্যনির্বাহী ডিরেক্টরি সেট করে।
  2. git clean -d --force "কর্মরত ডিরেক্টরি পরিষ্কার" বলতে গিটকে বাধা দেয় এমন চিহ্নহীন ফাইল এবং ডিরেক্টরিগুলি সরিয়ে দেয়।

1
@{upstream}সিনট্যাক্স সেট যা আপনি ডিফল্ট ভাবে ঘটে হতে আপস্ট্রিম প্রয়োজন git checkout <branchname>। - অন্যথায় এটি প্রতিস্থাপন origin/<branchname>
রবার্ট সিমার

যোগ -xকরার জন্য git cleanসবকিছু মুছে ফেলার জন্য কমিট নেই (অর্থাত এমনকি .gitignore ব্যবস্থায় উপেক্ষিত ফাইল)।
রবার্ট সিমার

22

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

আমি একটি "আপনি কি নিশ্চিত" প্রম্পট এবং কিছু প্রতিক্রিয়া আউটপুট যুক্ত করেছি

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

3
আপনি দূরবর্তীটির নাম পেতে "গিট রিমোট" ব্যবহার করতে পারেন। নির্দিষ্ট কিছু ক্ষেত্রে এটি "উত্স" হবে না
ইয়ুরিক

17

শর্ত দেওয়া হয় যে দূরবর্তী সংগ্রহস্থলটি হ'ল originএবং আপনি এতে আগ্রহী branch_name:

git fetch origin
git reset --hard origin/<branch_name>

এছাড়াও, আপনি বর্তমান শাখা রিসেট করার জন্য যেতে originকরার HEAD

git fetch origin
git reset --hard origin/HEAD

কিভাবে এটা কাজ করে:

git fetch origin কিছুই মার্জ করার বা পুনরায় চালু করার চেষ্টা না করে দূরবর্তী থেকে সর্বশেষতম ডাউনলোড করে।

তারপরে আপনি সবেমাত্র যা git resetএনেছেন সেটিকে ব্রাঞ্চটি পুনরায় সেট করে <branch_name>--hardবিকল্পটি আপনার কাজ গাছে ফাইল মেলে সকল ফাইল পরিবর্তন origin/branch_name


14

আমি করেছিলাম:

git branch -D master
git checkout master

সম্পূর্ণ শাখা পুনরায় সেট করতে


দ্রষ্টব্য, প্রয়োজনীয় শাখা মুছতে সক্ষম হতে আপনার অন্য শাখায় চেকআউট করা উচিত


5
আপনার আবার প্রশ্নটি পড়া উচিত, রিমোটকে প্রভাবিত করার মতো কিছুই নেই, তবে দূরবর্তী হিসাবে একইরূপে সেট করা, যাতে আপনার দূরবর্তী দিয়ে কোনও কিছু করা উচিত নয় এবং এটি আমার ক্ষেত্রে এবং উপরের বিষয়গুলিতে সহায়তা করে।
ব্যবহারকারী 2846569

যদি আপনি এটিকে দূরবর্তী হিসাবে একইরূপে সেট করতে চান তবে আপনার কিছুটা হলেও আনতে হবে আপনি সম্মত নন?
টিম

2
আপনার কমপক্ষে এটি চেষ্টা করে দেখতে বা ডক্সটি
ব্যবহারকারী 2846569

যাওয়ার উপায়, আমি শাখায় একটি দূষিত .pck ফাইল ছিল এবং বাকী বিকল্পগুলি কাজ করে না, ধন্যবাদ !!
লাকিব্রেইন

14

এখানে একটি স্ক্রিপ্ট রয়েছে যা সর্বাধিক জনপ্রিয় উত্তর যা প্রস্তাব দেয় তা স্বয়ংক্রিয় করে দেয় ... শাখাগুলি সমর্থন করে এমন একটি উন্নত সংস্করণের জন্য https://stackoverflow.com/a/13308579/1497139 দেখুন

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# see /programming/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  git branch "auto-save-at-$timestamp" 
fi
git fetch origin
git reset --hard origin/master

10

আমার মতো আপনার যদি সমস্যা হয়, আপনি ইতিমধ্যে কিছু পরিবর্তন করেছেন তবে এখন, যে কোনও কারণে আপনি এ থেকে মুক্তি পেতে চান, দ্রুততম উপায়টি এটি ব্যবহার করা git reset:

git reset --hard HEAD~2

আমার 2 টি কমিটের প্রয়োজন ছিল না, সুতরাং 2 সংখ্যাটি আপনি পুনরায় সেট করতে নিজের কমিটের সংখ্যায় এটি পরিবর্তন করতে পারেন।

সুতরাং আপনার প্রশ্নের জবাব - আপনি যদি রিমোট রিপোজিটরি হেডের আগে 5 টি কমিট করে থাকেন তবে আপনার এই কমান্ডটি চালানো উচিত:

git reset --hard HEAD~5

লক্ষ্য করুন যে আপনি যে পরিবর্তনগুলি করেছেন তা হারাবেন, তাই সাবধান!


7

পূর্ববর্তী উত্তরগুলি ধরে নিয়েছে যে রিসেট করা শাখাটি হ'ল বর্তমান শাখা (চেক আউট)। মন্তব্যে, ওপেন হ্যাপ 497 স্পষ্ট করে জানিয়েছে যে শাখাটি প্রকৃতপক্ষে চেক আউট করা হয়েছে, তবে এটি মূল প্রশ্নের দ্বারা স্পষ্টভাবে প্রয়োজন হয় না। যেহেতু কমপক্ষে একটি "সদৃশ" প্রশ্ন রয়েছে, তাই শাখা সম্পূর্ণরূপে রিপোজিটরি স্টেটে পুনরায় সেট করুন , যা শাখাটি পরীক্ষা করে নেওয়া হয়েছে বলে ধরে নেয় না, এখানে একটি বিকল্প রয়েছে:

ব্রাঞ্চ "মাইব্র্যাঞ্চ" বর্তমানে যদি চেক আউট না করা হয় তবে এটিকে রিমোট শাখায় "মাইরামোট / মাইব্র্যাঞ্চ" এর প্রধানে পুনরায় সেট করতে আপনি এই নিম্ন-স্তরের কমান্ডটি ব্যবহার করতে পারেন :

git update-ref refs/heads/mybranch myremote/mybranch

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

এটি করার সময় সতর্কতা অবলম্বন করুন, এবং gitkউত্স এবং গন্তব্য দ্বিগুণ করার জন্য ব্যবহার করুন বা অনুরূপ সরঞ্জাম। যদি আপনি দুর্ঘটনাক্রমে বর্তমান শাখায় এটি করেন (এবং গিট আপনাকে এ থেকে দূরে রাখে না) তবে আপনি বিভ্রান্ত হয়ে পড়তে পারেন, কারণ নতুন শাখার সামগ্রী কার্যকারী গাছের সাথে মেলে না, যা পরিবর্তিত হয়নি (আবার শাখাকে আপডেট করতে, যেখানে আগে ছিল)।


7

এটি আমি প্রায়শই ব্যবহার করি:

git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;

নোট আপনার স্থানীয় মাস্টার পরিবর্তন করতে এটি ভাল অনুশীলন না করার / শাখা বিকাশ, কিন্তু এর পরিবর্তে পরিবর্তনের টাইপ দ্বারা prepended কোন পরিবর্তন জন্য আরেকটি শাখা, শাখার নাম সঙ্গে চেকআউট, যেমন feat/, chore/,fix/ , ইত্যাদি সুতরাং আপনি শুধুমাত্র প্রয়োজন পরিবর্তন টানুন, মাস্টার থেকে কোনও পরিবর্তন ঠেলাবেন না। অন্য শাখাগুলির জন্য একই জিনিস যা অন্যরা অবদান রাখে। সুতরাং উপরেরটি কেবল তখনই ব্যবহার করা উচিত যখন আপনি অন্যদের দ্বারা প্রতিশ্রুতিবদ্ধ একটি শাখায় পরিবর্তন ঘটানো হয়েছে এবং পুনরায় সেট করার দরকার পড়ে। অন্যথায় ভবিষ্যতে অন্য যে শাখায় চাপ দেওয়া হয় তার পরিবর্তে চেকআউট করে চেক আউট শাখার মাধ্যমে উক্ত শাখায় চাপ দিন।

আপনি যদি আপনার স্থানীয় শাখাটি আপস্ট্রি শাখায় সর্বশেষ প্রতিশ্রুতিতে পুনরায় সেট করতে চান তবে আমার পক্ষে এখন পর্যন্ত কী কাজ করে তা হল:

আপনার রিমোটগুলি পরীক্ষা করে দেখুন, নিশ্চিত করুন যে আপনার প্রবাহ এবং উত্সটি আপনি যা প্রত্যাশা করেছেন তা প্রত্যাশিত না হলে ব্যবহার করুন git remote add upstream <insert URL>, যেমন আপনি যে মূল গিটহাব রেপো থেকে সংগ্রহ করেছিলেন, এবং / অথবা git remote add origin <insert URL of the forked GitHub repo>

git remote --verbose

git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force

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

git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop

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

git merge -s recursive -X theirs develop

ব্যবহারের সময়

git merge -s recursive -X ours develop

শাখা_নামের বিরোধী পরিবর্তনগুলি সংরক্ষণ করতে। অন্যথায় সাথে একটি মার্জারুল ব্যবহার করুন git mergetool

একসাথে সমস্ত পরিবর্তন সহ:

git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;

নোট করুন যে আপস্ট্রিম / ডেভেলপ করার পরিবর্তে আপনি কমিট হ্যাশ, অন্যান্য শাখার নাম ইত্যাদি ব্যবহার করতে পারেন ইত্যাদি, যেমন ওয়াল মাই জেডএস-এর মতো একটি সি এল এল সরঞ্জাম ব্যবহার করুন যাতে আপনার শাখাটি সবুজ কিনা তা নির্দেশ করে যে প্রতিশ্রুতিবদ্ধ হওয়ার মতো কিছুই নেই এবং কার্যনির্বাহী ডিরেক্টরি পরিষ্কার ( যা নিশ্চিত বা এটি দ্বারা যাচাইযোগ্য git status)। নোট যে এটি আসলে, বিকাশ মূল প্রজেক্টের যদি কিছু স্বয়ংক্রিয়ভাবে একটি কমিট দ্বারা, যেমন ইউএমএল ডায়াগ্রামে, লাইসেন্স হেডার, ইত্যাদি জুড়েছি তুলনায় করে যোগ করতে পারেন, যাতে ক্ষেত্রে, তারপর আপনি পরিবর্তন টান পারে origin developথেকে upstream develop, যদি প্রয়োজন ছিল।


6

উত্তর

git clean -d -f

আন্ডাররেটেড ছিল ( -ডি ডিরেক্টরিগুলি সরাতে)। ধন্যবাদ!


এবং পূর্ণরূপে, কোনও অতিরিক্ত ফাইল ছাড়াই 100% ক্লিন রেপো ফোল্ডার চালান git clean -xdf। এটি গিট সম্পর্কে সচেতন নয় এমন কোনও এবং সমস্ত ফাইল মুছে ফেলবে এবং আপনার ফোল্ডারটিকে গিটের অবজেক্ট তালিকার সাথে সঠিকভাবে মেলে তুলবে। নোট করুন যে আপনি "কী-যদি" সম্পাদন করতে -n(উদাহরণস্বরূপ git clean -nxdf) যুক্ত করতে পারেন এবং এটি আপনাকে বলবে যে এটি আসলে কিছু না করে কী মুছবে। ( গিট ক্লিন )
জেক

5

যদি আপনি HEADউভয় কার্যনির্বাহী ডিরেক্টরি এবং সূচক উভয়ের জন্য রাজ্যে ফিরে যেতে চান , তবে আপনার git reset --hard HEADপরিবর্তে করা উচিত HEAD^। (এটি একটি টাইপও হতে পারে ঠিক যেমন একক বনাম ডাবল ড্যাশের জন্য--hard ))

আপনার নির্দিষ্ট প্রশ্ন হিসাবে কেন সেই ফাইলগুলি স্থিতিস্থলে পরিবর্তিত হিসাবে উপস্থিত হয়, মনে হচ্ছে সম্ভবত আপনি একটি হার্ড রিসেটের পরিবর্তে নরম রিসেট করেছেন। এটি HEADপ্রতিশ্রুতিতে পরিবর্তিত ফাইলগুলি মঞ্চস্থ হয়ে উঠার কারণ হিসাবে প্রদর্শিত হবে যা সম্ভবত আপনি এখানে দেখছেন।


4

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

ভাগ্যক্রমে আমার যত্ন নেওয়া অন্য কোনও শাখা আমার ছিল না।

xkcd: গিট


1

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

REPO_PATH=$(pwd) && GIT_URL=$(git config --get remote.origin.url) && cd .. && rm -rf $REPO_PATH && git clone --recursive $GIT_URL $REPO_PATH && cd $REPO_PATH

* ধরে নিন আপনার .git ফাইলগুলি দুর্নীতিগ্রস্থ নয়


4
আপনি যদি নিশ্চিত হতে চান তবে আপনার অপারেটিং সিস্টেমটি পুনরায় ইনস্টল করতে পারেন!
সেবাস্তিয়ান শোলে

1

আপনি কি কোনও বৈশিষ্ট্য-শাখা তৈরি করতে ভুলে গেছেন এবং ভুল করে সরাসরি মাস্টারকে প্রতিশ্রুতিবদ্ধ করেছেন?

বিল্ড, পরীক্ষাগুলি এবং ফাইল-লকগুলি নিয়ে সমস্যা এড়াতে আপনি এখন ওয়ার্কট্রি (স্থানীয় ফাইল সিস্টেম) প্রভাবিত না করেই ফিচার ব্রাঞ্চ তৈরি করতে পারেন এবং মাস্টার ব্যাক সেট করতে পারেন :

git checkout -b feature-branch
git branch -f master origin/master


-3

যদি আপনার স্থানীয় পরিবর্তনগুলি সংরক্ষণে আপনি আপত্তি না করেন তবে তবুও উত্স / হেডের সাথে মেলে সংগ্রহের জন্য আপনার সংগ্রহস্থলটি আপডেট করতে চান, আপনি কেবল নিজের স্থানীয় পরিবর্তনগুলিকে স্ট্যাশ করতে পারেন এবং তারপরে টানতে পারেন:

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