생성 - 현재 Git 브랜치를 마스터 브랜치로 만든다.




git rebase (9)

Jefromi의 대답에 덧붙이면, source 브랜치의 역사에 무의미한 병합을 원하지 않는다면 ours 병합을위한 임시 분기를 생성 한 다음 버리면됩니다.

git checkout <source>
git checkout -b temp            # temporary branch for merge
git merge -s ours <target>      # create merge commit with contents of <source>
git checkout <target>           # fast forward <target> to merge commit
git merge temp                  # ...
git branch -d temp              # throw temporary branch away

그런 식으로 병합 커밋은 target 분기의 기록에만 존재합니다.

또는 병합을 전혀 만들지 않으려면 source 의 내용을 잡고 target 에 대한 새 커밋에 사용하면됩니다.

git checkout <source>                          # fill index with contents of <source>
git symbolic-ref HEAD <target>                 # tell git we're committing on <target>
git commit -m "Setting contents to <source>"   # make an ordinary commit with the contents of <source>

나는 힘내에 저장소가있다. 나는 지회를 만들었고, 주인과 지부에게 약간의 변화를주었습니다.

그런 다음 나중에 수십 개의 커밋을 수행하여 지점이 마스터보다 훨씬 상태가 양호하다는 것을 알았으므로 지점이 마스터가되고 마스터의 변경 사항을 무시하기를 원합니다.

변경 사항을 마스터에 보관하고 싶지 않기 때문에 병합 할 수 없습니다. 어떻게해야합니까?

추가 :이 경우 '오래된'마스터가 이미 GitHub와 같은 다른 저장소로 push 됩니다. 이것은 어떻게 변화 시키나요?


나는 블로그 게시물에서 원했던 대답을 발견했다 . master 브랜치를 git의 다른 브랜치로 대체하자 .

git checkout feature_branch
git merge -s ours --no-commit master
git commit      # Add a message regarding the replacement that you just did
git checkout master
git merge feature_branch

그것은 본질적으로 Cascabel의 답과 같습니다 . 그가 자신의 솔루션 아래에 추가 한 "옵션"이 이미 내 메인 코드 블록에 포함되어 있다는 점을 제외하고는.

이 방법을 찾는 것이 더 쉽습니다.

나중에이 솔루션이 필요한 경우 하나의 코드 블록에서 사용할 모든 코드를 갖고 싶기 때문에이 코드를 새로운 답변으로 추가하고 있습니다.

그렇지 않으면, 나는 복사 - 붙여 넣기를하고, 내가 바꿔야 만했던 라인을보기 위해 아래의 세부 사항 읽었을 것입니다.


내 일을하는 방법은 다음과 같습니다.

#Backup branch
git checkout -b master_backup
git push origin master_backup
git checkout master
#Hard Reset master branch to the last common commit
git reset --hard e8c8597
#Merge
git merge develop

내가 아는 바로는 현재 브랜치를 기존 브랜치로 브랜치 할 수 있습니다. 본질적으로 이것은 현재 브랜치에서 가지고있는 것을 master 로 덮어 쓸 것입니다 :

git branch -f master HEAD

이 작업을 완료하면 일반적으로 로컬 master 분기를 푸시 할 수 있습니다. 여기서 강제 매개 변수도 필요할 수 있습니다.

git push -f origin master

병합 없음, 긴 명령 없음. 간단하게 branch 하고 push -하지만, 그렇습니다, 이것은 master 브랜치의 역사다시 쓰게됩니다 . 그래서 당신이 팀에서 일한다면 당신이하고있는 일을 알아야합니다.

또는, 모든 브랜치를 모든 원격 브랜치에 푸시 할 수 있다는 것을 알았습니다.

# This will force push the current branch to the remote master
git push -f origin HEAD:master

# Switch current branch to master
git checkout master

# Reset the local master branch to what's on the remote
git reset --hard origin/master

다음 단계는 Atlassian (Bitbucket 서버)에서 제공하는 Git 브라우저에서 수행됩니다.

{current-branch}를 master 로 만들기

  1. master 에서 브랜치를 만들고 "마스터 - 복제"라고 이름을 지정하십시오.
  2. {current-branch}에서 분기를 만들고 "{current-branch} -copy"라고 이름을 지정하십시오.
  3. 저장소 설정 (Bitbucket)에서 "Default Branch"를 "master-duplicate"를 가리 키도록 변경하십시오 (이 단계를 생략하면 "다음 단계에서"마스터를 삭제할 수 없습니다).
  4. "master"브랜치 삭제 - 소스 트리에서이 단계를 수행했습니다 (CLI 또는 Git 브라우저에서 수행 할 수 있음).
  5. "{current-branch}"를 "master"로 이름을 바꾸고 저장소로 푸시합니다 (이 경우 새로운 "master"브랜치가 생성됩니다. "{current-branch}"가 여전히 존재합니다).
  6. 저장소 설정에서 "기본 분기"를 "마스터"를 가리 키도록 변경하십시오.

다음과 같이 분기의 이름을 master 로 바꿉니다.

git branch -M branch_name master

모든 것이 원격 저장소 (GitHub)로 푸시되었는지 확인하십시오.

git checkout master

"master"를 "better_branch"로 덮어 씁니다.

git reset --hard better_branch

강제로 원격 저장소로 푸시 :

git push -f origin master

여기에 제공된 솔루션 ( 'master'의 브랜치 이름 변경)은 리모트 (GitHub) 레포의 결과를 고집하지 않습니다.

    -f
    --force

대개 명령은이를 덮어 쓰는 데 사용 된 로컬 참조의 조상이 아닌 원격 참조를 업데이트하는 것을 거부합니다. 이 플래그는 점검을 사용 불가능하게합니다. 이로 인해 원격 저장소가 커밋을 잃을 수 있습니다. 조심해서 사용하십시오.

이미 다른 사람들이 귀하의 레포를 가져온 경우, 새로운 마스터 역사를 자신의 마스터를 새로운 GitHub 마스터 브랜치로 대체하거나 (또는 ​​많은 병합을 다루지 않고) 새로운 마스터 역사를 끌어낼 수 없습니다.
git push - public repos에 대한 대안 이 있습니다.
Jefromi의 답변 (올바른 마스터 마스터로 다시 바뀌는 병합)이 그 중 하나입니다.


편집 : 당신은 공개 repo에 밀어했다 말하지 않았어! 그것은 차이의 세계를 만듭니다.

두 가지 방법, "더러운"방법과 "깨끗한"방법이 있습니다. 분기의 이름이 new-master 라고 가정합니다. 이것은 깨끗한 방법입니다.

git checkout new-master
git branch -m master old-master
git branch -m new-master master
# And don't do this part.  Just don't.  But if you want to...
# git branch -d --force old-master

이렇게하면 이름이 변경된 브랜치와 일치하도록 설정 파일이 변경됩니다.

더러운 방법으로 설정 파일을 업데이트하지 않을 수도 있습니다. 이것은 위의 두건 아래 진행되는 일종의 ...

mv -i .git/refs/new-master .git/refs/master
git checkout master




git