gitブランチ管理、タグ管理、gitエイリアス、gitサーバーの構築

Gitブランチ管理

ほとんどすべてのバージョン管理システムは、何らかの形でブランチをサポートしています。ブランチを使用すると、開発のメインラインから分離して、メインラインに影響を与えることなく作業を続行できます。

Gitのブランチモデルを涅槃機能と呼ぶ人もいますが、Gitをバージョン管理システムのファミリーと区別しているのはまさにそのためです。

ブランチコマンドの作成:

gitブランチ(ブランチ名)

ブランチコマンドの切り替え:

git checkout(ブランチ名)

ブランチを作成し、新しく作成されたブランチに切り替えます

git checkout -b(ブランチ名)

[root @ jinkai newfile] #gitブランチ

*メイン

[root @ jinkai newfile] #git branch admin

[root @ jinkai newfile] #gitブランチ

管理者

*メイン

[root @ jinkai newfile] #git checkout admin

ブランチ「admin」に切り替えます

[root @ jinkai newfile] #gitブランチ

*管理者

メイン

ブランチを切り替えると、Gitは作業ディレクトリの内容をそのブランチの最後にコミットされたスナップショットに置き換えるため、複数のブランチに複数のディレクトリは必要ありません。

ただし、git addがライブラリに追加されると、各ブランチのコンテンツは次のように個別になります。1.txtが次のようにadminブランチに追加されたら、メインブランチに戻って、ないことを確認します。

[root @ jinkai newfile] #git checkout admin

ブランチ「admin」に切り替えます

[root @ jinkai newfile] #echo 11111> 1.txt

[root @ jinkai newfile] #git add 1.txt

[root @ jinkai newfile] #git commit -m "touch 1.txt"

[admin 13f3b30] touch 1.txt

1つのファイルが変更され、1つの挿入(+)

作成モード1006441.txt

[root@jinkai newfile]# ls

1.txt a.txt README.md

[root @ jinkai newfile] #git checkout main

ブランチ「メイン」に切り替えます

[root@jinkai newfile]# ls

a.txt README.md

支店の合併:

ブランチをマージする前に、ターゲットブランチに切り替えて、adminブランチをmainにマージします

[root @ jinkai newfile] #git checkout main

すでに「メイン」にあります

[root @ jinkai newfile] #git merge admin

更新957bc21..13f3b30

早送り

1.txt | 1 +

1つのファイルが変更され、1つの挿入(+)

作成モード1006441.txt

合併から生じる紛争:

adminブランチとmainブランチの両方がa.txtを編集している場合、マージ時に競合が発生します。マージを続行するには、競合を解決する必要があります。

競合を解決する方法は、メインブランチの下のa.txtを編集し、それをadminブランチ内のa.txtのコンテンツに変更することです。次に、a.txtを送信してから、adminブランチをマージします。

[root @ jinkai newfile] #git merge admin

a.txtを自動的にマージします

競合(コンテンツ):a.txtの競合をマージします

自動マージが失敗し、競合を修正して、修正された結果を送信します。

[root @ jinkai newfile] #cat a.txt

yyyy

<<<<<<< HEAD

mainmainmainmain

=======

mainmainmain

adminadminadmin

\ >>>>>>>管理者

[root @ jinkai newfile] #vim a.txt

[root @ jinkai newfile] #git add a.txt

[root @ jinkai newfile] #git commit -m "main file a.txt"

[メイン7baca4e]メインファイルa.txt

[root @ jinkai newfile] #git merge admin

すでに最新です。

しかし、問題があります。メインブランチのコンテンツが必要なものである場合はどうなりますか?a.txtの内容を編集し、必要なものに変更してから送信することができます。adminブランチに切り替えてから、mainブランチをadminブランチにマージします(逆マージ)。

[root @ jinkai newfile] #git checkout admin

ブランチ「admin」に切り替えます

[root @ jinkai newfile] #git merge main

アップデート3445592..f2828c2

早送り

a.txt | 1-

1つのファイルが変更され、1つの削除(-)

[root @ jinkai newfile] #cat a.txt

yyyy

mainmainmain

ブランチをマージする原則は、最新のブランチを古いブランチにマージすることです。つまり、マージ後のブランチ名は最新のブランチである必要があります。

ブランチの削除:

git branch -d admin

