Відділіться від попереднього комітету за допомогою Git


1797

Якщо я маю n комітів, як я можу відгалужуватися від n-3 фіксації?

Я бачу хеш кожного комітету.

Відповіді:


2543

Ви можете створити гілку за допомогою хеша:

git branch branchname <sha1-of-commit>

Або за допомогою символічної довідки:

git branch branchname HEAD~3

Щоб перевірити гілку при її створенні, використовуйте

git checkout -b branchname <sha1-of-commit or HEAD~3>

42
Git 1.8.2 дозвольте мені використати короткий sha1 для першої форми.
Dan Benamy

53
@MattFenwick Git дозволить вам використовувати скорочені хеші скрізь, де дозволений хеш, доки скорочений хеш є "унікальним" у сховищі. Тож якщо це не спрацювало, спробуйте додати ще одного символу з хеша.
ткнути

29
Щоб правильно натиснути нову гілку на сервер .. потрібен був цей останній крок:git push origin BRANCH_NAME
Джин Бо

3
запустити відділення з <sha1-of-commit>запуску, git checkout -b <name-of-branch> <sha1-of-commit>але якщо гілка вже існуєgit checkout -B <name-of-branch> <sha1-of-commit>
mostafazh

258

Для цього на github.com:

  1. Перейдіть до свого проекту.
  2. Клацніть на "Коміти".
  3. Клацніть на <> ("Огляд сховища в цей момент історії") на коміті, з якого ви хочете відділитись.
  4. Клацніть на "дерево: xxxxxx" вгорі ліворуч. Трохи під рядком мовної статистики ви отримаєте опцію "Знайти або створити відділення" (просто введіть там нову назву філії)Відділення від попереднього комітету

4
Питання не в github, а в gitub. Більшість серверів git - це не github.
Андерс Торнблад

46
Незважаючи на те, що це Github не git, він все ще був надзвичайно корисним!
Ліз

На жаль, він все ще відображає зміни від інших комітетів, яких я хотів уникнути, тому я шукав це питання
Максим

83

Магію можна здійснити скиданням git .

  1. Створіть нову гілку та перейдіть до неї (щоб усі ваші останні комісії зберігалися тут)

    git checkout -b your_new_branch

  2. Поверніться до попередньої робочої гілки (припустимо, що це головний)

    git checkout master

  3. Видаліть найновіші x зобов’язання, підтримуйте чистоту майстра

    git reset --hard HEAD~x # in your case, x = 3

З цього моменту всі останні x комітети є лише у новій гілці, а не у попередній робочій гілці (master).


7
Це те, що я шукав, оскільки він вилучає комітети з Майстра і робить це так, ніби ви згадали зробити гілку до того, як ці комісії були зроблені. Дякую.
superbeck

7
Просто не забувайте, що a git reset --hard- це не дуже гарна ідея, якщо ви вже підштовхнули зобов'язання до походження ...
LuisF

1
ви можете, git push --force якщо ви вже натискали гілку раніше
milan

Але будьте дуже обережні, використовуючи --force blog.developer.atlassian.com/force-with-lease
peater

74

Якщо ви не впевнені, на яку команду ви хочете зв'язатись заздалегідь, ви можете перевірити комірки та вивчити їх код (див. Джерело, компілювати, перевірити) за допомогою

git checkout <sha1-of-commit>

Після того, як ви знайдете команду, на яку хочете зв'язатись, ви можете зробити це всередині комітету (тобто, не повертаючись спочатку до головного майстра), просто створивши гілку звичайним способом:

git checkout -b <branch_name>

22
git checkout -b <branch-name> <sha1-of-commit>

1
Чим це відрізняється від " git branch branchname <sha1-of-commit>" (від прийнятої відповіді)?
Пітер Мортенсен

Не знаю. Я думаю, що вони рівноцінні. Я завжди використовую git checkout -bдля створення нової гілки.
Тайлер Лонг

10
stackoverflow.com/a/7987711/3590629 git гілка ... створює гілку, але залишає вас на поточній гілці. git checkout -b ... створює гілку і перемикає вас на неї.
esme_louise

9

Швидкий спосіб зробити це на репортажі Github:

  • Знайдіть конкретну комісію у своєму відділенні
  • Поруч із ідентифікатором SHA натисніть "Переглянути репо в цей момент історії"
  • Тут ви можете створити нову гілку з цього комітету введіть тут опис зображення

1
Це насправді застаріло
regetskcob

2
Питання не в github.
Андерс Торнблад

8

Просто запустіть:

git checkout -b branch-name <commit>

Наприклад :

git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8

checkoutКоманда з параметром -bбуде створити нову гілку і вона перемкне вас на нього


1
Мені це подобається багато. Спасибі
Дурень

