सवाल गिट के साथ बदली गई कई फाइलों में से केवल एक फ़ाइल को छीनें?


मैं अपनी शाखा में केवल एक से अधिक बदली गई फ़ाइलों को कैसे रोक सकता हूं?


2446
2018-06-14 20:52


मूल


मुझे नहीं लगता कि @ bukzor का स्वीकृत उत्तर प्रश्न के सही जवाब है जैसा कि पूछा गया था। git stash --keep-index सूचकांक रखता है, लेकिन यह stashes सब कुछ - सूचकांक और बाहर दोनों में। - Raman
@ एंटोनियो मुझे ऐसा लगता है कि आपकी बक्षीस वास्तव में एक अलग सवाल होना चाहिए, क्योंकि मूल प्रश्न में विशेष रूप से टोर्टोइस गिट के साथ कुछ भी नहीं है। - JesusFreke
@JesusFreke हाँ, परिणाम दिया गया है कि मैं 50 प्रतिनिधि बचा सकता था :) यह सिर्फ इतना है कि अगर आप "आंशिक छेड़छाड़ tortoisegit" खोजने की कोशिश करते हैं तो यह सवाल आपको रीडायरेक्ट किया जाता है। Tortoisegit यहां एक लोकप्रिय विषय प्रतीत नहीं होता है stackoverflow.com/questions/tagged/tortoisegit - Antonio
>>>>>>>>> git diff -- *filename* > ~/patch फिर git checkout -- *filename* और बाद में आप पैच को फिर से लागू कर सकते हैं git apply ~/patch - neaumusic
नीचे दिए गए सबसे मौजूदा उत्तर पुराने हैं। चूंकि गिट 2.13 (क्यू 2 2017) के साथ इसका समर्थन किया जाता है git stash push [--] [<pathspec>...]। - Ohad Schneider


जवाब:


चेतावनी

जैसा कि टिप्पणियों में उल्लेख किया गया है, यह सब कुछ स्टैज में रखता है, दोनों चरणबद्ध और अस्थिर होते हैं। स्टैच किए जाने के बाद - रखरखाव सूचकांक केवल सूचकांक छोड़ देता है। जब आप बाद में स्टैश पॉप करते हैं तो इससे विवाद विवाद हो सकता है।


यह सबकुछ छीन लेगा जिसे आपने पहले जोड़ा नहीं है। केवल git add चीजें जिन्हें आप रखना चाहते हैं, फिर इसे चलाएं।

git stash --keep-index

उदाहरण के लिए, यदि आप एक पुराने प्रतिबद्धता को एक से अधिक परिवर्तनों में विभाजित करना चाहते हैं, तो आप इस प्रक्रिया का उपयोग कर सकते हैं:

  1. git rebase -i <last good commit>
  2. कुछ बदलावों को चिह्नित करें edit
  3. git reset HEAD^
  4. git add <files you want to keep in this change>
  5. git stash --keep-index
  6. आवश्यकतानुसार चीजों को ठीक करें। मत भूलना git add कोई बदलाव।
  7. git commit
  8. git stash pop
  9. आवश्यकतानुसार # 5 से दोहराएं।
  10. git rebase --continue

1218
2017-11-30 21:28



