Pull to refresh

Comments 63

Не подскажите, есть ли альтернатива ГИТ, чтобы у папок были права доступа ? И удобно для разработчиков игр.

Если доступ нужно только на запись регулировать — можете побить основной репозиторий на сабмодули.

чтобы у папок были права доступа ?

Нет такого. Делайте мультирепу.

UFO just landed and posted this here

Try free ?

Т.е. ваш код у непонятных левых типов ?

UFO just landed and posted this here

Разработчики игр на больших проектах используют платный Helix (от компании Perforce). Он оптимизирован как раз для больших команд, где в моно репозитории хранится всё. Но там несколько другая философия, чем у гита.

UFO just landed and posted this here

Пунтк 15 про revert неверный. Revert делает коммит с изменениями обратными только указанному коммиту, а не всему от головы до этого коммита. И если делать реверт мерж-коммиту, то нужно еще указать родителя в параметре -m (обычно это -m1).

Откат до заданного комммита это git reset --hard, но учтите что это потеря данных и изменение истории которое можно запушить только с параметром --force, а если вы с репозиторием работаете не один, то им тоже нужно будет провести некоторые манипуляции чтоб удалить эти коммиты тоже (и вполне возможно они вас за это возненавидят).

Пункт 30 немного объясню что делает команда: Например вы создали несколько коммитов в своей ветке branch. Находясь в своей ветке и выполнив команду git rebase master, гит находит общего предка веток branch и master, убирает ваши коммиты до общего коммита, обновляет вашу ветку branch до состояния master, и после этого применяет ваши коммиты сверху. Т.е. вы обновляете свою ветку относительно мастера и ваши коммиты будут сверху. Общий результат (в файлах) будет такой же как и если намержить ветку мастер на вашу, разница будет только в истории коммитов. При merge ваши коммиты будут до мержа с мастером, при rebase ваши коммиты будут сверху.

Спасибо. Как раз хотел повторить что то в этом духе).

>2. Кэширование учётных данных

Кэшировать учётные данные можно с помощью параметра config с флагом --global. Так вы избавитесь от необходимости вручную вводить имя пользователя и пароль при создании нового коммита.

Пароль от чего? При коммите не нужно вводить пароль, разве что при криптоподписи коммита, что в основном не делают.

Учетные данные могут потребоваться для операций с remote репозиторием (push/pull/fetch), но их лучше делать c SSH ключем, в таком случае за кеширование его пароля отвечают всякие ssh-agent или средства ОС.

Этот пункт выдает делитанское отношение с гитом у автора оригинала статьи или я чего-то не понимаю.

>27. Слияние удалённого репозитория с локальным

Слияние удалённого репозитория с локальным выполняется параметром merge с указанием имени удалённого репозитория.

Тут стоит написать, что слияние будет с локальным слепком удаленного репозитория и перед этим стоит сделать `git fetch remote-name` чтобы этот слепок обновить,

>28. Отправка новой ветки в удалённый репозиторий

Я бы упомянул крайне полезную настройку стратегии наименования и трекинга веток при push, чтобы не указывать каждый раз название ветки, а запушить и создать такую же как текущая. `git config push.default current` и затем можно делать просто `git push`, удаленная ветка создастся.

Согласен с большинством замечаний по поводу кэширования учётных данных. Но SSH-ключи поддерживаются не везде, например, в overleaf через git доступ только через логин-пароль.

Кто нибудь, напишите в конце концов толковую стать про git, БЕЗ перечня команд.

В интернете есть миллион и одна "инструкция" по командам git, но нет почти ни одной статьи об идеологии с описанием того, что такое commit, branch, merge, pull request, на кой хрен всё это нужно и как этим пользоваться. Под выражением "как этим пользоваться" я НЕ имею в виду конкретную команду (её можно легко найти man-е или при выводе help-а). Я имею в виду то, какие принципы работы приследуются, в какой последовательности, что такое конфликт и как его разрешать. Короче, одни сухие перепечатки и выжимки из мануала.

Это я к чему. Вот, скажем, появился у нас в команде новый трудяга который ранее не то, что про git, вообще не слышал про репозитории и системы ведения версий, не понимает всей серьезности этого действа (да, таких все еще массово выпускают наши ВУЗы). Кому-то из команды придется потратить не один час на лекцию про git и все что с ним связано, совместо проделать несколько частых операций, показать как разрешать конфликты и т.д. И только после всего этого выдать ссылку на шпаргалку типа этой статьи. Я понимаю, что живое общение в команде - залог успеха, но опытному разработчику порой очень сложно структирировать весь обьем знаний по какой-то тематике, в итоге лекция превращается в сумбур, новый работяга выходит с неё с выпученными глазам и с еще более запутанным представлением о мире. Некоторые - с заявлением на увольнение. ;-)

