গিট চিহ্নটি কীভাবে মুছে ফেলা হবে এবং একটি নতুন ফাইল ফাইল সরানো হিসাবে কীভাবে করবেন?


503

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


3
কোনো নির্দিষ্ট ফাইলের জন্য old_file.txt, তারপর git mv old_file.txt new_file.txtসমতূল্য git rm --cached old_file.txt, mv old_file.txt new_file.txt, git add new_file.txt
জার্ল

3
জারল: না, তা নয়। যদি ফাইলের মধ্যেও পরিবর্তন থাকে git mvতবে সেগুলি ক্যাশে যুক্ত করবে না, তবে git addকরবে। আমি ফাইলটি আবার সরাতে পছন্দ করি যাতে আমি ব্যবহার করতে পারি git mv, তারপরে git add -pআমার পরিবর্তন সেটটি পর্যালোচনা করতে।
ধর্মি

অনুগ্রহ করে আমার স্ক্রিপ্ট github.com/Deathangel908/python-t কৌশল
blob/


গত 8 বছরে গিটের উন্নতি হয়েছে, যদি এটি কেবল একটি ফাইল হয় তবে শীর্ষস্থানীয় উত্তর স্ট্যাকওভারফ্লো. com / a / 433142 / 459 কিছুই করেনি ... তবে আপনি একটি আরএম পেতে / আপডেট যোগ করতে stackoverflow.com/a/1541072/459 অনুসরণ করতে পারেন একটি এমভি / পরিবর্তিত অবস্থা।
dlamblin

উত্তর:


432

গিটটি স্বয়ংক্রিয়ভাবে মুভ / নামটি সনাক্ত করবে যদি আপনার পরিবর্তনটি খুব তীব্র না হয়। শুধু git addনতুন ফাইল, এবং git rmপুরানো ফাইল। git statusতারপরে এটি নামকরণ সনাক্ত করেছে কিনা তা প্রদর্শিত হবে will

অতিরিক্ত হিসাবে, ডিরেক্টরিগুলি ঘুরে দেখার জন্য আপনার প্রয়োজন হতে পারে:

  1. যে ডিরেক্টরি কাঠামো শীর্ষে সিডি।
  2. চালান git add -A .
  3. git status"নতুন ফাইল" এখন একটি "নাম পরিবর্তিত" ফাইল তা যাচাই করতে চালান

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


75
স্পষ্টকরণ: 'খুব বেশি তীব্র নয়' এর অর্থ হ'ল গিট ব্যবহার করে এমন কিছু সাদৃশ্য সূচকগুলির উপর ভিত্তি করে নতুন ফাইল এবং পুরাতন ফাইল> 50% 'অনুরূপ'।
pjz

150
এমন কিছু যা আমাকে কয়েক মিনিটের জন্য ঝুলিয়ে দিয়েছে: যদি নাম পরিবর্তন করা ফাইল এবং মুছে ফেলা ফাইলগুলি প্রতিশ্রুতিবদ্ধ করার জন্য মঞ্চস্থ না করা হয় তবে তারা মুছে ফেলা এবং একটি নতুন ফাইল হিসাবে প্রদর্শিত হবে। একবার আপনি এগুলি মঞ্চের সূচিতে যুক্ত করলে এটি এটিকে পুনরায় নাম হিসাবে স্বীকৃতি দেবে।
marczych

19
এটি উল্লেখযোগ্য যে " গিট স্বয়ংক্রিয়ভাবে মুভ / নাম পরিবর্তন " সনাক্ত করবে । এটা সময় আপনি ব্যবহার এত করে git status, git logবা git diff, না সময় আপনাকে যা এ git add, git mvবা git rm। পুনরায় নামকরণ সনাক্তকরণের বিষয়ে আরও কথা বলা, এটি কেবল মঞ্চযুক্ত ফাইলগুলির জন্যই বোধ করে। সুতরাং git mvফাইলের পরিবর্তন অনুসারে git statusএটি এটিকে একটি হিসাবে বিবেচিত হতে পারে renameতবে আপনি যখন ফাইলটিতে git stage(একই git add) ব্যবহার করবেন তখন এটি স্পষ্ট হয়ে যায় যে নামটি পরিবর্তন হিসাবে সনাক্তকরণের জন্য পরিবর্তনটি খুব বড়।
জার্ল