मुझे यह दृष्टिकोण अधिक सरल होने लगता है: stackoverflow.com/a/5506483/457268 - k0pernikus
मुझे यकीन नहीं है कि यह क्यों उखाड़ फेंक रहा है। हर किसी के पास मुझसे अलग उम्मीद होनी चाहिए। मूल पोस्ट पूछ रहा है "मैं असामान्य परिवर्तनों का केवल एक हिस्सा कैसे छीन सकता हूं?" जब मैं उपयोग करता हूं git stash save -k, हाँ सूचकांक (हरा में git stat) संरक्षित है, लेकिन संपूर्ण परिवर्तन (हरा और लाल दोनों) छिद्र में चला जाता है। यह ओपी के अनुरोध का उल्लंघन करता है, "केवल कुछ बदलाव छेड़छाड़ करें"। मैं केवल कुछ लाल (भविष्य के उपयोग के लिए) छीनना चाहता हूं। - Pistos
यदि आप @Pistos (जैसा कि मैं था) द्वारा प्रश्न के उत्तर में अधिक रुचि रखते हैं, तो यहां देखें: stackoverflow.com/questions/5506339/... - Raman
@ रमन: बढ़िया! git stash -p वही है जो मैं खोज रहा था। मुझे आश्चर्य है कि यह स्विच हाल ही में जोड़ा गया था। - Pistos
चेतावनी: git stash --keep-index टूट गया है। यदि आप अधिक परिवर्तन करते हैं, तो कोशिश करें git stash pop बाद में आप मर्ज विवाद प्राप्त करते हैं क्योंकि स्टैश में आपके द्वारा रखी गई बदली गई फ़ाइलों को शामिल किया जाता है, न केवल उन लोगों को जिन्हें आपने नहीं रखा था। उदाहरण के लिए: मैं फ़ाइलों को ए और बी बदलता हूं, फिर बी को दबाता हूं, क्योंकि मैं ए में परिवर्तनों का परीक्षण करना चाहता हूं; मुझे ए के साथ एक समस्या मिलती है जिसे मैं ठीक करता हूं; मैं ए प्रतिबद्ध करता हूँ; अब मैं अनस्टैश नहीं कर सकता क्योंकि ए का पुराना संस्करण किसी भी अच्छे कारण के लिए संघर्ष में नहीं है क्योंकि विलय संघर्ष होता है। अभ्यास में ए और बी कई फाइलें हो सकती हैं, शायद बाइनरी छवियां या कुछ भी, इसलिए मुझे मूल रूप से छोड़ना और बी खोना है। - rjmunro


आप भी उपयोग कर सकते हैं git stash save -p "my commit message"। इस तरह आप चुन सकते हैं कि कौन से शिकारी को छिपाने के लिए जोड़ा जाना चाहिए, पूरी फाइलों का भी चयन किया जा सकता है।

आपको प्रत्येक हंक के लिए कुछ क्रियाओं के साथ संकेत दिया जाएगा:

   y - stash this hunk
   n - do not stash this hunk
   q - quit; do not stash this hunk or any of the remaining ones
   a - stash this hunk and all later hunks in the file
   d - do not stash this hunk or any of the later hunks in the file
   g - select a hunk to go to
   / - search for a hunk matching the given regex
   j - leave this hunk undecided, see next undecided hunk
   J - leave this hunk undecided, see next hunk
   k - leave this hunk undecided, see previous undecided hunk
   K - leave this hunk undecided, see previous hunk
   s - split the current hunk into smaller hunks
   e - manually edit the current hunk
   ? - print help

2619
2017-07-31 11:59



यह शीर्ष पर होना चाहिए, क्योंकि यह सीधे सबसे सरल दृष्टिकोण के साथ प्रश्न का उत्तर देता है। काश मैं "ए" / "डी" विकल्प देख रहा था (और कोशिश करने से पहले इस जवाब को पूरी तरह से पढ़ा था), क्योंकि मेरे पास स्टैश में जोड़ने के लिए एक पूरी फ़ाइल थी, और पूरी तरह से बाहर करने के लिए एक और फ़ाइल। फिर भी यह मेरे लिए ठीक काम किया; मेरे पास बहुत सारे शिकारी नहीं थे। (शायद यह 2010 में किसी के द्वारा सुझाव नहीं दिया गया था जब मूल प्रश्न पोस्ट किया गया था क्योंकि यह सुविधा उस समय गिट में नहीं थी?) - Liam
यह नहीं था। तथ्य के लगभग 7 साल बाद, इसे डार्क्स से उधार लिया गया था। - nomen
मैं एक TortoiseGit व्यसन हूँ। हालांकि TortoiseGit का समर्थन नहीं करता है stash -p। मैं यह जवाब देता हूं क्योंकि यह सबसे इंटरैक्टिव / उपयोगकर्ता के अनुकूल है। - Antonio
आप जोड़ना चाहेंगे: git stash save -p my stash message; चूंकि Argumenst का आदेश बहुत सहज नहीं है ... - Chris Maes
इस के बीच और git log -p, मुझे लगता है -p ध्वज का मतलब होना चाहिए "मुझे जो अच्छी चीज चाहिए वह करें लेकिन मुझे नहीं पता कि कैसे व्यक्त किया जाए।" - Kyle Strand


