Odpowiedzi:
To prawie zadziała.
Podczas wypychania do gałęzi innej niż domyślna, musisz podać referencję źródłową i docelową:
git push origin branch1:branch2
Lub
git push <remote> <branch with new changes>:<branch you are pushing to>
<remote>/<branch>
git push origin :branch2
myśląc, że po prostu wypchnie bieżącą lokalną gałąź do pilota branch2
, zamiast tego usunie pilota branch2
! Prawidłowy sposób to git push origin HEAD:branch2
.
Z pewnością będzie to działało tylko wtedy, gdy będzie przewijać do przodu BRANCH2 lub jeśli go wymusisz. Prawidłowa składnia, aby to zrobić, to
git push <remote> <source branch>:<dest branch>
Zobacz opis „refspec” na stronie man git push, aby uzyskać więcej szczegółów na temat jego działania. Zauważ również, że zarówno wymuszone wypychanie, jak i resetowanie to operacje, które „przepisują historię” i nie powinny być podejmowane przez osoby o słabym sercu, chyba że masz absolutną pewność, że wiesz, co robisz w odniesieniu do jakichkolwiek zdalnych repozytoriów i innych ludzie, którzy mają widelce / klony tego samego projektu.
git push --force remote local-branch:remote-branch
.
To jest bardzo proste. Załóżmy, że dokonałeś zmian w Oddziale A, który znajduje się zarówno w lokalnie, jak i zdalnie, ale chcesz przekazać te zmiany do Oddziału B, który nigdzie nie istnieje.
Krok 01: utwórz nową gałąź B i przejdź do niej
git checkout -b B
Krok 02: Dodaj zmiany w nowym oddziale lokalnym
git add. // lub określone pliki
Krok 03: Zatwierdź zmiany
git commit -m "commit_message"
Krok-04: Przekaż zmiany do nowej gałęzi B . Poniższe polecenie utworzy również nowy oddział B zdalnie
git push origin B
Teraz można zweryfikować z bitbucket że oddział B będzie miał jeszcze jeden popełnić niż oddział A . A kiedy przejdziesz do kasy oddziału A, zmiany te nie będą dostępne, ponieważ zostały wprowadzone do gałęzi B .
Uwaga: Jeśli zatwierdziłeś swoje zmiany w gałęzi A, a następnie chcesz przenieść te zmiany do nowej gałęzi B , najpierw musisz je zresetować. #HappyLearning
W moim przypadku miałem jedno zatwierdzenie lokalne, które nie zostało wypchnięte origin\master
, ale zobowiązało się do mojego lokalnego master
oddziału. To lokalne zatwierdzenie powinno być teraz przekazane do innego oddziału.
Z Git Extensions możesz zrobić coś takiego:
Możesz to również zrobić w wierszu poleceń GIT . Przykład skopiowany od Davida Christensena :
Myślę, że przekonasz się, że
git cherry-pick
+git reset
jest znacznie szybszym przepływem pracy:Korzystając z tego samego scenariusza, w którym „funkcja” jest gałęzią, a najwyższe zatwierdzanie jest niepoprawne, znacznie łatwiej byłoby to zrobić:
git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^
Oszczędza sporo pracy i jest scenariuszem, który
git cherry-pick
został zaprojektowany do obsługi.Zauważę też, że to zadziała również, jeśli nie jest to najwyższe zatwierdzenie; wystarczy zatwierdzić argument, aby argument mógł zostać wybrany za pomocą:
git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history
Mam zły wynik git push origin branch1:branch2
polecenia:
W moim przypadku branch2
został usunięty ibranch1
został zaktualizowany o kilka nowych zmian.
Dlatego jeśli chcesz, aby zmiany wprowadzane były tylko branch2
od branch1
, wypróbuj poniższe procedury:
branch1
:git add .
branch1
:git commit -m 'comments'
On branch1
:git push origin branch1
On branch2
:git pull origin branch1
On branch1
: powrót do poprzedniego zatwierdzenia.
możesz to zrobić łatwo
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)
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
Zaangażowałeś się w BRANCH1 i chcesz pozbyć się tego zatwierdzenia bez utraty zmian? git reset jest tym, czego potrzebujesz. Zrobić:
git branch BRANCH2
jeśli chcesz, aby BRANCH2 był nowym oddziałem. Możesz również połączyć to na końcu z innym oddziałem, jeśli chcesz. Jeśli BRANCH2 już istnieje, zostaw ten krok na zewnątrz.
Następnie wykonaj:
git reset --hard HEAD~3
jeśli chcesz zresetować zatwierdzenie w gałęzi, którą zatwierdziłeś. To wymaga zmian trzech ostatnich zatwierdzeń.
Następnie wykonaj następujące czynności, aby przywrócić resetowane zatwierdzenia do BRANCH2
git checkout BRANCH2
To źródło było pomocne: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch
branch1
i drugiebranch2
musi znajdować się na pilocie? Co jeśli chcesz przesyłać z lokalnegobranch1
na zdalnyorigin branch2
?