5
আসল কীটি একই সাথে নতুন এবং পুরানো উভয় git addজায়গাগুলি যুক্ত করা বলে মনে হচ্ছে , যা @ jrhorn424 এর পরামর্শ অনুসারে সম্ভবত একবারে পুরো রেপো হওয়া উচিত।
বায়ানারি

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

111

সরানো এবং পৃথক কমিটিতে সংশোধন করুন।


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

1
পার্ল এটিরও প্রয়োজন, এবং আমি গিটের চাল / পুনরায় নামটি সনাক্ত করতে পারি নি।
jrockway

10
@ জ্রোকওয়ে, আমার ছিল। ছোট ফাইলগুলির সাথে সহজেই ঘটে, আমি অনুমান করি যে তারা "সরানো মানে 'খুব' আলাদা 'হয়ে যায়।
এভিনিস

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

5
একটি বিষয় লক্ষণীয় হ'ল যদি git diffকোনও প্রতিশ্রুতি জুড়ে পুনরায় নামটি স্বীকৃতি না দেওয়া হয় তবে এটি দুটি কমিট জুড়েই এটি স্বীকৃতি দেয় না। এটি করার জন্য আপনার -Mউফ ব্যবহার --find-renamesকরতে হবে। সুতরাং যদি এই প্রশ্নে আপনাকে পরিচালিত প্রেরণাটি যদি পুনরায় নামটি একটি টানার অনুরোধে (অভিজ্ঞতা থেকে কথা বলার জন্য) দেখতে হয় তবে এটিকে দুটি কমিটে বিভক্ত করা আপনাকে সেই লক্ষ্যের দিকে এগিয়ে রাখবে না।
ম্যাটলিউ

44

এটি সবই উপলব্ধিযোগ্য জিনিস। গিট সাধারণত চলনগুলি স্বীকৃতি দেওয়ার চেয়ে বরং ভাল, কারণ জিআইটি একটি সামগ্রী ট্র্যাকার

আপনার "স্ট্যাটাস" এটিকে কীভাবে প্রদর্শন করে তা হ'ল সত্যই নির্ভর করে। এখানে পার্থক্যটি হ'ল-এম পতাকা।

গিট লগ - স্ট্যাট-এম

commit 9c034a76d394352134ee2f4ede8a209ebec96288
Author: Kent Fredric
Date:   Fri Jan 9 22:13:51 2009 +1300


        Category Restructure

     lib/Gentoo/Repository.pm                |   10 +++++-----
     lib/Gentoo/{ => Repository}/Base.pm     |    2 +-
     lib/Gentoo/{ => Repository}/Category.pm |   12 ++++++------
     lib/Gentoo/{ => Repository}/Package.pm  |   10 +++++-----
     lib/Gentoo/{ => Repository}/Types.pm    |   10 +++++-----
     5 files changed, 22 insertions(+), 22 deletions(-)

গিট লগ - স্ট্যাট

commit 9c034a76d394352134ee2f4ede8a209ebec96288
Author: Kent Fredric
Date:   Fri Jan 9 22:13:51 2009 +1300

    Category Restructure

 lib/Gentoo/Base.pm                |   36 ------------------------
 lib/Gentoo/Category.pm            |   51 ----------------------------------
 lib/Gentoo/Package.pm             |   41 ---------------------------
 lib/Gentoo/Repository.pm          |   10 +++---
 lib/Gentoo/Repository/Base.pm     |   36 ++++++++++++++++++++++++
 lib/Gentoo/Repository/Category.pm |   51 ++++++++++++++++++++++++++++++++++
 lib/Gentoo/Repository/Package.pm  |   41 +++++++++++++++++++++++++++
 lib/Gentoo/Repository/Types.pm    |   55 +++++++++++++++++++++++++++++++++++++
 lib/Gentoo/Types.pm               |   55 -------------------------------------
 9 files changed, 188 insertions(+), 188 deletions(-)

গিট সহায়তা লগ

   -M
       Detect renames.

   -C
       Detect copies as well as renames. See also --find-copies-harder.