चूंकि गिट मूल रूप से सभी भंडारों के प्रबंधन के बारे में है सामग्री और सूचकांक (और एक या कई फाइलें नहीं) git stash सौदों, आश्चर्य की बात नहीं है, सभी कामकाजी निर्देशिका के साथ

दरअसल, गिट 2.13 (क्यू 2 2017) के बाद से, आप अलग-अलग फाइलों को छीन सकते हैं:

git stash push [--] [<pathspec>...]

देख "विशिष्ट फ़ाइलों में स्टैश परिवर्तन" अधिक जानकारी के लिए।


मूल उत्तर (नीचे, जून 2010) मैन्युअल रूप से चुनने के बारे में था जिसे आप छिपाना चाहते हैं।

Casebash टिप्पणियाँ:

यह stash --patch मूल समाधान) अच्छा है, लेकिन अक्सर मैंने कई फाइलों को संशोधित किया है ताकि पैच का उपयोग परेशान हो

bukzorकी उत्तर (उत्थान, नवंबर 2011) के आधार पर एक और व्यावहारिक समाधान का सुझाव देता है
git add + git stash --keep-index
जाओ और उसका जवाब ऊपर उठाओ, जो आधिकारिक होना चाहिए (मेरे बजाय)।

उस विकल्प के बारे में, chhh टिप्पणियों में एक वैकल्पिक वर्कफ़्लो बताता है:

तुम्हे करना चाहिए "git reset --soft"आपकी स्पष्ट स्टेजिंग वापस पाने के लिए इस तरह के छेड़छाड़ के बाद:
  मूल स्थिति तक पहुंचने के लिए - जो एक स्पष्ट स्टेजिंग क्षेत्र है और केवल कुछ चुनिंदा गैर-चरणबद्ध संशोधनों के साथ, कोई भी सूचकांक को धीरे-धीरे रीसेट कर सकता है (आपके जैसे कुछ भी करने के बिना - bukzor - did)।


(मूल उत्तर जून 2010: मैनुअल स्टैश)

फिर भी, git stash save --patch आप आंशिक छेड़छाड़ को प्राप्त करने की अनुमति दे सकते हैं:

साथ में --patch, आप हड़ताल और काम करने वाले पेड़ के बीच के अंतर में हंसी का चयन कर सकते हैं।
  स्टैश एंट्री का निर्माण इस तरह किया जाता है कि इसकी इंडेक्स स्टेटस आपके भंडार की इंडेक्स स्थिति के समान ही है, और इसके वर्क्री में केवल वही परिवर्तन होते हैं जिन्हें आपने इंटरैक्टिव रूप से चुना है। चयनित परिवर्तन तब आपके वर्कट्री से वापस लुढ़क दिए जाते हैं।

हालांकि यह पूर्ण इंडेक्स को बचाएगा (जो कि आप जो चाहते हैं वह हो सकता है क्योंकि इसमें पहले से अनुक्रमित अन्य फाइलें शामिल हो सकती हैं), और आंशिक वर्कट्री (जो आप को छीनना चाहते हैं) जैसा दिख सकता है।

git stash --patch --no-keep-index

एक बेहतर फिट हो सकता है।


अगर --patchकाम नहीं करता है, एक मैन्युअल प्रक्रिया हो सकती है:

एक या कई फाइलों के लिए, एक मध्यवर्ती समाधान होगा:

  • उन्हें गिट रेपो के बाहर कॉपी करें
    (वास्तव में, eleotlecram एक प्रस्ताव है दिलचस्प विकल्प)
  • git stash
  • उन्हें वापस कॉपी करें
  • git stash # इस बार, केवल वही फाइलें जिन्हें आप चाहते हैं
  • git stash pop stash@{1} # अपनी सभी फाइलों के संशोधनों को दोबारा लागू करें
  • git checkout -- afile # किसी भी स्थानीय संशोधन से पहले, फ़ाइल को HEAD सामग्री में रीसेट करें

