Перейдіть до конкретної редакції


581

Я клонував сховище git певного проекту. Чи можу я повернути файли у початковий стан, і коли я переглядаю файли, перейдіть до версії 2, 3, 4 ... останньої? Я хотів би ознайомитись з тим, як проект розвивався.

Відповіді:


874

Використовуйте git checkout <sha1>для перевірки конкретного комітету.


2
Ви можете це зробити git log -n1. Але якщо git checkoutне вдалося, це марно витрачати зусилля.
Marcelo Cantos

2
Це працює. Довелося використовувати повний ша1 (не частковий). І якщо я хочу поставити проект на другу доопрацювання? git logпоказує лише першу комісію зараз, чи можу я дізнатися ша1 наступного комітету?
xralf

6
Вам слід лише використовувати достатню кількість ша1, щоб гарантувати унікальність. Можливо, у вас був нещасний збіг обставин. Git не має поняття "наступний" коміт; історія - це DAG, усі стрілки спрямовані назад. Вам слід запустити git log --onelineта вставити результат у текстовий файл для довідок (скорочені ша1 суми, які він надає, гарантовано є унікальними). Ще один варіант, якщо ваша історія лінійна - це визначити, скільки комісій існує від першого введення masterта використання git checkout master~543(якщо є 543 коміти), то git checkout master~542і т.д.
Marcelo Cantos,

19
і як повернутись до поточного комітету з "git checkout <sha1>"?
ア レ ッ ク ス

6
@AlexanderSupertramp Оформити відділення.
Марсело Кантос

50

Для переходу до певної версії / фіксації виконайте наступні команди. ХАШ-КОД, з якого ви можете отриматиgit log --oneline -n 10

git reset --hard HASH-CODE

Примітка. Після скидання на певну версію / фіксацію ви можете запустити git pull --rebase, якщо ви хочете повернути всі відхилені комісії.


1
Зауважте, що resetне просто оформити певну точку на графіку, вона також перемістить поточну перевірену гілку
Ліам

Крім того reset, всі ваші очікувані зміни відхиляються.
WilliamKF

2
- твердий прапор видалить будь-які комісії після згаданого хешу .... напевно, хочу додати сюди цей маленький шматочок. Я впевнений, що люди втратили історію і цікавились чому.
Urasquirrel

git pull --rebaseпрацює лише в тому випадку, якщо у вас є пульт дистанційного керування для репо-репортажу, і він актуальний.
Кіт Томпсон

19

Ви можете отримати графічний вигляд історії проекту за допомогою таких інструментів gitk. Просто запустіть:

gitk --all

Якщо ви хочете оформити певну галузь:

git checkout <branch name>

Для конкретного комітету використовуйте хеш SHA1 замість назви гілки. (Див. « Деревєти» у книзі спільноти Git , яку добре читати, щоб побачити інші варіанти навігації по вашому дереву.)

git log має цілий набір опцій для відображення детальної чи зведеної історії.

Я не знаю простий спосіб рухатися вперед в історії фіксації. Проекти з лінійною історією, мабуть, не все так часто. Ідея "ревізії", як у вас із SVN або CVS, не відображає все так добре в Git.


2
Будьте в курсі: git не буде брехати вам, надавши вам єдину лінійну історію проекту. Тобто, якщо проект насправді не розвивався таким чином.
Андрес Яан Так

Рухатися вперед логічно безглуздо (навіть у лінійній історії), оскільки фіксація не посилається на "майбутнє". У кращому випадку ви можете ідентифікувати всі зобов’язання, які мають спірне зобов’язання як батьківське. Зверніть увагу, що рух назад, теж не є тривіальною вправою, через злиття.
Марсело Кантос

5

Використовуючи ключ SHA1 комітету, ви можете зробити наступне:

  • Спочатку знайдіть потрібну фіксацію для певного файлу:

    git log -n <# commits> <file-name>

    Це, виходячи з вашого <# commits>, генерує список комітетів для певного файлу.

    Порада: якщо ви не впевнені в тому, що робить ви шукаєте, хороший спосіб з'ясувати це з допомогою наступної команди: git diff <commit-SHA1>..HEAD <file-name>. Ця команда покаже різницю між поточною версією комісії та попередньою версією комітету для конкретного файлу.

    ПРИМІТКА: ключ SHA1 комітету відформатований у git log -nсписку як:

вчинити <SHA1 id>

  • По-друге, оформити бажану версію:

    Якщо ви знайшли потрібну коммісію / версію, яку ви хочете, просто скористайтеся командою: git checkout <desired-SHA1> <file-name>

    Це дозволить розмістити версію файлу, який ви вказали, в області постановки. Щоб вивести його з області постановки, просто скористайтеся командою:reset HEAD <file-name>

Щоб повернутись туди, де вказано віддалене сховище, просто скористайтеся командою: git checkout HEAD <file-name>


2

Я опинився в ситуації, коли у нас є головна гілка, а потім ще одна гілка під назвою 17.0, а всередині цього 17.0 з'явився хеш-код, не кажіть "XYZ" . І замовник отримує збірку до цієї версії XYZ. Тепер ми натрапили на помилку, і це потрібно вирішити для цього замовника. Тож нам потрібно створити окрему гілку для цього клієнта до цього хеша "xyz". Отже ось як я це зробив.

Спочатку я створив папку з таким іменем клієнта на своїй локальній машині. Скажіть ім'я клієнта "AAA", коли ця папка створена, видайте наступну команду всередині цієї папки:

  1. git init
  2. git clone Після цієї команди ви перейдете на головну гілку. Тож перейдіть до потрібної гілки
  3. git checkout 17.0 Це приведе вас до відділення, де є ваша комісія
  4. git checkout Це займе ваш сховище до тих пір, поки не буде здійснено хеш. Подивіться назву відділення ур, яку вона змінила на хеш-код, який потрібно зробити. Тепер дайте назву гілки цьому хешу
  5. git branch ABC Це створить нову гілку на вашій локальній машині.
  6. git check ABC
  7. git push origin ABC Це підштовхне цю гілку до віддаленого сховища та створить гілку на сервері git. Ви закінчили.

1

Одним із способів було б створити всі коміти, коли-небудь зроблені для виправлень. перевірити початкову комісію, а потім застосувати патчі в порядку після прочитання.

використовувати git format-patch <initial revision>і потім git checkout <initial revision>. ви повинні отримати купу файлів у свого директора, починаючи з чотирьох цифр, які є виправленнями.

коли ви закінчите читати свою редакцію, просто зробіть те, git apply <filename>що має виглядати git apply 0001-*і рахувати.

Але мені дуже цікаво, чому ви просто не хочете читати самі патчі? Будь ласка, опублікуйте це у своїх коментарях, бо мені цікаво.

інструкція з git також дає мені це:

git show next~10:Documentation/README

Показує вміст файлу Documentation / README таким, яким вони були поточні в 10-му останньому комітеті наступної гілки.

Ви також можете ознайомитись із тим, git blame filenameщо дає вам список, де кожен рядок асоціюється з автором хеш-файлів.


1

Щоб дійти до конкретного скоєного коду, вам потрібен хеш-код цього коміта. Цей хеш-код можна отримати двома способами:

  1. Отримайте його зі свого облікового запису github / gitlab / bitbucket. (Це у вашому URL-адресі фіксації, тобто: github.com/user/my_project/commit/ commit_hash_code ), або ви можете
  2. git logі перевірте свої останні комісії в цій гілці. Він покаже вам хеш-код вашої фіксації та повідомлення, яке ви залишили під час введення коду. Просто скопіюйте та зробітьgit checkout commit_hash_code

Після переходу до цього коду, якщо ви хочете працювати над ним та вносити зміни, вам слід зробити іншу гілку git checkout -b <new-branch-name>, інакше зміни не збережуться.


0

Щоб перевірити вчинення (nb ви дивитесь на минуле!).

  • git checkout "commmitHash"

Щоб жорстоко перезапустити команду та видалити ті пізніші гілки, які ви, ймовірно, заплутали.

  • git reset - твердий "commmitHash"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.