76
দুঃখিত যদি এটি কিছুটা পেডেন্টিক বলে মনে হয় তবে "গিটটি চলনগুলি স্বীকৃতি দিতে সাধারণত তার চেয়ে ভাল, কারণ জিআইটি একটি বিষয়বস্তু ট্র্যাকার" আমার কাছে একটি অ-সিকুইটুর মতো বলে মনে হয়। এটি একটি বিষয়বস্তু ট্র্যাকার, হ্যাঁ, এবং সম্ভবত এটি চালগুলি সনাক্তকরণে ভাল হবে তবে একটি বিবৃতি অন্যটির থেকে সত্যই অনুসরণ করে না। কেবল এটি কোনও সামগ্রী ট্র্যাকারের কারণেই সরানো সনাক্তকরণটি ভাল নয়। প্রকৃতপক্ষে, কোনও সামগ্রী ট্র্যাকারটির কোনও চলন সনাক্তকরণ মোটেও হতে পারে না।
লরেন্স গনসাল্ভেস

1
@ ওয়ারেনসাইন আপনি যখন কোনও ডিরেক্টরিটির নাম পরিবর্তন করেন, সেই ডিরেক্টরিতে থাকা ফাইলের SHA1 এর কোনও পরিবর্তন হয় না। আপনার সমস্ত কিছুই একই SHA1 গুলি সহ একটি নতুন TREE অবজেক্ট। ডিরেক্টরি পরিবর্তনের কারণে উল্লেখযোগ্যভাবে ডেটা পরিবর্তনের কোনও কারণ নেই।
কেন্ট ফ্রেড্রিক

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

1
না। আমি এটি মোটেও দেখাইনি। আমি দেখিয়েছি গিট একটি অ্যাড + ডিলিটের ভান করতে সক্ষম, সামগ্রী একই হওয়ার কারণে এটি একটি নতুন নাম। কোনটি ঘটেছে তা জানার কোনও উপায় নেই এবং এটি যত্ন করে না। সমস্ত গিট মনে আছে "যুক্ত" এবং "মোছা"। "নামকরণ" কখনই রেকর্ড হয় না।
কেন্ট ফ্রেড্রিক 13

1
উদাহরণস্বরূপ, আমি ইদানীং একটি রেপোতে প্রচুর "অনুলিপি + সম্পাদনা" করেছি। এটি দেখার বেশিরভাগ উপায়গুলিতে কেবল "নতুন ফাইল" দেখা যায় তবে আপনি পাস করলে git log -M1 -C1 -B1 -D --find-copies-harderগিটটি "আবিষ্কার" করতে পারে যে নতুন ফাইলটি প্রথমে অনুলিপি করা হয়েছিল। কখনও কখনও এটি এটি সঠিকভাবে করে, অন্য সময়, এটি সম্পূর্ণ সম্পর্কিত নয় এমন ফাইলগুলি খুঁজে পায় যা অভিন্ন উপাদান রয়েছে content
কেন্ট ফ্রেড্রিক 13

36

git diff -Mবা git log -Mস্বতঃস্ফূর্ত পরিবর্তনগুলির সাথে স্বতঃস্ফুর্ত হওয়া উচিত যতক্ষণ না তারা স্বল্প পরিবর্তন হয় detect যদি আপনার ছোটখাট পরিবর্তনগুলি গৌণ না হয় তবে আপনি থ্রেশোল্ডের মিলটি হ্রাস করতে পারেন, যেমন

$ git log -M20 -p --stat

এটি ডিফল্ট 50% থেকে 20% এ হ্রাস করতে।


13
কনফিগারেশনে প্রান্তিক সংজ্ঞা নির্ধারণ করা কি সম্ভব?
পুনরায় সনাক্তকরণ

34

এখানে এক, বা কয়েকটি, পুনর্নবীকরণ এবং পরিবর্তিত ফাইলগুলির জন্য একটি দ্রুত এবং মলিন সমাধান।

ধরা যাক ফাইলটির নামকরণ হয়েছিল fooএবং এখন এটির নামকরণ হয়েছে bar:

  1. পুনঃনামকরণ barএকটি টেম্প নামের:

    mv bar side
    
  2. চেকআউট foo:

    git checkout HEAD foo
    
  3. পুনঃনামকরণ fooকরার barগীত সঙ্গে

    git mv foo bar
    
  4. এখন আপনার অস্থায়ী ফাইলটির পুনরায় নামকরণ করুন bar

    mv side bar
    