Про книгу Git Pro я конечно вкурсе, но не знал что есть перевод на русский, спасибо. Надо бы из неё какую-то выжимку сделать.

Забыли "git rebase -i commitid" для обьеденения нескольких коммитов в 1. Очень удобно для людей с недержанием "git commit" :)

Вообще хорошая практика причёсывать свои бранчи перед мержем. Мусорные коммиты никому не нужны, особенно всякие «fix» или «WIP» — ну никому не интересно как ты при разработке фичи свои же опечатки и баги правил или функциональность до рабочего состояния допиливал.

Ещё есть порочная практика — подмерживать изменения из апстримов в свои бранчи вместо rebase. Потом смотришь на эту паутину в истории и глаза начинают кровоточить. Ничем не лучше мусорных коммитов, а то и хуже.

Печально, что за чистотой истории мало кто следит на практике. Или из крайности в крайность бросаются — объединяют все коммиты в один при мерже, например.
У нас для сохранения чистой истории используется Squash Commit в master из ветки, где работал разработчик. Получается довольно удобно, с чистой историей. И не нужно обучать каждого джуна тому, как нужно структурировать коммиты внутри своей ветки. Главное правильно описать название и описание к pull request, т.к. они и будут текстом финального коммита.
Объединять все изменения в один коммит это другая крайность. Половина преимуществ использования Git теряется — ни найти конкретное изменение, ни точечно откатить, ни черри-пикнуть. Вы же по сути отказались от возможностей merge.

Не понимаю, в чём тут удобство, оперировать изменениями размера «реализация фичи». Тем более, что у разных фич разные масштабы. Да и многие инструменты позволяют оперировать на уровне pull/merge request'ов, если уж надо именно фичами ворочать.

Я всегда стараюсь по крайней мере при коммитах производить декомпозицию задачи, коммитить отдельными подзадачами, чтобы изменения были максимально атомарны. При этом хорошей практикой считаю по возможности сохранять работоспособность в каждом коммите. Никогда заранее не знаешь, к какой точке и по какому поводу придётся вернуться.
Дело у том, что отдельная ветка — полностью законченный функционал. И когда она завершена и протестирована — откат может быть только полный этого функционала.

В случае с большими фичами — это уже релизная ветка, в которую точно также будут сливаться мелкие фичи, и она уже будет вливаться в основную ветку через merge.

Я тоже при разработке мелких opensource пакетов в личном GitHub стараюсь максимально разбивать коммиты, даже если делал все за один раз, а в конце делаю кучу коммитов.
Однако, при работе в команде гораздо удобнее показал себя вариант с именно таким разбитием на фичи. Даже если в будущем потребуется посмотреть, как фича реализовывалась — достаточно посмотреть в веб интерфейсе нужный Pull Request, история там будет сохранена.
И когда она завершена и протестирована — откат может быть только полный этого функционала.
Это весьма ограниченный опыт, да и правки как правило вносятся и в уже существующий код. Возможно, такова специфика конкретно вашего процесса, но в общем случае на практике встречается и множество других сценариев.

Например, переиспользование конкретных решений, которые являются лишь частью какой-то фичи. Или точечный откат одного или нескольких изменений фичи. Не говоря уж о постоянной необходимости просматривать конкретные изменения и понимать, почему сделано именно так. В случае обобщённого коммита эта информация просто теряется, придётся каждый раз тратить время и вникать более детально.

Даже если в будущем потребуется посмотреть, как фича реализовывалась — достаточно посмотреть в веб интерфейсе нужный Pull Request, история там будет сохранена.
Ну т.е. ровно то, что предоставляет нативный механизм при merge. Тут есть минус хотя бы в том, что нельзя использовать привычные конкретному разработчику инструменты, включая сам Git. Да и вопрос в том, хранит ли реально этот веб-интерфейс историю или через пару недель она канет в лету после очередного git gc.

Печально, что за чистотой истории мало кто следит на практике.

Всегда интересовал этот культ чистой истории коммитов. На практике. Чем чистая история лучше нечистой истории с кучей fix/merge коммитов? Какие реальные случаи.. на практике.. были, чтоб вот чистая история как-то реально помогла.
То что там всё чисто, и понятна история развития проекта.. это ясно. Я тоже за всё хорошее, и против всего полохого. Но на практике.. есть ли кому какое дело до чистой истории коммитов?