उस बोझिल प्रक्रिया के अंत में, आपके पास केवल एक या कई फाइलें होंगी।


238
2018-06-14 21:23



यह अच्छा है, लेकिन अक्सर मैंने कई फाइलों को संशोधित किया है ताकि पैच का उपयोग परेशान हो - Casebash
@ वॉनसी: प्रति जवाब सिर्फ एक जवाब रखने के लिए यह अच्छी शैली है। साथ ही, दूसरों के उत्तरों को कॉपी-पेस्ट करना आपके लिए खराब व्यवहार है। - bukzor
@bukzor: मुझे खेद है अगर मेरा संपादित उत्तर अनुचित लग रहा था। मेरा एकमात्र इरादा आपके उत्तर को और अधिक दृश्यता देना था। मैंने उस मंशा को स्पष्ट करने के लिए, फिर से अपनी पोस्ट संपादित की है। - VonC
@ काल: सच है, stackoverflow.com/a/13941132/6309 एक सुझाव देता है git reset (मिश्रित) - VonC
git is fundamentally about managing a all repository content and index and not one or several files - यह कार्यान्वयन हल हो रहा है समस्या हल हो रही है; यह एक स्पष्टीकरण है, लेकिन औचित्य नहीं है। कोई स्रोत नियंत्रण प्रणाली "कई फाइलों का प्रबंधन" के बारे में है। बस देखें कि कौन सी टिप्पणियां अधिक से अधिक हो गई हैं। - Victor Sergienko


कब git stash -p (या git add -p साथ में stash --keep-index) बहुत बोझिल होगा, मुझे उपयोग करना आसान लगता है diff, checkout तथा apply:

केवल एक विशेष फ़ाइल / डीआईआर को "छिपाने" के लिए:

git diff path/to/dir > stashed.diff
git checkout path/to/dir

फिर बाद में

git apply stashed.diff

76
2018-02-12 13:44



के लिए दिलचस्प विकल्प git add -p मैंने उपरोक्त अपने उत्तर में उल्लेख किया है। +1। - VonC
ध्यान दें कि यदि आपके पास बाइनरी फ़ाइलें हैं (जैसे पीएनजी) वे diff फ़ाइल में आउटपुट नहीं होंगे। तो यह 100% समाधान नहीं है। - void.pointer
@RobertDailey: यह मेरे लिए एक दिलचस्प बिंदु है, जैसा कि git diff > file.diff तथा git apply मेरे सामान्य आंशिक छिद्र उपकरण हैं। मुझे स्विच करने पर विचार करना पड़ सकता है git stash -p बड़े बदलावों के लिए। - thekingoftruth
@thekingoftruth यहां उपनाम है जिसका उपयोग मैं पैच फ़ाइलों को बनाने के लिए करता हूं, और यह कर देता है समर्थन द्विआधारी: patch = log --pretty=email --patch-with-stat --reverse --full-index --binary। नोट, हालांकि, पैच के लिए आपके परिवर्तनों की आवश्यकता है। - void.pointer
यह मेरे लिए स्पष्ट रूप से काम नहीं कर रहा था अगर फ़ाइल को छीनने की तरह कुछ था ../../foo/bar.txt। पैच ठीक उत्पन्न करता है, लेकिन पैच को लागू करने के लिए मुझे रिपोजिटरी रूट पर जाने की आवश्यकता है। तो अगर आपको इससे परेशानी हो रही है - बस सुनिश्चित करें कि आप इसे रिपॉजिटरी रूट निर्देशिका से कर रहे हैं। - Michael Anderson


मान लें कि आपके पास 3 फाइलें हैं

a.rb
b.rb
c.rb

और आप केवल b.rb और c.rb को छीनना चाहते हैं लेकिन a.rb नहीं

