স্থানীয় পরিবর্তনগুলি উপেক্ষা করার সময় গিট টানুন?


489

ডিরেক্টরি করার কোনও উপায় git pullছাড়াই এবং একটি সম্পাদন না করে কোনও স্থানীয় ফাইল পরিবর্তনকে উপেক্ষা করার কোনও উপায় আছে কি git clone?


17
"উপেক্ষা" দ্বারা আপনি "ওভাররাইটস" বোঝাতে চান?
ক্যাসকেবেল

@Cascabel এটা সব স্থানীয় নতুন ফাইল ও ডিরেক্টরিগুলি, স্থানীয়ভাবে মোছা ফাইল ও ডিরেক্টরিগুলি, ইত্যাদি সংক্ষেপে সকল স্থানীয় পরিবর্তন, uncommit সমস্ত স্থানীয় করে প্রত্যাবর্তন মুছতে সব মোছে না, শুধু যেন কমান্ড চালানোর জন্য মানে rm -rf local_repo && git clone remote_url
ভিক্টর

উত্তর:


820

যদি আপনি বোঝাতে চান যে আপনি স্থানীয় পরিবর্তনগুলিকে ওভাররাইট করতে চান, যাতে মার্জিং গাছটি পরিষ্কার ছিল, ভাল, কার্যকারী গাছটি পরিষ্কার করুন:

git reset --hard
git pull

যদি সেখানে তালিকার চিহ্নবিহীন স্থানীয় ফাইল থাকে তবে আপনি git cleanসেগুলি সরাতে ব্যবহার করতে পারেন। ব্যবহার করুন git clean -funtracked ফাইল মুছে ফেলার জন্য, -dfuntracked ফাইল ও ডিরেক্টরিগুলি মুছে ফেলার জন্য, এবং -xdfuntracked বা উপেক্ষিত ফাইল বা ডিরেক্টরি মুছে ফেলার জন্য।

অন্যদিকে আপনি যদি স্থানীয় পরিবর্তনগুলি কোনওভাবেই রাখতে চান, আপনি টান দেওয়ার আগে এগুলি লুকিয়ে রাখতে স্ট্যাশ ব্যবহার করবেন, তারপরে এগুলি আবার প্রয়োগ করুন:

git stash
git pull
git stash pop

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


4
যদি git resetআপনার ফাইলগুলি এখনও রিমোটের থেকে পৃথক হয়, স্ট্যাকওভারফ্লো.com
কর্নেল আতঙ্ক

3
গিট এ যাবতীয় আজব জিনিস। গিট রিসেট - সম্পন্ন হয়েছে। তারপরে গিটের স্থিতি: আপনার শাখাটি 2 টি কমিট দ্বারা এগিয়ে রয়েছে।
শাইলেন

21
@ ShailenTJ "স্থানীয় পরিবর্তন" এর অর্থ এখানে অনিয়ন্ত্রিত পরিবর্তন, স্থানীয় অঙ্গীকার নয়। git reset --hardপূর্ববর্তীকে প্রভাবিত করে, পরবর্তীকালে নয়। আপনি যদি রিমোটের অবস্থানে পুরোপুরি রিসেট করতে চান, git reset --hard origin/<branch>- তবে প্রায়শই এবং এই ক্ষেত্রে, আপনি যে উত্সাহের চেয়ে এগিয়ে রয়েছেন সেই দু'টি কমিট আপনার কাজ করা, আপনি ফেলে দিতে চান এমন কিছু নয়।
ক্যাস্যাবেল

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

আপনি যদি স্থানীয়ভাবে বনাম মাথা পরিবর্তন নাও করতে পারেন? উদাহরণস্বরূপ, রেপো কেস সংবেদনশীল ফাইল সিস্টেমে তৈরি করা হয়েছিল এবং একটি সংবেদনশীল ফাইল সিস্টেমে ক্লোন করা হয়েছে এবং সেখানে একই নামের 2 টি ফাইল পৃথক কেসিং রয়েছে?
এক্সস্টার

305

আমার জন্য নিম্নলিখিত কাজ করেছেন:

(1) প্রথমে সমস্ত পরিবর্তন আনুন:

$ git fetch --all

(২) তারপরে মাস্টারটিকে পুনরায় সেট করুন:

$ git reset --hard origin/master

(3) টানুন / আপডেট করুন:

$ git pull

22
শীর্ষ উত্তরের সাথে যখন প্রচুর সমস্যা হয়েছিল তখন আমার জন্য দুর্দান্ত কাজ করেছিলেন। ধন্যবাদ!
0x0

6
এটি এমনকি আপনার স্থানীয় পরিবর্তনগুলি সংঘটিত করার পরেও কাজ করে তবে আপনি
আবারও

16
এটি শীর্ষ উত্তর হতে হবে :)
Purus

5
@ মার্কো সার্ভেটো: আপনি প্রথমে আপনার সমস্ত গিট পরিবর্তন আনুন তবে সেগুলি এখনও প্রয়োগ করবেন না। তারপরে আপনি মাস্টারটিকে শেষ অবস্থায় পুনরায় সেট করুন (আপডেট করেছেন)। আপনি যদি প্রথম পদক্ষেপটি এড়িয়ে যান তবে আপনি পুরানো মাস্টারে (স্থানীয়) পরিবর্তনগুলি ফিরিয়ে আনবেন। আমার অভিজ্ঞতা থেকে, আমি যেভাবে এটি বর্ণনা করেছি, কখনও সমস্যা সৃষ্টি করে না। অন্যান্য সমস্ত প্রচেষ্টা শেষে করা।
আর্টুর বারশেঘিয়ান