"Потом смотришь на эту паутину в истории и глаза начинают кровоточить."
Так можно просто не смотреть в эту историю. Зачем туда смотреть?)

Git - как источник истины и как хранилище - ок. Но как чтение истории проекта - зачем? кому оно надо? Пойди почитай релиз-ноутсы если на то пошло)
В небольших командах и так понятно кто какой кусок делает - и где чей залёт можно выяснить простым совещанием. В огромных командах, мне кажется, тем более всем плевать на историю проекта в контексте чтения коммитов в git-е.

Я без наездов, просто действительно культ чистой истории коммитов мне непонятен.. как-будто её кто-то читает.. ейбогу.)
История - это то что уже прошло, здесь и сейчас она не нужна, искать виноватых смысла нет, двигайте проект вперёд)

Какие реальные случаи… на практике… были, чтоб вот чистая история как-то реально помогла.
Вы когда-нибудь пользовались git blame? С мусорными коммитами часто невозможно сразу определить смысл конкретного изменения без последующего углублённого анализа истории или самого кода.

Делали cherry-pick конкретных изменений в ветке? С мусорными коммитами вам придётся анализировать ещё и каждый из них, чтобы захватить с собой и все последующие фиксы. А потом с большой вероятностью откатывать изменения, не относящиеся к нужной функциональности (скорей всего в виде конфликтов).

Переделывали часть функциональности какого-нибудь компонента? Если относящиеся к этому коммиты разбавлены мусором, придётся гораздо глубже изучать код и потратить гораздо больше времени, чтобы самостоятельно выделить все необходимые места, которые можно было бы определить по истории.

Откатывали какие-нибудь конкретные изменения из ветки? При мусоре приходится буквально хирургией заниматься, выделяя только нужное. Иногда для этого тоже нужно глубоко вникнуть в код, вплоть до полного понимания вообще всех принципов работы компонента. Особенно это «полезно», если с ним приходится работать в первый и последний раз.

Ссылались на какой-то конкретный опыт реализации чего-то или заимствовали готовые решения? С мусором будьте готовы потратить дополнительное время на поиск коммита, где нужный код в нужном вам состоянии.

И ещё множество сценариев, которые заранее не предугадаешь.

Но как чтение истории проекта — зачем? кому оно надо?
VCS даёт множество преимуществ при работе с кодом, почему бы ими не пользоваться? Я могу оперировать не только строками кода, но и наборами изменений, объединённых общим смыслом. Постоянно приходится что-то подсматривать, делать diff, изучать путь какого-то изменения, заимствовать, анализировать, искать. Да полно сценариев, у меня в IDE история постоянно открыта наряду с кодом.

на гитхабе и гитлабе при мерже пулл-реквеста эта штука есть как опция (squash), так что можно самому заранее ничего не делать, наоборот лучше чтобы в ПРе была видна история разработки фичи.

так что штука полезная, но по факту руками ее никто никогда не делает.

git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/
git push -u origin main

Почему github предлагает сначала сделать комит , потом создать новую ветку , а потом запушить ? Не логичней разве сначала создать ветку а потом начать комитить?

-M не создает новую ветку, а переименовывает текущую (Move, двигает с предыдущего имени на новое), причем игнорируя то что main уже может существовать

Лучше использовать -m

так git только инициировали - там нет ещё веток даже кроме текущей

Ничего подобного: ветка сразу создается с именем master или тем что указано в init.defaultBranch вот в мануале

Плюс сейчас только что выполнил git init

$ git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m
Initialized empty Git repository in /home/nixi/work/Projects/test/.git/

$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

правильно, после init есть только одна ветка - текущая. И там "main уже может существовать" не может быть, если не был использован defaultBranch=main

по умолчанию создаётся ветка master (не хотят пока в main менять default branch) и в `git branch -M main` предлагается переименовать её в main

но это можно сразу двумя другими способами:
1. Сразу при инициировании git: `git init -b main`
2. Прописать глобально: `git config --global init.defaultBranch main` и потом уже вызывать `git init`

Благодарю за хорошую шпоргалку.

Предлагаю поправить checkout на switch. Чтобы актуальность статьи посвежее была.