आप ऐसा कुछ कर सकते हैं

# commit the files temporarily you don't want to stash
git add a.rb
git commit -m "temp" 

# then stash the other files
git stash save "stash message"

# then undo the previous temp commit
git reset --soft HEAD^
git reset

और तुम कर चुके हो! HTH।


43
2017-10-31 07:10





उपयोग git stash push, इस तरह:

git stash push [--] [<pathspec>...]

उदाहरण के लिए:

git stash push -- my/file.sh

यह वसंत 2017 में जारी गिट 2.13 के बाद उपलब्ध है।


34
2017-08-15 13:10



लेकिन मैं जिक्र करता हूं git stash push पहले से मौजूद मेरा जवाब ऊपर पिछले मार्च, 5 महीने पहले। और मैंने यहां बताया कि नया गिट 2.13 कमांड यहां दिया गया है: stackoverflow.com/a/42963606/6309। - VonC
मुझे खुशी है कि गिट इतनी जल्दी आगे बढ़ रहा है, लंबे समय तक यह संभव नहीं था और फिर 2.13 जारी किया गया और अचानक एक सरल समाधान उपलब्ध है! - sandstrom


ऐसा करने का एक और तरीका:

# Save everything
git stash 

# Re-apply everything, but keep the stash
git stash apply

git checkout <"files you don't want in your stash">

# Save only the things you wanted saved
git stash

# Re-apply the original state and drop it from your stash
git stash apply stash@{1}
git stash drop stash@{1}

git checkout <"files you put in your stash">

मैं इस के साथ आया (एक बार फिर) इस पृष्ठ पर आया और पहले दो उत्तरों पसंद नहीं आया (पहला जवाब सिर्फ सवाल का जवाब नहीं देता है और मुझे काफी काम नहीं करना पड़ेगा -p इंटरैक्टिव मोड)।

यह विचार वही है जैसा कि @VonC ने भंडार के बाहर फ़ाइलों का उपयोग करने का सुझाव दिया है, आप उन बदलावों को सहेजते हैं जिन्हें आप कहीं भी चाहते हैं, उन परिवर्तनों को हटाएं जिन्हें आप अपने छेड़छाड़ में नहीं चाहते हैं, और फिर उन तरीकों को दोबारा लागू करें जिन्हें आप बाहर ले गए थे। हालांकि, मैंने "कहीं" के रूप में गिट स्टैश का उपयोग किया (और नतीजतन, अंत में एक अतिरिक्त कदम है: आप जिस छिद्र में डालते हैं उसे हटाते हैं, क्योंकि आपने इन्हें रास्ते से बाहर ले जाया है)।


25
2018-02-05 10:16



मैं इस दृष्टिकोण को सबसे ज्यादा पसंद करता हूं। यह केवल छेड़छाड़ और कमांड का उपयोग करके कछुआ में एक आसान वर्कफ़्लो प्रदान करता है। - Mark Ch
एसओ का उपयोग कर एसओ पर जवाब का जिक्र सलाह नहीं है। रेटिंग बदलते समय स्थिति बदल जाती है। - Bryan Ash
@ ब्रायनअश ठीक है, ऐसा नहीं है कि यह यहां मायने रखता है। मैं वास्तव में अन्य उत्तरों का जिक्र करने के बजाय एक उपाख्यान दे रहा हूं। संदेश यह है कि मुझे समुदाय को पसंद किए गए उत्तरों पसंद नहीं आया और वास्तव में इन उत्तरों में क्या नहीं है। इसके अलावा, दूसरे और तीसरे उत्तर के बीच 900 वोट अंतर निकट भविष्य में बदलने की संभावना नहीं बनाते हैं, और यदि इसे कभी भी बदलना चाहिए तो मैं हमेशा इसे "उस समय उत्तर देने के लिए शीर्ष" कहने के लिए संपादित कर सकता हूं। वास्तव में, मैं नहीं देखता कि इस स्थिति में यह किसी प्रकार की समस्या है। - Jasper