ブランチがマージされていない場合は、削除する前にプロンプ​​トが表示され、マージせずに強制的に削除されます

gitブランチ-D管理者

削除されたブランチを復元するには:

Gitはブランチ管理を担当するため、ブランチを削除すると、Gitは関連するコミットへのポインターのみを削除しますが、コミットオブジェクトは引き続きリポジトリに残ります。

したがって、ブランチが削除されたときのハッシュ値がわかっていれば、削除されたブランチを復元できます。コミットのハッシュ値がわかっている場合は、ブランチを回復します。

gitブランチ<branch_name> <hash_val>

復元するブランチのハッシュ値がわからない場合は、reflogコマンドを使用して見つけることができます。といった:

[root @ jinkai newfile] #git branch -d admin

ブランチ管理者(以前のca5f319)は削除されました。

[root @ jinkai newfile] #git branch admin HEAD @ {0}

img

reflog **コマンド**:

すべてのブランチのコミットを含む、ローカルリポジトリ全体のコミット、および取り消されたコミットも表示します。

HEADが変更されている限り、reflogに表示されます。

このとき、復元ブランチa_branchブランチは次のとおりです。

git branch admin HEAD @ {0}

ブランチの使用の原則:

ブランチアプリケーションの場合、次の原則に従うことをお勧めします。

メインブランチは非常に重要です。このブランチをオンラインコードリリースに使用します。通常、このブランチでコードを開発することはありません。

開発専用のdevブランチを作成し、オンラインで公開する前にのみdevブランチをmainにマージします。

開発者は、devに基づいてパーソナルブランチに分岐し、パーソナルブランチ(自分のPC上)でコードを開発してから、devブランチにマージする必要があります。

devブランチがbobブランチをマージするためのコマンドは次のとおりです。

[root @ jinkai newfile] #git checkout dev

ブランチ「dev」に切り替えます

[root @ jinkai newfile] #git merge bob

すでに最新です。

[root @ jinkai newfile] #git checkout main

ブランチ「メイン」に切り替えます

[root @ jinkai newfile] #git merge dev

すでに最新です。

リモートブランチ管理

新しく作成されたローカルブランチがリモートにプッシュされない場合、他のユーザーには表示されません

リモートブランチを表示する:

gitls-リモートオリジン

[root @ jinkai newfile]#gitls-リモートオリジン

f2828c2b54dfd986da7a8798733b19bf82793145ヘッド

f2828c2b54dfd986da7a8798733b19bf82793145 refs / heads / main

gitプッシュブランチには2つのケースがあります

ローカルブランチとリモートブランチが同じ場合

git pushは、すべてのローカルブランチの変更を一緒にリモートにプッシュします。1つのブランチのみをプッシュする場合は、git push originbranch-nameを使用します。

[root @ jinkai newfile] #git push origin admin

合計0(デルタ0)、再利用0(デルタ0)

リモート:

リモート:次の場所にアクセスして、GitHubで「admin」のプルリクエストを作成します。

リモート:https//github.com/jinkai-linux/newfile/pull/new/admin

リモート:

https://github.com/jinkai-linux/newfile.git

* [新しいブランチ] admin-> admin

リモートブランチよりもローカルブランチの数が多い場合、デフォルトではgit pushはローカルブランチとリモートブランチのみをプッシュします。追加のローカルブランチをリモートにプッシュする場合は、git push origin branch-nameを使用します。プッシュが失敗した場合は、最初にgitを使用します。プルしてリモートの新しいコミットを取得します

git cloneの場合、デフォルトではメインブランチのみが複製されます。すべてのブランチを複製する場合は、手動で作成する必要があります。リモートブランチに対応するブランチをローカルで作成するには、git checkout -b branch-name origin / branchを使用します。 -name、localリモートブランチの名前と同じ

img img

エラー:

[root @ jinkai newfile] #git checkout -b dev origin / dev

致命的:パスの更新とブランチ 'dev'への切り替えを同時に行うことはできません。

コミットとして解決できない「origin / dev」をチェックアウトするつもりでしたか?

解決策1:

ローカルブランチを作成する

git checkout -b dev

それから彼の出発点をリセットします

git reset --hard origin / dev

git fetch originを実行し、実行する前にリモートdevブランチが存在することを確認してください。

[root @ jinkai newfile] #gitブランチ

管理者

*開発

メイン

解決策2:

git remote show origin
git remote update
git fetch