После нескольких упреканий в свой адрес, что забыл, мол пробелы убрать где не нужно. Начал пользоваться следующим алгоритмом.
1. Перед коммитом пишу git diff и проверяю где есть изменения (еще подойдет git status)
2. Потом с помощью команды git restore "file name" возвращаю файл к исходному значению

Таким образом коммичу только то что должно попасть в реквест. Избегая лишних пробелов и т.п в других файлах

Но зачем вы лишние пробелы вообще говоря пишете?

Две самые важные команды забыли:)

git gui - позволяет работать с текущим рабочим деревом

gitk - позволяет работать с историей коммитов и сразу строит git log --graph...

tig, как gitk, но в терминале

tig отдельно ставить нужно, а gitk обычно сразу из коробки

А по мне, важные пропущенные команды это

git stash

git cherry-pick

К тому же они очень полезны для новичков.

А как же git difftool -d ? Без нее ни одного коммита не делаю

Ждем статьи "300 команд, которые сделают вас мастером bash". Восьмидесятые прошли, но но для некоторых они остались в душе навсегда. Тулза. которая должна была быть незаметной, как калькулятор, стала идолом, к которому разработчики вынуждены обращать мольбы по нескольку раз в день. Согласитесь, что вы не найдете в интернете гайдов "как правильно передать параметры функции cos". Но как чекаутнуть произвольный коммит и, самое главное, как потом вернуть репозиторий в чистое состояние без необходимости удалять всю локальную копию и клонировать репу заново -- этим интернет завален. git branch -D master; git checkout --track origin/master -- о господи, это же так очевидно, почему я сразу не догадался?

Но ведь… это и правда очевидно (хотя я бы написал git checkout origin/master -B master).


Это какое-то принципиальное нежелание понимать git или что?

это и правда очевидно (хотя я бы написал git checkout origin/master -B master).

Что и требовалось доказать.

Что именно требовалось доказать? Раскройте вашу мысль.

Например, тот факт, что две заметно разные и при этом совсем не тривиальные команды дают один и тот же результат. Это если коротко. Если длинно, то я могу накатать целую статью. Как правило, короткого ответа хватает всем, кто хотя бы пару месяцев поработал с альтернативными VCS и знает, что ими можно пользоваться почти не читая документацию. Потому что VCS служит мне, а не я служу VCS. Интерфейс командной строки Git написан так, что нужно либо детально знать внутреннюю архитектуру кода и структур данных, либо заучить запредельное число готовых команд (сильно больше, чем упомянуто в этой статье), чтобы достаточно комфортно с Git работать. Благо, VS Code лично меня спасает от большей части базовых команд, но в сложных случаях все равно приходится лезть в консольку.

Но команды-то тривиальные и я бы не сказал что они какие-то заметно разные. Тут не надо знать внутреннюю структуру досконально, тут достаточно знать что "ветка" в гите является просто именованным ярлыком для номера коммита.


Кстати, а как эта задача решается в других VCS?

Но команды-то тривиальные и я бы не сказал что они какие-то заметно разные.

git checkout -- это как раз одна из самых безумных команд git, потому что одновременно применяется для подготовки незакоммиченных изменений в рабочем каталоге, для стирания изменений в рабочем каталоге, и для операций над ветками. Чтобы понять, как работает checkout, мне нужно понимать: что есть некий "индекс", который не коммит и не рабочий каталог, что есть "ветки", которые на самом деле не ветки, а головы ветки ( "достаточно знать что "ветка" в гите является просто именованным ярлыком для номера коммита ", да), потому что ветки не могут прыгать по всему репозиторию и не могут схлопываться в один коммит; понимать, что такое "оторванная башка" и почему она оторванная.
Ты уже по крупицам из меня выгягиваешь статью. Прямыми провальными решениями при создании git был именно выбор такого понятия "ветки" и применение индекса вместо реализации удобного интерфейса формирования коммита без внесения третьей сущности в контроль версий. Косвенными провальными решениями была ориентация на интенсивное ветвление, что в том числе усложнило опции команд работы с ветками, при том, что по итогу от этих веток все равно отказываются либо в пользу патчсетов и ревью, либо в пользу прямого формирования плоской истории изменений через какой-нибудь `git pull --rebase --autostash` -- не так давно git получил эту фичу, которая в других VCS была из коробки изначально.

Вы не ответили на второй вопрос. Как эта задача решается в других VCS?


Интересует именно что аналог git checkout origin/master -B master


git checkout — это как раз одна из самых безумных команд git, потому что одновременно применяется для подготовки незакоммиченных изменений в рабочем каталоге, для стирания изменений в рабочем каталоге, и для операций над ветками.