এই শেষ পদক্ষেপটি আপনার পরিবর্তিত সামগ্রী ফাইলে ফিরে আসে।

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

$ git status
On branch workit
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    renamed:    README -> README.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   README.md
    modified:   work.js

$ git add README.md work.js # why are the changes unstaged, let's add them.
$ git status
On branch workit
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    deleted:    README
    new file:   README.md
    modified:   work.js

$ git stash # what? let's go back a bit
Saved working directory and index state WIP on dir: f7a8685 update
HEAD is now at f7a8685 update
$ git status
On branch workit
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/

nothing added to commit but untracked files present (use "git add" to track)
$ git stash pop
Removing README
On branch workit
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    new file:   README.md

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    README
    modified:   work.js

Dropped refs/stash@{0} (1ebca3b02e454a400b9fb834ed473c912a00cd2f)
$ git add work.js
$ git status
On branch workit
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    new file:   README.md
    modified:   work.js

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    README

$ git add README # hang on, I want it removed
$ git status
On branch workit
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    deleted:    README
    new file:   README.md
    modified:   work.js

$ mv README.md Rmd # Still? Try the answer I found.
$ git checkout README
error: pathspec 'README' did not match any file(s) known to git.
$ git checkout HEAD README # Ok the answer needed fixing.
$ git status
On branch workit
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    new file:   README.md
    modified:   work.js

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    README.md
    modified:   work.js

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    Rmd

$ git mv README README.md
$ git status
On branch workit
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    renamed:    README -> README.md
    modified:   work.js

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   work.js

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    Rmd

$ mv Rmd README.md
$ git status
On branch workit
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    renamed:    README -> README.md
    modified:   work.js

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   README.md
    modified:   work.js

$ # actually that's half of what I wanted; \
  # and the js being modified twice? Git prefers it in this case.

27
এই প্রক্রিয়া কোন উদ্দেশ্য কাজ করে। গিট নামগুলির জন্য কোনও মেটাডেটা যুক্ত করে না, git mvএটি কেবল একটি git rm/ git addজুটির সুবিধার্থে । যদি আপনি ইতিমধ্যে 'এমভি বার ফু' করেছেন, তবে আপনাকে যা করতে হবে তা নিশ্চিত করেই আপনি git add fooএবং প্রতিশ্রুতিবদ্ধ git rm barহওয়ার আগে। এটি একটি একক git add -Aকমান্ড, বা সম্ভবত একটি git add foo; git commit -aসিকোয়েন্স হিসাবে সম্পন্ন হতে পারে ।
সিবি বেইলি

17
আমি শুধু জানি এটি করার আগে, গিট এটিকে একটি পদক্ষেপ হিসাবে স্বীকৃতি দেয়নি। আমি এটি করার পরে, গিট এটিকে একটি পদক্ষেপ হিসাবে স্বীকৃতি দিয়েছে।

8
এটি এটিকে একটি পদক্ষেপ হিসাবে স্বীকৃতি দেয়। তবে এটি এখন একটি অচঞ্চলিত পরিবর্তন হিসাবে পরিবর্তনও করেছে। একবার আপনি addফাইলটি পরে, গিট মুছে ফেলা / পরিবর্তন করে মুছে ফেলা / আবার যুক্ত করে added
মাইকেল পিফেল

4
এই git commitপদক্ষেপটি যদি আপনি পদক্ষেপ 3 পরে কাজ করেন তবে তা অন্যথায় ভুল is এছাড়াও, @ চার্লসবাইলি সঠিক, আপনি mv blah fooপ্রতিশ্রুতি অনুসারে 3 ধাপে খুব সহজেই একটি সাধারণ কাজ করতে পারেন এবং একই ফলাফল পেতে পারেন।
দাফ্লেমে

