it-swarm-vi.com

Làm cách nào để tôi đẩy một nhánh cục bộ mới vào kho Git từ xa và cũng theo dõi nó?

Tôi muốn có thể làm như sau:

  1. Tạo một nhánh cục bộ dựa trên một số nhánh khác (từ xa hoặc cục bộ) (thông qua git branch hoặc git checkout -b)

  2. Đẩy nhánh cục bộ vào kho lưu trữ từ xa (xuất bản), nhưng làm cho nó có thể theo dõi để git pullgit Push sẽ hoạt động ngay lập tức.

Làm thế nào để làm điều đó?

Tôi biết về --set-upstream trong Git 1.7, nhưng đó là hành động tạo hậu. Tôi muốn tìm một cách để thực hiện một thay đổi tương tự khi đẩy chi nhánh vào kho lưu trữ từ xa.

3956
Roni Yaniv

Trong Git 1.7.0 trở lên, bạn có thể kiểm tra một nhánh mới:

git checkout -b <branch>

Chỉnh sửa tập tin, thêm và cam kết. Sau đó Đẩy bằng tùy chọn -u (viết tắt của --set-upstream) :

git Push -u Origin <branch>

Git sẽ thiết lập thông tin theo dõi trong quá trình Đẩy.

6188
Daniel Ruoso

Nếu bạn không chia sẻ repo của mình với người khác, điều này rất hữu ích để Đẩy tất cả các nhánh của bạn vào điều khiển từ xa và --set-upstream theo dõi chính xác cho bạn:

git Push --all -u

(Không chính xác những gì OP yêu cầu, nhưng lớp lót này khá phổ biến)

Nếu bạn đang chia sẻ repo của mình với người khác thì đây không phải là hình thức thực sự tốt vì bạn sẽ làm tắc nghẽn repo với tất cả các nhánh thử nghiệm tinh ranh của bạn.

470
ErichBSchulz

Trước khi giới thiệu git Push -u, không có tùy chọn git Push để có được những gì bạn mong muốn. Bạn phải thêm các câu lệnh cấu hình mới.

Nếu bạn tạo một nhánh mới bằng cách sử dụng:

$ git checkout -b branchB
$ git Push Origin branchB:branchB

Bạn có thể sử dụng lệnh git config để tránh chỉnh sửa trực tiếp tệp .git/config.

$ git config branch.branchB.remote Origin
$ git config branch.branchB.merge refs/heads/branchB

Hoặc bạn có thể chỉnh sửa thủ công tệp .git/config để có thông tin theo dõi đến chi nhánh này.

[branch "branchB"]
    remote = Origin
    merge = refs/heads/branchB
140
Lohrun

Nói một cách đơn giản, để tạo mới local Branch, do:

git branch <branch-name>

Để đẩy nó vào remote repository, do:

git Push -u Origin <branch-name>
119
piyushmandovra

Một biến thể nhỏ của các giải pháp đã được đưa ra ở đây:

  1. Tạo một nhánh cục bộ dựa trên một số nhánh khác (từ xa hoặc cục bộ):

    git checkout -b branchname
    
  2. Đẩy nhánh cục bộ vào kho lưu trữ từ xa (xuất bản), nhưng làm cho nó có thể theo dõi để git pullgit Push sẽ hoạt động ngay lập tức

    git Push -u Origin HEAD
    

    Sử dụng HEAD là "cách tiện dụng để đẩy chi nhánh hiện tại sang cùng tên trên điều khiển từ xa". Nguồn: https://git-scm.com/docs/git-Push Theo thuật ngữ Git, HEAD (viết hoa) là một tham chiếu đến đỉnh của nhánh hiện tại (cây).

    Tùy chọn -u chỉ viết tắt cho --set-setupstream. Điều này sẽ thêm một tham chiếu theo dõi ngược dòng cho chi nhánh hiện tại. bạn có thể xác minh điều này bằng cách tìm trong tệp .git/config của bạn:

     Enter image description here

78
bg17aw

Tôi chỉ đơn giản là làm

git Push -u Origin localBranch:remoteBranchToBeCreated

trên một dự án đã được nhân bản.

Git tạo ra một chi nhánh mới có tên remoteBranchToBeCreated theo cam kết của tôi, tôi đã làm trong localBranch.

32
Arda

Tôi cho rằng bạn đã nhân bản một dự án như:

git clone http://github.com/myproject.git
  1. Sau đó, trong bản sao cục bộ của bạn, tạo một chi nhánh mới và kiểm tra xem nó:

    git checkout -b <newbranch>
    
  2. Giả sử bạn đã tạo "git Bare --init" trên máy chủ của mình và tạo myapp.git, bạn nên:

    git remote add Origin ssh://example.com/var/git/myapp.git
    git Push Origin master
    
  3. Sau đó, người dùng sẽ có thể

    git clone http://example.com/var/git/myapp.git
    

