Как git-fetch может загружать только изменения без добавления / обновления файлов? - PullRequest
1 голос
/ 11 февраля 2012
  • Project.git - это удаленное репозиторий git с промежуточной ветвью
  • Два разработчика работают над собственными ветвями проекта.git
  • Оба разработчика взаимодействуют только с промежуточным размещением

Общее для обоих разработчиков

# Developer 1 & developer 2 add staging as follows
$ git clone myForkOfProject.git
$ git remote add live project.git

Разработчик 2, работающий над документами

[master] $ git branch docs
[master] $ git checkout docs
[docs] $ git add README 
[docs] $ git commit -m "pushing to live's staging from local's docs works" README
[docs] $ git push live docs:staging

Разработчик 1, работающий над исправлением ошибок, хочет выборочно объединить документы

Разработчик 1 хочет видеть выборочное объединение файлов из документов в свои локальные mybranch

[master] git branch mybranch
[master] git checkout mybranch
[mybranch] $  git fetch live staging

# Checks to see if anything changed
[mybranch] $  git status -s ./
[mybranch] $

# Doesn't know what to merge since diff, status shows no change 

# Where as if developer1 did
[mybranch] $  git pull live staging
[mybranch] $  git status -s ./
A  README

То, что на самом деле хотел разработчик1

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

Как получить / извлечь так, чтобы git status -s ./ просто загружал изменения

[mybranch] git *fetch changes from staging into mybranch 's working directory*
[mybranch] git status -s ./
[?] README
# This is what developer1 wants to see
# so that he can decide to 'git add README' manually
# here are the unsuccessful attempts to do the same

# Developer2 makes a commit, and does git push live docs:staging 
[mybranch] $ git fetch live staging
[mybranch] $ git pull live staging --no-commit --no-log --no-ff

Последний вариант - выборочный вызов git rm --cached README, но мне интересно, что-то не хватает в потоке git fetch, git merge.

1 Ответ

3 голосов
/ 11 февраля 2012

git status для отображения того, что находится в вашем рабочем каталоге. Поэтому после git fetch, который не меняет рабочую копию, вы, конечно, ничего не увидите.

git show для отображения наборов изменений. Поэтому, если вы хотите просмотреть изменение перед его применением, выполните git show (найдите изменения для проверки с помощью git log live..mybranch и т. П .; вы даже можете использовать git log --patch для просмотра различий, встроенных в примечания по фиксации).

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

Вы можете сделать это в два этапа: во-первых, вы git merge внесете изменения вместе со своими. Затем вы git reset [revision] даете ревизию, в которой вы были до слияния.

Это оставит вас без поэтапных изменений, без движения HEAD (вы вернетесь в состояние до слияния, так что оно было эффективно перевернуто), и рабочую копию, содержащую все изменения до того, как вы сделали git merge .

git pull - это просто сокращение для git fetch; git merge или git fetch; git rebase, в зависимости от ваших настроек.

...