git checkout применяется исключительно для обновления рабочей копии, все остальные применения — это побочные эффекты для удобства.

Вы не ответили на второй вопрос. Как эта задача решается в других VCS?

Интересует именно что аналог git checkout origin/master -B master

Это провокационный вопрос плана "какая же у вас шморгалка" -- эта команда уже жёстко протекает внутренностями git, которых, ожидаемо, просто нет в других VCS. В том же Mercurial нет такой замороченной системы веток с трекингом, потому аналогичной команды просто не существует, а существует акцент на плоской истории через грязную рабочую копию, расширение strip, или расширение очередей патчей.

В Mercurial есть даже слизанное с гита расширение rebase, но по факту малопопулярное потому, что rebase решает правильную задачу неправильным образом -- мне, как правило, никогда не нужно условно необратимо переместить ветку с одного места в другое, да еще и потенциально переписывая историю коммитов на публичной репе. Вместо этого есть чёткое деление на рабочие правки и рабочие патчи, не принадлежащие истории, и саму история, которую публична и не подлежит изменению, которую я строго дописываю в конец на основе рабочих правок, и потому не выбью стул из-под ног человека, работающего с опубликованной веткой. Git по итогу пришел к тому же, но окольными путями и бессмысленными усложнениями операций с ветками.

git checkout применяется исключительно для обновления рабочей копии, все остальные применения — это побочные эффекты для удобства.

Удобства? Это как ковбои носили револьверы снятыми с предохранителя "для удобства", и стреляли себе в ногу? "Ну а что, вдруг кому-то понадобится срочно выстрелить себе в ногу?" -- так, что ли? Кажется, о чем-то таком думал Торвальдс, создавая изначальным прототип Git.

Но это же вы придумали специально для гита задачу, которая в других СКВ не возникает, и жалуетесь что есть аж целых два способа её решить.


Удобства? Это как ковбои носили револьверы снятыми с предохранителя "для удобства", и стреляли себе в ногу?

А почему создание ветки вы приравниваете к выстрелу в ногу?

Но это же вы придумали специально для гита задачу, которая в других СКВ не возникает, и жалуетесь что есть аж целых два способа её решить.

А Git научился в patch queue? Я понимаю, что сообщество уже напилило вокруг Git костылей под это дело, но можно было сделать сразу хорошо.

А почему создание ветки вы приравниваете к выстрелу в ногу?

Не создание ветки, а стирание изменение в рабочем каталоге, которое умеет делать checkout. Тот же checkout, который применяется для подготовки правок к коммиту в этом же рабочем каталоге.

Ну да, если указать конкретный файл, он будет перезаписан. А что ещё должна делать команда checkout?


Тот же checkout, который применяется для подготовки правок к коммиту в этом же рабочем каталоге.

Ни разу не применял checkout для подготовки правок к коммиту. Мы какие-то разные гиты обсуждаем?

Ну да, если указать конкретный файл, он будет перезаписан. А что ещё должна делать команда checkout?

Вот именно, одна и та же команда используется в роли "уничтожить локальные правки" и в роли "сохранить локальные правки после синхронизации". Но по факту это настолько опасно и заморочено, что я (и не только я) использую стэш и автостэш вместо какого-нибудь `git checkout --merge` или `git rebase`. Всё, что я до сих пор пытался сказать -- это что git взял за фундамент патологичный рабочий процесс, и только с годами и тысячами простреленных ног к гиту наконец прикостылили и даже внедрили в ядро рабочий процесс здорового человека, например, `git pull --rebase --autostash`.

Ни разу не применял checkout для подготовки правок к коммиту. Мы какие-то разные гиты обсуждаем?

Вот это самое "ни разу не применял" -- это одно из проявлений паталогии, а именно -- избегание грязного рабочего каталога и коммиты каждые 5 минут. Что есть бессмысленно, потому что никого не волнуют эти незаконченные правки, они все равно будут сквошнуты и ребейзнуты -- именно последнее и есть настоящий рабочий процесс, а не плетение макаронного монстра в истории публичного репозитория.

Вот это самое "ни разу не применял" — это одно из проявлений паталогии, а именно — избегание грязного рабочего каталога и коммиты каждые 5 минут.

Не вижу связи.