git checkout -b dev origin / dev

ラベル管理

ラベルはスナップショット機能に似ており、バージョンライブラリにラベルを付けて、特定の時点でのライブラリの状態を記録できます。また、いつでもこの状態に戻すことができます。

git checkout main //最初にメインブランチにカット

git tag v1.0 // tag main v1.0

git show v1.0 //ラベル情報を表示する

git tag //すべてのタグを表示できます

タグはコミット用なので、履歴コミット用にタグを付けることができます

git log --pretty = oneline --abbrev-commit //最初に履歴コミットを確認します

git tag v0.9 f60f5d1 //履歴コミットのタグ

git tag -a v0.8 -m "tag just v1.1 and etc." 1cdb957 //タグを記述できます

git tag -d v0.8 //タグを削除します

git push origin v1.0 //指定されたラベルをリモートにプッシュします

git push --tag origin //すべてのタグをプッシュします

ラベルをローカルで削除する場合、リモートで削除する場合は次のようにする必要があります。

git tag v1.0 -d //ローカルタグを削除します

git push origin:refs / tags / v1.0 //リモートタグを削除します

[root @ jinkai newfile] #git tag v1.0

[root @ jinkai newfile] #git show v1.0

コミットf2828c2b54dfd986da7a8798733b19bf82793145

作者:root <[email protected]>

日付:日曜日12月13日00:08:24 2020 +0800

メインファイルa.txt

diff --git a / a.txt b / a.txt

インデックス1383736..384c402100644

--- a / a.txt

+++ b / a.txt

@@ -1,3 +1,2 @@

yyyy

mainmainmain

-adminadminadmin

[root @ jinkai newfile] #git tag

v1.0

[root @ jinkai newfile] #git log --pretty = oneline --abbrev-commit

f2828c2メインファイルa.txt

7baca4eメインファイルa.txt

61ecf5bメインファイルa.txt

3445592管理ファイルa.txt

269659aメインファイルa.txt

13f3b30 touch 1.txt

957bc21 wowowo

f60f5d1 whowhowho

1cdb957 wowowo

c36e391a.txtを更新

d3b0dc5新しいファイルa.txt

ca5f319管理ファイルa.txt

f701012README.mdを更新します

14cef13README.mdを更新します

f278ae1の最初のコミット

[root @ jinkai newfile] #git tag v0.9 f60f5d1

[root @ jinkai newfile] #git tag -a v0.8 -m "tag just v1.1 and etc." 1cdb957

[root @ jinkai newfile] #git tag

v0.8

v0.9

v1.0

[root @ jinkai newfile] #git tag -d v0.8

タグ「v0.8」を削除しました(以前は16b3de5でした)

[root @ jinkai newfile] #git push origin v1.0

合計0(デルタ0)、再利用0(デルタ0)

https://github.com/jinkai-linux/newfile.git

* [新しいタグ] v1.0-> v1.0

[root @ jinkai newfile] #git push --tag origin

合計0(デルタ0)、再利用0(デルタ0)

https://github.com/jinkai-linux/newfile.git

* [新しいタグ] v0.9-> v0.9

[root @ jinkai newfile] #git tag v0.9 -d

タグ「v0.9」を削除しました(以前はf60f5d1でした)

[root @ jinkai newfile] #git push origin:refs / tags / v0.9

https://github.com/jinkai-linux/newfile.git

-[削除済み] v0.9

gitエイリアス

git commitコマンドは少し長いですか?エイリアスを使用すると、作業効率を向上させることができます

git config --global alias.ci commit // ciはエイリアスですcommitは元のコマンドです

git config --global alias.co checkout

git config --globalalias.brブランチ

コマンドを使用してgitエイリアスを表示する

git config --list | grepエイリアス

クエリログのヒント:

git config --global alias.lg "log --color --graph --pretty = format: '%Cred%h%Creset-%C(yellow)%d%Creset%s%Cgreen(%cr)%C(太字の青)<%an>%Creset '-abbrev-commit "

エイリアスをキャンセル

git config --global --unset alias.br

エイリアス構成ファイルを表示する

cat /root/.gitconfig

[root @ jinkai newfile] #git config --global alias.ci commit

[root @ jinkai newfile] #git config --global alias.co checkout

[root @ jinkai newfile] #git config --globalalias.brブランチ

[root @ jinkai newfile] #git config --list | grepエイリアス