5
"এই প্রক্রিয়াটির কোনও উদ্দেশ্য হয় না" " - যখন গিটটি বিভ্রান্ত হয়ে পড়ে এবং মনে করে যে কোনও ফাইল মুছে ফেলা হয়েছে এবং অন্য একটি ফাইল যুক্ত করা হয়েছে তখন এটি একটি উদ্দেশ্য করে ser এটি গিটের বিভ্রান্তি দূর করে এবং মধ্যবর্তী কমিটি না করেই ফাইলটিকে স্পষ্টভাবে সরানো হিসাবে চিহ্নিত করে।
ড্যানাক

20

আপনি যদি git statusনামটি না দেখানোর কথা বলছেন তবে git commit --dry-run -aপরিবর্তে চেষ্টা করুন


11

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

সম্পাদনা করুন: সম্ভবত আপনি যদি নতুন ফাইল যুক্ত করেন এবং কমান্ড লাইন থেকে একটি গিট স্থিতি করেন তবে প্রতিশ্রুতি দেওয়ার আগে পুনরায় নামটি দেখাতে হবে।

সম্পাদনা 2: এছাড়াও, কচ্ছপ গিটে, প্রতিশ্রুতি সংলাপে নতুন ফাইল যুক্ত করুন তবে সেগুলি প্রতিশ্রুতিবদ্ধ করবেন না। তারপরে আপনি শো লগ কমান্ডটিতে যান এবং কার্য ডিরেক্টরিটি দেখুন, আপনি দেখতে পাবেন যে গিট প্রতিশ্রুতি দেওয়ার আগে নামটি সনাক্ত করেছে।

এখানে একই প্রশ্নটি উত্থাপিত হয়েছিল: https://tortoisegit.org/issue/1389 এবং এখানে বাগ ঠিক করার জন্য একটি বাগ হিসাবে লগ করা হয়েছে: https://tortoisegit.org/issue/1440 দেখা যাচ্ছে এটি টার্টোইজগিটের প্রতিশ্রুতি সহ একটি ডিসপ্লে সমস্যা আপনি যদি নতুন ফাইলগুলি যুক্ত না করেন তবে সংলাপ এবং গিট স্ট্যাটাসে ধরণের উপস্থিত রয়েছে।


2
আপনি ঠিক বলেছেন, টর্টোজাইজিট মুছে ফেলা + অ্যাড দেখায়, এমনকি গিট স্ট্যাটাস দেখাতেও মুছে ফেলা হয় + যোগ করলেও গিট কমিট করে - ড্রাই-রান শো মুছুন + অ্যাড করুন, গিট কমিট করার পরে আমি নাম পরিবর্তন দেখতে পাচ্ছি এবং অ্যাড মুছে ফেলছি না।
টমাস কুবেস

1
আমি নিশ্চিত যে ইতিহাস পুনরুদ্ধারের সময় স্বয়ংক্রিয় নামকরণ সনাক্তকরণ ঘটে ; কমিটমেন্ট এ এটি সর্বদা যোগ করা + মুছুন। এটি আপনার বর্ণনা করা সিজোফ্রেনিক আচরণও ব্যাখ্যা করে। সুতরাং অপশনগুলি এখানে: stackoverflow.com/a/434078/155892
মার্ক সোওল

10

অথবা আপনি কি coud উত্তর এই প্রশ্ন করার চেষ্টা এখানে দ্বারা অ্যাম্বার ! এটি আবার উদ্ধৃত করতে:

প্রথমে ম্যানুয়ালি সরানো ফাইলটির জন্য আপনার স্টেজড অ্যাড বাতিল করুন:

$ git reset path/to/newfile
$ mv path/to/newfile path/to/oldfile

তারপরে, ফাইলটি সরানোর জন্য গিট ব্যবহার করুন:

$ git mv path/to/oldfile path/to/newfile

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


7

git mvওএস মুভ কমান্ডের পরিবর্তে ফাইলগুলি স্থানান্তর করতে কমান্ডটি ব্যবহার করুন : https://git-scm.com/docs/git-mv

দয়া করে নোট করুন যে git mvকমান্ডটি কেবল গিট সংস্করণ 1.8.5 এবং তার চেয়ে বেশি ক্ষেত্রে বিদ্যমান। সুতরাং আপনাকে এই আদেশটি ব্যবহার করতে আপনার গিট আপডেট করতে হতে পারে।