git checkout нужен на грязном рабочем каталоге для слияния локальных правок с последними правками в публичной репе. Примерно то, для чего делается "git pull --rebase --autostash", только для перехода к конкретной ревизии. То, для чего в SVN есть "svn update", а в Mercurial есть "hg update". Паталогичная же культура git заключается в том, что от разработчиков требуют держать все локальные правки в виде коммитов, из-за чего отпадает необходимость в "git checkout" на грязном рабочем каталоге, потому что рабочий каталог всегда чистый.

Но у чистого рабочего каталога есть своя цена -- теперь вместо того, чтобы применять локальные правки к какой угодно ревизии, я должен постоянно переписывать историю локальных веток, то есть, merge-rebase-squash-cherry pick, я должен упиваться кишками git вместо того, чтобы просто заниматься разработкой.

Приведу аналогию: сохранения в редакторе. Вы сохраняетесь каждые полчаса (или вообще автоматически) или оставляете несохранённые изменения неделями? Знаю тех, кто использует последний вариант, были где-то рассказы на Хабре о чудесных никогда не вылетающих редакторах и сверхнадёжных ноутбуках — но это не означает, что привычка сохраняться паталогическая и обусловлена ненадёжными IDE.


Вот и с частыми коммитами в гите так же: это просто бэкап на случай ошибок рефакторинга. Но гит сам по себе их не требует.


И да, я всё ещё не вижу связи между практикой частых сохранений и неприменением git chechout для подготовки коммита.


То, для чего в SVN есть "svn update", а в Mercurial есть "hg update".

Вы по одному файлу обновляете в SVN и Mercurial, или всё-таки сразу всё дерево? Если первый вариант — то зачем? Если второй — то чем это от checkout отличается?

Вот и с частыми коммитами в гите так же: это просто бэкап на случай ошибок рефакторинга. Но гит сам по себе их не требует.

Если я делаю какие-то крупномасштабные изменения, то, естественно, я сохраню старую версию, с Git или без Git, разговор ведь не об этом совсем, такие события происходят нечасто, чтобы под них прогибать всю модель разработки.

И да, я всё ещё не вижу связи между практикой частых сохранений и неприменением git chechout для подготовки коммита.

Не частых сохранений, а частых коммитов. checkout/update нужен для переноса правок на другую ревизию, эдакий аналог rebase, но для незакоммиченных правок. Другой более близкий аналог в самом Git -- это stash.

>То, для чего в SVN есть "svn update", а в Mercurial есть "hg update".

Вы по одному файлу обновляете в SVN и Mercurial, или всё-таки сразу всё дерево? Если первый вариант — то зачем? Если второй — то чем это от checkout отличается?

Это и есть checkout, что я и пытался объяснить.

Весьма посредственный перевод, в некоторых местах он не раскрывает тему а только запутывает неподготовленного читателя. Лучше бы собственную статью написали с упрощением понимания в виде примеров, а не демонстрировали слив гугл переводчику в виде искажений и многозначности донесения смыслов русским языком.

Вот пример:

Оригинал:

Second, it is able to target a specific commit at any point in the history, whereas git reset can only work backwards from the current commit. 

Ваш перевод:

Во-вторых, её объектом выступает конкретный коммит, созданный в любой момент истории, а git reset всегда берёт за точку отсчёта текущий коммит.

Перевод гугла:

Во-вторых, он может нацеливаться на конкретный коммит в любой момент истории, тогда как git reset может работать только в обратном направлении от текущего коммита.

О каких обьектах, какой точке отсчёта вы пишете?

Мне кажется из-за таких переводчиков наши локализаторы в кинопрокате выдают порой очень далёкие от оригинала названия фильмов, и даже переводы текста.

Я человек знакомый с темой поста, но если бы прочитал этот перевод до того как узнал о гите, многие места бы не понял.

Спасибо за внимание.

Надёргали команд по своему вкусу. Возможно, это то, с чем сталкиваетесь именно вы в именно вашем рабочем процессе. Но это не "30 необходимых" для всех и каждого.

Где команды clone, pull --ff , rebase --continue , и прочая, и прочая?

Почему я эти привёл? - А почему вы привели те?

Короче, даже как шпаргалка - ваша статья на двоечку с плюсом.

---

А впрочем, понятно. Автор статьи - индус. Ему можно. А вот редактору, который выбирал, что переводить и что на хабр вываливать - незачёт.

Куча вредных советов, а не статья. Новичкам эти заклинания ничем не помогут, а только запутают. Особенно с таким переводом.

Уже давно можно использовать git switch вместо git checkout, как более простую для пользователей.

На дворе 2022 год, и до сих пор перепечатывают одну туже статью.

Sign up to leave a comment.