чи можливо створити гілку на основі комітету SHA відгалуження функції, видаленого за допомогою запиту на виклик Або я маю відхилитися від виконання запиту на тягнення на майстра?
користувач2966445

запустити git fetchта git branchкомандувати у папці вашого проекту за допомогою терміналу, а потім перевірити, чи існує гілка функції, якщо це так, то так, звичайно, ви не зможете створити гілку з видалених гілок, ви також можете відновити видалення гілки у випадку, якщо гілка пішла
d1jhoni1b

4

Велике пов'язане питання: Як, чорт, ви це з'ясуєте, використовуючи --helpпараметр git? Спробуємо це:

git branch --help

Ми бачимо цей вихід:

NAME
       git-branch - List, create, or delete branches    

SYNOPSIS
       git branch [--color[=<when>] | --no-color] [-r | -a]
               [--list] [-v [--abbrev=<length> | --no-abbrev]]
               [--column[=<options>] | --no-column]
               [(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
               [--points-at <object>] [<pattern>...]
       git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
       git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
       git branch --unset-upstream [<branchname>]
       git branch (-m | -M) [<oldbranch>] <newbranch>
       git branch (-d | -D) [-r] <branchname>...
       git branch --edit-description [<branchname>]

Гоблебук.

Шукайте в тексті наступного тексту слово "здійснити". Ми знаходимо це:

   <start-point>
       The new branch head will point to this commit. It may be given as a branch name, a
       commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.

Ми кудись потрапляємо!

Тепер зосередимось на цій лінії гоблінгого куточка:

git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]

Зверніть це на це:

git branch <branchname> [<start-point>]

І зробили.


1
Я ненавиджу git. Дякую.
Байрон Вітлок

4

Для цього в Eclipse:

  • Перейдіть до точки зору "Git Repository Exploring".
  • Розгорніть «Теги» та виберіть команду, з якої потрібно створити відділення.
  • Клацніть правою кнопкою миші на команду та виберіть "Створити відділення".
  • Укажіть назву філії.

Це створить локальну філію для вас. Тоді, коли ви натискаєте свої зміни, ваша філія буде перенесена на віддалений сервер.


3

Ви можете зробити це в скрині.

  1. Клацніть на фіксацію
  2. У правій верхній частині екрана натисніть "Позначити цю фіксацію"
  3. Тоді ви можете створити нову гілку із створеного вами тегу.

Що це за GUI? GitHub?
ostrichofevil

Атласський Шташ
Девід Руан

3

Я зміг це зробити так:

git branch new_branch_name `git log -n 1 --skip 3 --format=%H`

Де потрібно ввести значення пропуску. 0 - останнє, 1 - попереднє, 2 - перед цим, тощо.


4
Чому б не просто скористатися HEAD~1(де 1 вказує 1 фіксування назад)?
jduncanator

1
Ваш шлях охоплений обраною відповіддю, і працює чудово. Міна - це інший спосіб, ніж обрана відповідь.
Майк Граф

3

Це створює гілку за допомогою однієї команди:

git push origin <sha1-of-commit>:refs/heads/<branch-name>

Я вважаю за краще цей спосіб краще, ніж опубліковані вище, тому що він створює гілку негайно (не вимагає додаткової команди push після цього).


3

Використання Sourcetree | Найпростіший спосіб.

  • По-перше, огляньте гілку, яку ви хочете взяти на себе, щоб створити нову гілку.
  • Потім подивіться на панель інструментів, виберіть Репозиторій> Відділення ... ярлик - Command + Shift + B.
  • І виберіть конкретне зобов'язання, яке ви хочете взяти на себе. І дайте нову назву філії, тоді створіть філію!

введіть тут опис зображення


нарешті знайшов цю корисну відповідь. Спасибі
Фірда Сахіді

1

Ось що я зробив:

C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'

C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
  master
* responsivenavigation

У цьому випадку 8a75b001096536b3216022484af3026aa9c7bb5bбула і стара фіксація, що належить до masterгалузі.


1

Перейдіть до певної комісії сховища git

Іноді, працюючи над сховищем git, ви хочете повернутися до певного комітету (редакції), щоб зробити знімок вашого проекту в певний час. Для цього все, що вам потрібно, хеш SHA-1 комітки, який ви можете легко знайти, перевіряючи журнал за допомогою команди:

git log --abbrev-commit --pretty=oneline

що дасть вам компактний перелік усіх комітетів та коротку версію хешу SHA-1.

Тепер, коли ви знаєте хеш комітету, який ви хочете перейти, ви можете скористатися однією з наступних 2 команд:

git checkout HASH

або

git reset --hard HASH

перевіряти

git checkout <commit> <paths>

Показує git замінити поточний стан шляхів своїм станом у заданому коміті. Шляхами можуть бути файли чи каталоги.

Якщо не вказано жодної гілки, git передбачає присвоєння HEAD.

git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.

Якщо шлях не задано, git переміщується HEADдо даної фіксації (тим самим змінюючи комітет, за яким сидите і працюєте).

git checkout branch //means switching branches.

скинути

git reset <commit> //re-sets the current pointer to the given commit.

Якщо ви на гілці (зазвичай ви повинні бути), HEAD і ця гілка переміщується на фіксацію.

Якщо ви перебуваєте у відірваному HEADстані, скидання git переміщується лише HEAD.Щоб скинути гілку, спочатку перевірте її.

Якщо ви хочете дізнатись більше про різницю між скиданням git та git checkout, я б рекомендував прочитати офіційний блог git .


2
дякую за вашу відповідь, FYI: Це: git log --abbrev-commit --pretty=oneline можна скоротити доgit log --oneline
Suhaib

0

Виберіть «Здійснити»

Для користувачів Git GUI ви можете візуалізувати всю історію (якщо потрібно), а потім клацніть правою кнопкою миші на об'єкт, з якого ви хочете відділитись, та введіть ім'я гілки.

Введіть назву відділення

Візуалізуйте всю історію


Це працюватиме лише у тому випадку, якщо користувач використовує будь-яку ОС на базі інтерфейсу, наприклад Windows & MAC
Saurabhcdt

Це вірно. Моя відповідь спеціально починається зі слів "Для користувачів Git GUI ...". Я не дав відповіді, яка буде працювати для всіх - це вже зроблено. Я дав альтернативний метод, який може бути простішим для багатьох людей. Я думаю, що причина моєї відповіді не подобається в тому, що вона не є рішенням для всіх, але це вже існує з кількома тисячами нагород. Однак це не робить мою відповідь неправильною "Для користувачів Git GUI!". СТВОРИТИ НОВУ ФІЛЬМУ там у графічному інтерфейсі. Я сумніваюся, що я єдина людина у світі, яка ним користується!
Іван

0

Щоб прийняти відповідь у Visual Studio 2015 та 2017:

Клацніть внесення змін

Клацніть зміни (червона стрілка вгорі)

Клацніть Дії, щоб переглянути історію

Клацніть по «Дії» (червона стрілка вгорі) та натисніть «Переглянути історію» у меню «Випадання»

І відкриється нова Tab:

Вкладка «Історія»

І вам слід клацнути правою кнопкою миші попереднє зобов’язання, на яке потрібно повернути ваш код: клацніть правою кнопкою миші попередній фіксатор

Виберіть замовлення нового відділення та voilá!

Нижче, хоч і не є частиною питання про ОП, але я дуже багато роблю, і цей крок є прийомом, принаймні, для мене: якщо ви хочете повернутися до попереднього комітету, не оформивши нову гілку, НЕ вибирайте повернення (! ?); вам слід вибрати переосмислений - змішаний або - твердий:

клацніть правою кнопкою миші попередню фіксацію та повторно визначте


Будь ласка, поділіться своїми відповідями англійською мовою, оскільки більшість з нас тут не розмовляють і не знають іншої іноземної мови, крім англійської.
Шаміул Хасан

@ShamiulHasanRumman, в тексті, що пояснює зображення - зазвичай нижче - я переклав термін "Червона стрілка" на англійську мову, як, наприклад, Клацніть в дії (червона стрілка вгорі) Це було недостатньо?
Марсело Скофано

@MarceloScofano, важко було переключити редактор англійською мовою, перш ніж робити знімки екрана?
Андрій Сурду

1
@AndreiSurdu: оскільки мені ніколи цього не потрібно було робити, я очікував, що для переходу на англійську мову мені доведеться встановити додатковий пакет. Але ви маєте рацію, йому потрібен лише перезапуск VS, зовсім не встановлення. Я спробую змінити вищезазначені зображення, як тільки отримаю вільний час.
Марсело Скофано

0

якщо ви використовуєте вихідне дерево, яке досить прямо вперед.

  • Клацніть правою кнопкою миші команду, де потрібно створити нову гілку
  • Клацніть на "відділення"
  • У діалоговому вікні введіть назву нової гілки та натисніть «створити гілку»

0

Якщо ви шукаєте рішення на основі командного рядка, ви можете проігнорувати мою відповідь. Я пропоную вам скористатися GitKraken . Це неординарний клієнт із користувальницького інтерфейсу. Він відображає дерево Git на домашній сторінці. Ви можете просто подивитися на них і знати, що відбувається з проектом. Просто виберіть конкретну фіксацію, клацніть її правою кнопкою миші та виберіть опцію "Створити філію тут". Це дасть вам текстове поле для введення назви гілки. Введіть назву відділення, виберіть "ОК", і ви встановлені. Це дійсно дуже просто у використанні.

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