अपडेट (2/14/2015) - मैंने संघर्ष के मामले को बेहतर तरीके से संभालने के लिए स्क्रिप्ट को थोड़ा सा लिखा है, जिसे अब .rej फ़ाइलों के बजाय अनमोल संघर्ष के रूप में प्रस्तुत किया जाना चाहिए।


मैं अक्सर @ bukzor के दृष्टिकोण के विपरीत करने के लिए और अधिक सहज महसूस करता हूं। यही है, कुछ बदलावों को चरणबद्ध करने के लिए, और फिर केवल उन चरणबद्ध परिवर्तनों को छेड़छाड़ करें।

दुर्भाग्यवश, गिट एक गिट स्टैश - केवल इंडेक्स या इसी तरह की पेशकश नहीं करता है, इसलिए मैंने ऐसा करने के लिए एक स्क्रिप्ट को चाबुक किया।

#!/bin/sh

# first, go to the root of the git repo
cd `git rev-parse --show-toplevel`

# create a commit with only the stuff in staging
INDEXTREE=`git write-tree`
INDEXCOMMIT=`echo "" | git commit-tree $INDEXTREE -p HEAD`

# create a child commit with the changes in the working tree
git add -A
WORKINGTREE=`git write-tree`
WORKINGCOMMIT=`echo "" | git commit-tree $WORKINGTREE -p $INDEXCOMMIT`

# get back to a clean state with no changes, staged or otherwise
git reset -q --hard

# Cherry-pick the index changes back to the index, and stash.
# This cherry-pick is guaranteed to succeed
git cherry-pick -n $INDEXCOMMIT
git stash

# Now cherry-pick the working tree changes. This cherry-pick may fail
# due to conflicts
git cherry-pick -n $WORKINGCOMMIT

CONFLICTS=`git ls-files -u`
if test -z "$CONFLICTS"; then
    # If there are no conflicts, it's safe to reset, so that
    # any previously unstaged changes remain unstaged
    #
    # However, if there are conflicts, then we don't want to reset the files
    # and lose the merge/conflict info.
    git reset -q
fi

आप उपरोक्त स्क्रिप्ट को इस रूप में सहेज सकते हैं git-stash-index कहीं आपके रास्ते पर, और फिर इसे गिट स्टैश-इंडेक्स के रूप में आमंत्रित कर सकते हैं

# <hack hack hack>
git add <files that you want to stash>
git stash-index

अब स्टैश में एक नई प्रविष्टि होती है जिसमें केवल आपके द्वारा किए गए परिवर्तन शामिल होते हैं, और आपके काम करने वाले पेड़ में अभी भी कोई अस्थिर परिवर्तन नहीं होता है।

कुछ मामलों में, काम करने वाले पेड़ के परिवर्तन सूचकांक में परिवर्तन पर निर्भर हो सकते हैं, इसलिए जब आप सूचकांक में परिवर्तन को रोकते हैं, तो काम करने वाले पेड़ में परिवर्तन एक संघर्ष होता है। इस मामले में, आपको सामान्य अनमोल संघर्ष मिलेंगे जिन्हें आप गिट मर्ज / गिट मेरेटूल / आदि के साथ हल कर सकते हैं।


22
2018-06-16 21:00



सिफारिश pushd के बजाय cd तथा popd स्क्रिप्ट के अंत में यदि स्क्रिप्ट सफल हो जाती है, तो उपयोगकर्ता इसे चलाने से पहले उसी निर्देशिका में समाप्त होता है। - Nate
@Nate: जहां तक ​​मुझे पता है, इसे केवल उपयोगकर्ता के लिए निर्देशिका को बदलना चाहिए यदि उन्होंने स्क्रिप्ट को सोर्स किया था। यदि आप सामान्य रूप से स्क्रिप्ट (~ / bin / git-stash-index) चलाते हैं, या गिट (गिट स्टैश-इंडेक्स) के माध्यम से, यह एक अलग टर्मिनल सत्र में चलाया जाता है, और उस सत्र में कोई भी कार्यशील निर्देशिका परिवर्तन प्रभावित नहीं करता है उपयोगकर्ता के टर्मिनल सत्र में कार्यशील निर्देशिका। क्या आप एक सामान्य उपयोग के मामले से अवगत हैं जब यह सच नहीं है? (स्क्रिप्ट को सोर्सिंग के अलावा, जिसे मैं "सामान्य" नहीं मानूंगा) - JesusFreke