3

সম্প্রতি কিছু ফাইল সরিয়ে (তবে সংশোধন না করা) করার সময় আমার এই সমস্যা হয়েছিল।

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

git mvসমস্যাটি বাছাই করে ব্যবহার করা হলেও এটি কেবল একক ফাইল / ডিরেক্টরিতে কাজ করে এবং আমার কাছে সংগ্রহস্থলের মূলটিতে প্রচুর ফাইল ছিল।

এটি ঠিক করার এক উপায় হ'ল কিছু বাশ / ব্যাচের যাদু নিয়ে।

আর একটি উপায় নিম্নলিখিত

  • ফাইলগুলি সরান এবং git commit। এটি লাইনের শেষ আপডেট করে।
  • ফাইলগুলি তাদের মূল অবস্থানে ফিরে যান, এখন যে তাদের নতুন লাইনের শেষ রয়েছে এবং git commit --amend
  • ফাইলগুলি আবার সরান এবং git commit --amend। এবার লাইনের শেষের কোনও পরিবর্তন নেই তাই গিত খুশি

1

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


0

এটি করার একটি আরও ভাল একটি "কমান্ড লাইন" উপায় আছে এবং আমি জানি এটি একটি হ্যাক, তবে আমি কখনও ভাল সমাধান খুঁজে পেতে সক্ষম হইনি।

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

  1. আপনি স্থানীয়ভাবে কী করেছেন তা পরীক্ষা করে দেখুন
  2. ২ য় প্রতিশ্রুতিতে মিনি এক-লাইন পরিবর্তন চেক করুন
  3. কচ্ছপের গিটটিতে জিআইটি লগ ইন করুন
  4. দুটি কমিট নির্বাচন করুন, ডান ক্লিক করুন এবং "একটি প্রতিশ্রুতিতে মার্জ করুন" নির্বাচন করুন

নতুন অঙ্গীকারটি এখন ফাইলের নামগুলি সঠিকভাবে প্রদর্শন করবে ... যা সঠিক ফাইল ইতিহাস বজায় রাখতে সহায়তা করবে।


0

আমি যখন একই সময়ে কোনও ফাইল সম্পাদনা করি, পুনর্নামকরণ করি এবং স্থানান্তরিত করি, তখন এর সমাধানগুলির কোনওটিই কাজ করে না। সমাধানটি দুটি কমিট (সম্পাদনা করুন এবং নাম পরিবর্তন / পৃথক পদক্ষেপে বিভক্ত) করা এবং তারপরে এটি একটি প্রতিশ্রুতিবদ্ধ করার fixupজন্য দ্বিতীয় কমিটের মাধ্যমে git rebase -iকরা।


0

এই প্রশ্নটি আমি যেভাবে বুঝি তা হ'ল "গিটটি কীভাবে একটি পুরানো ফাইল মুছে ফেলা যায় এবং ফাইল সরানো হিসাবে একটি নতুন ফাইল তৈরি করা যায়"।

হ্যাঁ ওয়ার্কিং ডিরেক্টরিতে একবার আপনি কোনও পুরানো ফাইল মুছুন এবং একটি পুরাতন ফাইল সন্নিবেশ করলে, git status" deleted: old_file" এবং " Untracked files: ... new_file" বলবে

তবে স্টেজিং ইনডেক্স / স্তরে একবার গিট ব্যবহার করে আপনি ফাইল যুক্ত এবং মুছে ফেললে এটি ফাইল সরানো হিসাবে স্বীকৃত হবে। এটি করার জন্য, ধরে নিই যে আপনি অপারেশন সিস্টেমটি ব্যবহার করে মুছে ফেলা এবং তৈরি করেছেন, নিম্নলিখিত আদেশগুলি দিন:

git add new_file
git rm old_file

যদি ফাইলের বিষয়বস্তু 50% বা ততোধিক অনুরূপ হয় তবে চলমান git statusকমান্ডটি আপনাকে দেওয়া উচিত:

renamed: old_file -> new_file

1
git statusবলবে " deleted: old_file" এবং " Untracked files: ... new_file:": যেহেতু না গীত 2.18 stackoverflow.com/a/50573107/6309
VonC
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.