Нажимає на інші відділення


384

Чи можливо здійснювати та просувати зміни від однієї гілки до іншої.

Припустимо, я здійснив зміни в BRANCH1 і хочу перенести їх на BRANCH2 .

З BRANCH1 , чи дійсно робити:

git push origin **BRANCH2**

А потім скинути BRANCH1?

Відповіді:


710

Це майже спрацює.

При натисканні на гілку, що не використовується за замовчуванням, вам потрібно вказати вихідний номер та цільовий номер:

git push origin branch1:branch2

Або

git push <remote> <branch with new changes>:<branch you are pushing to> 

26
Чи обоє branch1і branch2потрібно бути на пульті? Що робити, якщо ви хочете натиснути з локального branch1на віддалений origin branch2?
орад

11
@orad: Ні. Перша частина насправді є лише ідентифікатором для місцевого комітету; йому навіть не потрібно бути відділенням.
SLaks

6
@abhisekp: використовуйте той самий синтаксис. Для посилання на гілку джерела використовуйте<remote>/<branch>
SLaks

4
@abhisekp: Робіть саме те, що я щойно сказав. Нинішня галузь абсолютно не має значення.
СЛАкс

20
Будьте в курсі, хто спокусився (як я), запустившись, git push origin :branch2думаючи, що це просто натисне поточну локальну гілку на пульт branch2, що вона замість цього видалить пульт branch2! Правильний шлях git push origin HEAD:branch2.
Хелдер Перейра

72

Звичайно, хоча це буде працювати лише в тому випадку, якщо це швидко вперед BRANCH2 або якщо ви змусите його. Правильний синтаксис робити таке - це

git push <remote> <source branch>:<dest branch> 

Дивіться опис "refspec" на сторінці git push man для отримання більш детальної інформації про те, як це працює. Також зауважте, що і натискання сили, і скидання - це операції, які "переписують історію", і їх не слід намагатись слабким серцем, якщо ви абсолютно не впевнені, що знаєте, що ви робите стосовно будь-яких віддалених сховищ та інших люди, у яких є вилки / клони одного проекту.


6
Дякую! Я просто додам, що можна змусити git push --force remote local-branch:remote-branch.
Ферран Мейлінч

16

Це дуже просто. Припустимо, що ви внесли зміни до своєї філії А, яка знаходиться як локально, так і віддалено, але ви хочете перенести ці зміни на відділення B, яке ніде не існує.

Крок-01: створити та перейти на нову гілку B

git checkout -b B

Крок 02: Додайте зміни до нової локальної гілки

git add. // або конкретні файли

Крок-03: Введіть зміни

git commit -m "посилання_повідомлення"

Крок 04: Натисніть зміни в новій гілці B . Команда нижче створить нову гілку B також віддалено

git push origin B

Тепер ви можете перевірити з BitBucket , що гілка B матиме один більш ніж здійснювати гілки А . І коли ви витягаєте філіальну А ці зміни не будуть там , як вони були витіснені в галузі B .

Примітка: Якщо ви внесли свої зміни до гілки A і після цього хочете змінити ці зміни в нову гілку B, вам доведеться спочатку відновити ці зміни. #HappyLearning


2

У моєму випадку у мене був один місцевий комітет, на який не підштовхували origin\master, а передавали в місцеве masterвідділення. Цей місцевий комітет зараз слід перенести на інше відділення.

За допомогою Git Extensions ви можете зробити щось подібне:

  • (Створіть, якщо не існує, та) замовіть нову гілку, де ви хочете підштовхнути свою комісію.
  • Виберіть комісію з історії, яка має бути зафіксована та перенесена в цю гілку.
  • Клацніть правою кнопкою миші та виберіть Вибір вишні .
  • Після цього натисніть кнопку вибору вишні .
  • Вибрана комісія буде застосована до вашої зареєстрованої філії. Тепер покладіть на себе і натисніть.
  • Ознайомтеся зі своєю старою філією з несправними фіксаціями.
  • Важко скинути цю гілку до другої останньої комісії, де все було нормально (будьте в курсі, що ви тут робите!). Це можна зробити клацанням правою кнопкою миші на другому останньому фіксації та виберіть Скинути поточну гілку тут . Підтвердьте операцію, якщо знаєте, що робите.

Ви також можете це зробити в командному рядку GIT . Приклад скопійований з Девіда Крістенсена :

Я думаю, що ви знайдете git cherry-pick+, git resetщоб бути набагато швидшим робочим процесом:

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

git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^

Економить досить багато роботи, і це сценарій, який git cherry-pick був розроблений для обробки.

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

git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history


2

Я отримав поганий результат за допомогою git push origin branch1:branch2команди:

У моєму випадку branch2видалено та branch1оновлено з деякими новими змінами.

Тому, якщо ви хочете тільки зміни натисніть на branch2від branch1, спробуйте процедури нижче:

  • Увімкнено branch1:git add .
  • Увімкнено branch1:git commit -m 'comments'
  • Увімкнено branch1:git push origin branch1

  • Увімкнено branch2:git pull origin branch1

  • Увімкнено branch1: поверніться до попереднього комітету.


0

ви можете це зробити легко

git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)

-1

git init 
#git remote remove origin
git remote add origin  <http://...git>
echo "This is for demo" >> README.md 
git add README.md
git commit -m "Initail Commit" 
git checkout -b branch1 
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete  branch1
#git branch --unset-upstream  


1
Будь ласка, додайте пояснення до коду.
Nakx

-4

Ви взяли на себе зобов’язання BRANCH1 і хочете позбутися цього зобов’язання, не втрачаючи змін? git reset - те, що вам потрібно. Зробіть:

git branch BRANCH2

якщо ви хочете, щоб BRANCH2 була новою гілкою. Ви також можете з’єднати це наприкінці з іншою гілкою, якщо хочете. Якщо BRANCH2 вже існує, залиште цей крок.

Потім зробіть:

git reset --hard HEAD~3

якщо ви хочете скинути комісію на гілку, яку ви здійснили. Це потребує змін останніх трьох комітетів.

Потім виконайте наступне, щоб повернути скинуті комісії до BRANCH2

git checkout BRANCH2

Це джерело було корисним: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch

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