gitのブランチリモート接続とリモートブランチの引き出しプッシュおよび競合処理

8660 ワード

コメント:


廖雪峰先生のブログGitチュートリアルを参考にします.そのブログに基づいて学習と記録を行い、無私な共有に感謝し、原文を参照することを歓迎します.

インテリジェントポイント

  • 統合されていないブランチを強制的に削除し、git branch -D 、ブランチの修正
  • を失う.
  • git remoteおよびgit remote -v は、リモートウェアハウス情報
  • を表示する.
  • git push origin branch-nameローカルブランチをリモートにプッシュします.
  • デフォルトcloneリモートライブラリの後、masterブランチのみが表示され、他のブランチは追跡を設定する必要があり、git checkout -b dev origin/dev devブランチはoriginからのリモートブランチdevを追跡するように設定されています.
  • git branch --set-upstream-to=origin/ branchローカルブランチとリモートブランチの追跡を作成し、git pushgit pull
  • に使用する.
  • git pull 指定のリモートブランチ
  • を引く.

    Featureブランチ


    ソフトウェア開発では、無限の新しい機能が追加され続けています.
    新しい機能を追加するときは、いくつかの実験的なコードのために、メインブランチを混乱させることを望んでいません.そのため、新しい機能を追加するたびに、featureブランチを新設したほうがいいです.上で開発し、完成したら、合併して、最後に、featureブランチを削除します.
    例えば、次世代の宇宙船に使用する計画のVulcanという新しい機能を開発する新しい任務を受けました.
    開発の準備:
    $ git checkout -b feature-vulcan
    Switched to a new branch 'feature-vulcan'

    5分後、開発が完了しました.
    $ git add vulcan.py
    $ git status
    # On branch feature-vulcan
    # Changes to be committed:
    #   (use "git reset HEAD ..." to unstage)
    #
    #       new file:   vulcan.py
    #
    $ git commit -m "add feature vulcan"
    [feature-vulcan 756d4af] add feature vulcan
     1 file changed, 2 insertions(+)
     create mode 100644 vulcan.py
    devを切り取り、合併の準備をします.
    $ git checkout dev

    すべてがうまくいけば、feature分岐とbug分岐は似ていて、合併して削除します.
    ただし、何らかの理由でこの機能をキャンセルする必要があります.
    つまり、このブランチはその場で破棄する必要があります.
    $ git branch -d feature-vulcan
    error: The branch 'feature-vulcan' is not fully merged.
    If you are sure you want to delete it, run 'git branch -D feature-vulcan'.

    破棄に失敗しました.Gitによると、feature-vulcan分岐はまだ合併されていないが、削除すると修正が失われ、強制的に削除するにはコマンドgit branch -D feature-vulcanを使用する必要がある.
    強制的に削除します.
    $ git branch -D feature-vulcan
    Deleted branch feature-vulcan (was 756d4af).

    複数のコラボレーション

  • はリモートウェアハウスからクローン化され、Gitはローカルmasterブランチとリモートmasterブランチを自動的に対応させ、リモートウェアハウスのデフォルト名はorigin
  • である.
  • リモートウェアハウス情報を表示します.git remote
  • $ git remote
    origin
  • git remote -v リモートウェアハウス詳細
  • を表示する.
    $ git remote -v
    origin    [email protected]:findmoon/newrepo.git (fetch)
    origin    [email protected]:findmoon/newrepo.git (push)

    以上のようにプルとプッシュのoriginアドレスであり、プルとプッシュの2つの権限を有する

    プッシュブランチ

  • ブランチは、ブランチ上のすべてのローカルコミットをリモートライブラリにプッシュします.プッシュ時にローカルブランチを指定する必要があり、Gitはそのブランチをリモート対応ブランチにプッシュする:
  • $ git push origin master

    上はローカルマスターをoriginマスターにプッシュします.ローカルの他のブランチはプッシュされません
  • git push origin devは、他のブランチをプッシュし、遠隔地にない場合は(dev)ブランチを作成し、
  • をプッシュする.

    リモートブランチプッシュ推奨

  • masterブランチはメインブランチであるため、時刻をおいてリモートと同期
  • .
  • devブランチは開発ブランチであり、チームのすべてのメンバーが上で作業する必要があるため、リモートと同期する
  • も必要である.
  • bugブランチは、ローカルでバグを修復するためにのみ使用されます.ボスが毎週いくつかのバグを修復したかを見ない限り、リモートにプッシュする必要はありません.
  • featureブランチがリモートにプッシュされるかどうかは、パートナーと協力して
  • を開発するかどうかにかかっています.

    クローン(clone)リモートウェアハウス


    複数のコラボレーションでは、たとえば別のパートナー(別のコンピュータまたは別のディレクトリの下)をシミュレートし、リモートから倉庫をクローンします.
  • clone倉庫
  • $ git clone https://github.com/findmoon/newrepo.git
      'newrepo'...
    remote: Counting objects: 55, done.
    remote: Compressing objects: 100% (33/33), done.
    remote: Total 55 (delta 20), reused 54 (delta 19), pack-reused 0
     : 100% (55/55),  .
     ...  。

    ブランチのプッシュと競合処理


    ローカルブランチとリモートブランチの関連付け

  • のデフォルトでは、リモートライブラリcloneから、リモートmasterブランチがローカルのmasterブランチ
  • にしか見えません.
    $ cd newrepo/
    $ git branch
    * master
  • devブランチで開発するには、ローカルdevブランチを作成し、リモートoriginを追跡するdevブランチ
  • に設定する必要がある.
    $ git checkout -b dev origin/dev
      dev   origin   dev。
      'dev'
  • 新しいブランチは、リモート・ウェアハウスと同期しています.

  • もう1つのパートナーは、devブランチを変更し、pushをリモートに変更しました.
    $ git push origin dev
    Username for 'https://github.com': findmoon
    Password for 'https://[email protected]':
     : 3,  .
    Delta compression using up to 4 threads.
     : 100% (3/3),  .
     : 100% (3/3), 319 bytes | 0 bytes/s,  .
    Total 3 (delta 2), reused 0 (delta 0)
    remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
    To https://github.com/findmoon/newrepo.git
       09a36ec..5a15ca7  dev -> dev

    新しいローカルウェアハウスがリモートにプッシュされたのは初めてです.githubのユーザー名とパスワードを入力する必要があります

    プッシュ時にブランチを指定するか、ブランチトラッキングを設定します。


    パートナーがorigin/devをプッシュした後、あなたも同じファイルを修正し、プッシュしました.
    $ git push origin dev
    To [email protected]:findmoon/newrepo.git
     ! [rejected]        dev -> dev (fetch first)
    error:   '[email protected]:findmoon/newrepo.git'
     : , 。 
     : 。 , 
     :(  'git pull ...')。
     :  'git push --help'   'Note about fast-forwards'  。

    提示がプッシュできない、更新が拒否される、Git提示、プッシュは先に変更を統合する必要がある
  • リモートウェアハウスに変更がある場合は、再度プッシュするにはまず統合変更が必要であり、git pull
  • を使用する.git pullを使用してリモートの最新のコミットを引き出します.
    $ git pull
    remote: Counting objects: 3, done.
    remote: Compressing objects: 100% (1/1), done.
    remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0
     : 100% (3/3),  .
      github.com:findmoon/newrepo
       09a36ec..5a15ca7  dev        -> origin/dev
     。
     。
      git-pull(1)。
        git pull  
     , :
        git branch --set-upstream-to=origin/ dev
    git pullは、ローカルブランチとリモートgit pullブランチの追跡を指定する必要があるため、またはoriginパラメータでリモートブランチを指定する必要があるため、失敗しました.
  • git pullローカルブランチとリモートブランチの追跡を作成し、git branch --set-upstream-to=origin/ branchgit push
  • に使用する.
  • git pull指定引き抜きのリモートブランチ
  • トレースリモートブランチの設定
    $ git branch --set-upstream-to=origin/dev dev
      dev   origin   dev。

    ブランチの引き出し時のファイルの競合


    上に追跡が設定されている後、git pull に更新を引き出します.
    $ git branch --set-upstream-to=origin/dev dev
      dev   origin   dev。
    $ git pull
      readme.txt
     ( ):  readme.txt
     , 。

    この場合、pullが可能ですが、競合がマージされます.競合を解決する方法は、ローカルブランチ管理での競合と同じです.
  • 手動でgit pullを修正したときのマージ競合を提出し、最後にgit pull
  • に提出します.
    競合ファイルの表示
    $ cat readme.txt
    dev modify again commit on master
    110
    <<<<<<< HEAD
    I modify readme on dev branch
    =======
    modify dev branch file on another people
    >>>>>>> 5a15ca7c06dd2204fee3f4571e86b2bf64f6a83b

    競合するアイテムを削除した後、追加、コミット、およびプッシュを再開します.
    $ git add .
    $ git commit -m"fixed remote conflict"
    [dev 8a954f4] fixed remote conflict
    $ git push origin dev
     : 6,  .
    Delta compression using up to 4 threads.
     : 100% (6/6),  .
     : 100% (6/6), 570 bytes | 0 bytes/s,  .
    Total 6 (delta 4), reused 0 (delta 0)
    remote: Resolving deltas: 100% (4/4), completed with 2 local objects.
    To [email protected]:findmoon/newrepo.git
       5a15ca7..8a954f4  dev -> dev

    引き出しとプッシュが完了しました.
    もう1つのパートナーは、リモート・ライブラリとの更新を維持し、リモート・ライブラリの内容をローカルにマージします.
    $ git pull origin dev
    remote: Counting objects: 6, done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 6 (delta 4), reused 6 (delta 4), pack-reused 0
     : 100% (6/6),  .
      https://github.com/findmoon/newrepo
     * branch            dev        -> FETCH_HEAD
       5a15ca7..8a954f4  dev        -> origin/dev
      5a15ca7..8a954f4
    Fast-forward
     readme.txt | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)

    複数のコラボレーションによる作業モードの推奨

  • まず、pushで自分の修正
  • をプッシュしようとすることができる.
  • プッシュに失敗した場合、リモートブランチはローカルより更新されるため、git pull
  • をマージしようとする必要があります.
  • 競合がマージされた場合、競合は解決され、
  • がローカルにコミットされます.
  • 衝突がないか解決した後、git push origin branch-nameでプッシュすれば
  • に成功する.