alias.ci =コンマ

alias.co = checkout

alias.br = branch

[root @ jinkai newfile] #git config --global alias.lg "log --color --graph --pretty = format: '%Cred%h%Creset-%C(yellow)%d%Creset%s%Cgreen (%cr)%C(太字の青)<%an>%Creset '-abbrev-commit "

[root @ jinkai newfile] #git lg

* f2828c2-(HEAD、タグ:v1.0、origin / main、origin / admin、main、admin)メインファイルa.txt(21時間前)<root

* 7baca4e-メインファイルa.txt(21時間前)<root>

| \

| * 3445592-管理ファイルa.txt(21時間前)<root>

-------------------------------------------------- -----

[root @ jinkai newfile] #git config --global --unset alias.br

[root @ jinkai newfile] #git config --list | grepエイリアス

alias.ci =コンマ

alias.co = checkout

alias.lg = log --color --graph --pretty = format: '%Cred%h%Creset-%C(yellow)%d%Creset%s%Cgreen(%cr)%C(bold blue)<% an>%Creset '-abbrev-commit

[root @ jinkai newfile] #cat /root/.gitconfig

[ユーザー]

名前=ルート

メール[email protected]

[押す]

デフォルト=マッチング

[エイリアス]

ci =コミット

co =チェックアウト

lg = log --color --graph --pretty = format: '%Cred%h%Creset-%C(yellow)%d%Creset%s%Cgreen(%cr)%C(bold blue)<%an> %Creset '-abbrev-commi

gitサーバーを構築する

結局のところ、githubは公開されており、プライベートウェアハウスを購入する必要があります。だから私たちは、私たちの会社だけが使用するプライベートなものを構築する方法を見つけることができます。Gitlabは良い選択です。それを紹介する前に、コマンドラインgitサーバーについて話しましょう

サーバーを見つけるには、最初にgitをインストールし、yum install -ygitをインストールします

gitユーザーを追加し、シェルを/ usr / bin / git-shellに設定します。目的は、gitユーザーがリモートでログインできないようにすることです。

useradd -s / usr / bin / git-shell git

cd / home / git

authorized_keysファイルを作成し、所有者、グループ、およびアクセス許可を変更して、クライアントマシンに公開鍵を保存します

mkdir .ssh

.ssh / authorized_keysをタッチします

chown -R git:git .ssh

chmod 600 .ssh / authorized_keys

/ data / gitrootなど、gitリポジトリが保存されているディレクトリを特定します

mkdir / data / gitroot

cd / data / gitroot

git init --bare sample.git //ベアウェアハウスが作成されます。サーバー上のGitウェアハウスは純粋に共有用であるため、ベアウェアハウスにはワークスペースがありません。そのため、ユーザーはサーバーに直接ログインして変更することはできません。ワークスペース、およびGitリポジトリは通常.gitで終わります

chown -R git:git sample.git

上記の操作はgitサーバーで行われます。通常、gitサーバーは開発者がコードを変更するためにログインする必要はありません。githubと同様にサーバーとしてのみ機能します。通常の操作は独自のPCで行われます。

まず、クライアントの公開鍵をgitサーバーの/home/git/.ssh/authorized_keysファイルに配置します

クライアント(自分のPC)でリモートウェアハウスのクローンを作成します

git clone git @ ip:/data/gitroot/sample.git

この時点で、現在のディレクトリにサンプルディレクトリを生成できます。これは、クローンを作成したリモートです。

倉庫が出ています。これを入力すると、コードを開発してからリモートにプッシュするか、サーバーからクライアントにクローンを作成できます。

[root @ jinkai05〜] #yum install -y git

[root @ jinkai05〜] #useradd -s / usr / bin / git-shell git

[root @ jinkai05〜] #cd / home / git /

[root @ jinkai05 git] #mkdir .ssh

[root @ jinkai05 git] #touch .ssh / authorized_keys

[root @ jinkai05 git] #chown -R git:git .ssh

[root @ jinkai05 git] #chmod 600 .ssh / authorized_keys

[root @ jinkai05 git] #mkdir / data / gitroot

[root @ jinkai05 git] #cd!$

cd / data / gitroot

[root @ jinkai05 gitroot] #git init --bare sample.git

/data/gitroot/sample.git/にある空のGitリポジトリを初期化します