LƯU Ý: Tôi giả sử rằng bạn có máy chủ của mình hoạt động. Nếu không, nó sẽ không hoạt động. Một cách tốt là ở đây .

THÊM

Thêm một chi nhánh từ xa:

git Push Origin master:new_feature_name

Kiểm tra xem mọi thứ có tốt không (tìm nạp Origin và liệt kê các nhánh từ xa):

git fetch Origin
git branch -r

Tạo một nhánh cục bộ và theo dõi nhánh từ xa:

git checkout -tb new_feature_name Origin/new_feature_name

Cập nhật mọi thứ:

git pull
29
VP.

chỉnh sửa Đã lỗi thời, chỉ cần sử dụng git Push -u Origin $BRANCHNAME


Sử dụng git publish-branch từ Công cụ Git linh tinh của William ( repo gitoriousclone ).

OK, không có Ruby, vì vậy - bỏ qua các biện pháp bảo vệ! - lấy ba dòng cuối cùng của tập lệnh và tạo tập lệnh bash, git-publish-branch:

#!/bin/bash
REMOTE=$1 # Rewrite this to make it optional...
BRANCH=$2
# Uncomment the following line to create BRANCH locally first
#git checkout -b ${BRANCH}
git Push ${Origin} ${BRANCH}:refs/heads/${BRANCH} &&
git config branch.${BRANCH}.remote ${REMOTE} &&
git config branch.${BRANCH}.merge refs/heads/${BRANCH}

Sau đó chạy git-publish-branch REMOTENAME BRANCHNAME, trong đó REMOTENAME thường là Origin (bạn có thể sửa đổi tập lệnh để lấy Origin làm mặc định, v.v ...)

22
Tobias Kienzler

Để tạo một nhánh mới bằng cách phân nhánh từ một nhánh hiện có

git checkout -b <new_branch>

và sau đó Đẩy nhánh mới này vào kho lưu trữ bằng cách sử dụng

git Push -u Origin <new_branch>

Điều này tạo và đẩy tất cả các cam kết cục bộ đến một nhánh từ xa mới được tạo Origin/<new_branch>

19
cptjack

Đối với phiên bản GitLab trước 1.7, hãy sử dụng:

git checkout -b name_branch

(name_branch, ví dụ: master)

Để đẩy nó vào kho lưu trữ từ xa, hãy làm:

git Push -u Origin name_new_branch

(name_new_branch, ví dụ: feature)

10
Fadid

Tôi đã tạo một bí danh để bất cứ khi nào tôi tạo một nhánh mới, nó sẽ Đẩy và theo dõi nhánh từ xa tương ứng. Tôi đặt đoạn mã sau vào tệp .bash_profile:

# Create a new branch, Push to Origin and track that remote branch
publishBranch() {
  git checkout -b $1
  git Push -u Origin $1
}
alias gcb=publishBranch

Cách sử dụng : chỉ cần nhập gcb thuy/do-sth-kool với thuy/do-sth-kool là tên chi nhánh mới của tôi.

8
Thuy Trinh

Dựa vào các câu trả lời ở đây, tôi đã kết thúc quá trình này như một tập lệnh Bash đơn giản, tất nhiên cũng có thể được sử dụng như một bí danh Git.

Bổ sung quan trọng đối với tôi là điều này nhắc tôi chạy thử nghiệm đơn vị trước khi cam kết và chuyển vào tên chi nhánh hiện tại theo mặc định.

$ git_Push_new_branch.sh

  Have you run your unit tests yet? If so, pass OK or a branch name, and try again

  usage: git_Push_new_branch {OK|BRANCH_NAME}

  e.g.

  git_Push_new_branch           -> Displays Prompt reminding you to run unit tests
  git_Push_new_branch OK        -> Pushes the current branch as a new branch to the Origin
  git_Push_new_branch MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the Origin

git_Push_new_branch.sh

function show_help()
{
  IT=$(CAT <<EOF

  Have you run your unit tests yet? If so, pass OK or a branch name, and try again

  usage: git_Push_new_branch {OK|BRANCH_NAME}

  e.g.

  git_Push_new_branch.sh           -> Displays Prompt reminding you to run unit tests
  git_Push_new_branch.sh OK        -> Pushes the current branch as a new branch to the Origin
  git_Push_new_branch.sh MYBRANCH  -> Pushes branch MYBRANCH as a new branch to the Origin

  )
  echo "$IT"
  exit
}

if [ -z "$1" ]
then
  show_help
fi

CURR_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$1" == "OK" ]
then
  BRANCH=$CURR_BRANCH
else
  BRANCH=${1:-$CURR_BRANCH}
fi

git Push -u Origin $BRANCH
2
Brad Parks