चूंकि गिट में शाखाएं बनाना तुच्छ है, इसलिए आप केवल एक अस्थायी शाखा बना सकते हैं और इसमें व्यक्तिगत फाइलों की जांच कर सकते हैं।


16
2018-06-28 12:07



आप अस्थिर संपादन वाले शाखा नहीं बना सकते हैं। आप आसानी से स्थानांतरित कर सकते हैं सब एक नई शाखा (स्टैश / स्टैश पॉप) के संपादन, लेकिन फिर आप स्क्वायर वन पर वापस आ गए हैं: आप दूसरों को खोए बिना, केवल कुछ संपादनों के साथ अपनी शाखा का परीक्षण कैसे करते हैं? - bukzor
मैंने अभी अस्थिर संपादन के साथ एक शाखा बनाई है। - shangxiao
आप नहीं कर सकते स्विच यदि आपके पास स्थानीय परिवर्तन हैं तो शाखाएं। हालांकि, आप एक नई शाखा बना सकते हैं और चुनिंदा फाइलों को जोड़ / प्रतिबद्ध कर सकते हैं, और फिर एक और शाखा बना सकते हैं और वही कर सकते हैं ... फिर मूल शाखा को चेकआउट करें और चुनिंदा रूप से वापस विलय करें। मैंने अभी किया है। यह वास्तव में चीजों को करने का प्राकृतिक तरीका प्रतीत होता है, क्योंकि आप अनिवार्य रूप से फीचर शाखाएं बना रहे हैं। - iain
@iain यदि आप स्थानीय परिवर्तन करते हैं, तब तक आप शाखाओं को स्विच कर सकते हैं, जब तक कि उन्हें विलय की आवश्यकता न हो। देख उदाहरण जिस्ट। यह कम से कम गिट v2.7.0 के रूप में सच है। - Colin D Bennett


बस अगर आप वास्तव में मतलब है परिवर्तनों को निरस्त करें जब भी आप उपयोग करते हैं git stash (और अस्थायी रूप से इसे छेड़छाड़ करने के लिए वास्तव में गिट स्टैश का उपयोग न करें), उस स्थिति में आप इसका उपयोग कर सकते हैं

git checkout -- <file>

[ध्यान दें]

उस git stash शाखाओं और सामान करने के लिए बस एक तेज़ और सरल विकल्प है।


11
2017-12-19 11:40





निम्न कोड को फ़ाइल में सहेजें, उदाहरण के लिए, नाम दिया गया stash। उपयोग है stash <filename_regex>। तर्क फ़ाइल के पूर्ण पथ के लिए नियमित अभिव्यक्ति है। उदाहरण के लिए, ए / बी / सीटीटीटी को छीनने के लिए, stash a/b/c.txt या stash .*/c.txt, आदि।

$ chmod +x stash
$ stash .*.xml
$ stash xyz.xml

फ़ाइल में प्रतिलिपि बनाने के लिए कोड:

#! /usr/bin/expect --
log_user 0
set filename_regexp [lindex $argv 0]

spawn git stash -p

for {} 1 {} {
  expect {
    -re "diff --git a/($filename_regexp) " {
      set filename $expect_out(1,string)
    }
    "diff --git a/" {
      set filename ""
    }
    "Stash this hunk " {
      if {$filename == ""} {
        send "n\n"
      } else {
        send "a\n"
        send_user "$filename\n"
      }
    }
    "Stash deletion " {
      send "n\n"
    }
    eof {
      exit
    }
  }
}

10
2017-07-11 18:55



महान विधि। मैं इसे उत्तर के रूप में चुना होगा। भविष्य के पाठकों के लिए युक्ति: आपको पूर्ण पथ पर मिलान करना होगा। जैसे stash subdir / foo.c - er0