1
এটি আমার পক্ষে কাজ করেছিল, আমি মুছে ফেলা ফাইলগুলি পুনরুদ্ধার করা সহ আমার সমস্ত স্থানীয় পরিবর্তনগুলি উপেক্ষা করতে চেয়েছিলাম
নেরি

28

আপনি কেবল একটি আদেশ চান যা ঠিক একই ফলাফল দেয় rm -rf local_repo && git clone remote_url? আমি এই বৈশিষ্ট্যটিও চাই আমি ভাবছি কেন গিট এই জাতীয় কমান্ড সরবরাহ করে না (যেমন git recloneবা git sync), না এসএনএন এই জাতীয় আদেশ দেয় না (যেমন svn recheckoutবা svn sync)।

নিম্নলিখিত কমান্ড চেষ্টা করুন:

git reset --hard origin/master
git clean -fxd
git pull

আপনি যদি ইতিমধ্যে স্থানীয় কমিটগুলি অপসারণ করতে চান তখনও এটি কার্যকরভাবে কাজ করে।
ইউরি ঘেনসেভ

5
সতর্কবাণী !! git clean -fxdফাইলগুলি থেকেও সরিয়ে দেয় .gitignore
রমেশ নাভি

নিবন্ধন করুন ঠিক এটাই চেয়েছিল। যা চাওয়া তা হ'ল এটির পুনরায় ক্লোন করার একটি দ্রুত উপায়, অর্থাত্ সম্পূর্ণ স্থানীয় রেপো মোছা এবং তারপরে এটি ক্লোন করা।
ভিক্টর

27

কমান্ড বেলো সবসময় কাজ করবে না । আপনি যদি ঠিক করেন:

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla

$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

এবং তাই ...

করতে সত্যিই , নতুন করে শুরু thebranch ডাউনলোড এবং সব আপনার স্থানীয় পরিবর্তনগুলি মুছে যাওয়ার, শুধু একটি করুন:


$ git checkout thebranch
$ git reset --hard origin/thebranch

এটি ঠিক কাজ করবে।

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...

$ git status
# On branch thebranch
nothing to commit (working directory clean)

$ git checkout thebranch
Already on 'thebranch'

4
হ্যাঁ. চূড়ান্ত "স্থানীয় কী সে সম্পর্কে কোনও এফ প্রদান করবেন না" এর জন্য আমার এটির প্রয়োজন ছিল। ধন্যবাদ। :)
অ্যাডামিন


8

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


8

আপনি যদি লিনাক্সে থাকেন:

git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull

For for loop ট্র্যাকড ফাইলগুলিকে মুছে ফেলবে যা স্থানীয় রেপোতে পরিবর্তিত হয়েছে, সুতরাং git pullকোনও সমস্যা ছাড়াই কাজ করবে।
এটি সম্পর্কে সর্বোত্তম বিষয়টি হ'ল কেবল ট্র্যাক করা ফাইলগুলি রেপোতে থাকা ফাইলগুলি ওভাররাইট করা হবে, অন্য সমস্ত ফাইল অদৃশ্য হয়ে যাবে।


আমি মনে করি আপনি "ট্র্যাকড ফাইলগুলি" বোঝাতে চেয়েছিলেন যা আমার প্রয়োজন ঠিক তাই, ধন্যবাদ।
আলী

পাওয়ারশেলের সমতুল্য?
আর্লি

8

এটি করার সবচেয়ে সংক্ষিপ্ততম উপায়:

git pull --rebase --autostash

এর --autostashআগে জানতাম না , ধন্যবাদ!
শিরো

7

এটি আমার জন্য কাজ করেছে

git fetch --all
git reset --hard origin/master
git pull origin master

গৃহীত উত্তরের সাথে আমি সংঘাতের ত্রুটি পেয়েছি


এটি আর্টার বার্সেঘ্যানের 2015 এর জবাবের সাথে খুব মিল ... তবে আমি এখনও তৃতীয় আদেশের উদ্দেশ্য কী তা জানতে চাই: দ্বিতীয় আদেশের পরে কার্যকারী ফাইলগুলি পরিবর্তিত হয়েছে এবং তৃতীয় আদেশটি "ইতিমধ্যে আপ টু ডেট "
মাইকে রডেন্ট

এটি আমার পরিবেশে কাজ করা একমাত্র সংমিশ্রণ, সম্ভবত আপনি একটি ভিন্ন জিনিস দেখছেন, আমার জন্য আমার তিনটি কমান্ডের দরকার ছিল
পাবলো পাজোস

মজাদার. একটি সংস্করণ জিনিস হতে পারে। আমি গিট 2.7.4 এ আছি। তবে আমি আর্টার বার্সেঘিয়ানের একটি নতুন মন্তব্যও দেখেছি: "অন্যথায় আপনি নিজেকে দুর্ঘটনাক্রমে পুরানো মাস্টারের সাথে কাজ করতে দেখবেন।"
মাইকে রডেন্ট

হতে পারে, তবে কেবলমাত্র আমি বলতে পারি "এটি আমার পক্ষে কাজ করেছিল যখন অন্য কোন সমাধান হয়নি", সুতরাং এটি অন্যকে সাহায্য করতে পারে
পাবলো পাজোস


2

এটি বর্তমান শাখাটি নিয়ে আসবে এবং মাস্টারকে দ্রুত এগিয়ে দেওয়ার চেষ্টা করবে:

git fetch && git merge --ff-only origin/master

0

.gitignore

".Gitignore এ অযাচিত ফাইল যুক্ত করা ততক্ষণ কাজ করে যতক্ষণ আপনি প্রাথমিকভাবে কোনও শাখায় প্রতিশ্রুতিবদ্ধ না হন।"

এছাড়াও আপনি চালাতে পারেন:

git update-index --assume-unchanged filename

https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html

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