[root @ jinkai05 gitroot] #chown -R git:git sample.git /

[root @ jinkai05 gitroot] #vim /home/git/.ssh/authorized_keys

[root @ jinkai05 gitroot] #cat!$

cat /home/git/.ssh/authorized_keys

SSH-RSA AAAAB3NzaC1yc2EAAAADAQABAAACAQDsGH9A1mo0IRXhrBsWO9Zpkv45nJT14tYQhPt6BEN / 17VPESvHVP0Ur0cVIG571Nh1yyCcLBzInDsR4UVRrexUp6j7NNXv9qA / 89DomYFp3W67WLch2fa4WkX2xeKxoZR0RJpnQK0NS5EOhe9vrI5aAJe / OsVOfMoHB8HJI / rPsS9mLmOG + PVSmQzokF4DYRmOXB / + eZ0H0Rwoy8W87WF269yliaQQMPsGgJK + 1kYhqIkEk80fEE6kGd1ZR0gSLoYYXrmSVhOhLis3TKGQLe4UqpuuV95MFmcaT1yvUVnuAqNRjmxs / hia6htySbGibcF4OmjKQU + ZFh2q + Sk1Xx147OsiT3w9WPd + QQTHvDWlN1Qy​​PER7elSf65mcuX8QFz1WB / GV + sQの+ qNwd + 9C2xV5WtacD + 1 / QU6XQOD48mKl3VbazJoZ8K0DTYmqsm + J9Y2QuuXQ8iLBNH0zvxh3zBGpdd140q8VitAxbGA98aiXURA2D + jatlEZKMmKPlCu4JuGdsTsTex + NA9 + WI0 / PthfIkzcDjMFNoRHMkMhBJfTz2t / bOW4EgDBni0JrP66JHIMg9s2QN0O1fRtEQzcimT3FpndhYDgrM4b1G + 4K41oE + rj9tAe7sVSG2afxbDY4p53988Oze9lxPwPE2 + JT8z + ztRlfCRZqm0o3

[root @ jinkai newfile] #git clone [email protected]:/data/gitroot/sample.git

'サンプル'へのクローン作成...

ホスト「192.168.111.140(192.168.111.140)」の信頼性を確立できません。

ECDSAキーのフィンガープリントはSHA256:GnZadcz8FK3PLcgNXjhMWbz0Qgqi2LvbqaoR + wLdV9Qです。

ECDSAキーのフィンガープリントはMD5:00:10:2a:88:19:39:d4:58:7d:7a:22:0d:03:bb:82:0aです。

接続を続行してもよろしいですか(はい/いいえ)?はい

警告:既知のホストのリストに「192.168.111.140」(ECDSA)を恒久的に追加しました。

警告:空のリポジトリのクローンを作成したようです。

[root@jinkai newfile]# ls

1.txt README.mda.txtサンプル

[root @jinkaiサンプル] #echo aaaaa> a.txt

[root @jinkaiサンプル] #git add a.txt

[root @jinkaiサンプル] #git commit -m "ch a.txt"

[マスター(ルートコミット)d75b190] ch a.txt

1つのファイルが変更され、1つの挿入(+)

作成モード100644a.txt

[root @jinkaiサンプル] #git push

共通の参照はなく、指定もありません。何もしない。

おそらく、「master」などのブランチを指定する必要があります。

致命的:リモートエンドが予期せずハングアップしました

エラー:一部の参照を「[email protected]:/data/gitroot/sample.git」にプッシュできませんでした

[root @jinkaiサンプル] #git push origin master

オブジェクトのカウント:3、完了。

オブジェクトの書き込み:100%(3/3)、199バイト| 0バイト/秒、完了。

合計3(デルタ0)、再利用0(デルタ0)

[email protected]:/data/gitroot/sample.gitへ

* [新しいブランチ]マスター->マスター

[root @ jinkaiサンプル] #cd / tmp /

[root @ jinkai tmp] #git clone [email protected]:/data/gitroot/sample.git

'サンプル'へのクローン作成...

リモート:オブジェクトのカウント:3、完了。

リモート:合計3(デルタ0)、再利用0(デルタ0)

オブジェクトの受信:100%(3/3)、完了。

[root @ jinkai tmp] #ls sample /

a.txt

[root @ jinkai tmp] #cat sample / a.txt

aaaaa

おすすめ

転載: blog.51cto.com/11451960/2640804