1. ホーム
  2. Qt

Gitの簡単な使い方を学ぶ

2022-03-17 08:22:05
<パス

このブログは、以下の学習記事を参考に、gitの記録を学習するためだけのブログです。



1. Gitチュートリアル by Xuefeng Liao



2. Git 共通コマンドの説明


Git コマンドの説明

バージョン管理ツールに公開されているコマンドです。



1. ギットプル : 他のリポジトリ(リモートまたはローカル)からローカルにコードを更新する、など。 git pull origin master は、オリジンレポジトリをローカルのmasterブランチに更新することです



2. git add これはコミットする前に行う必要があるステップで、例えば次のようになります。 git add app/model/user.rb を追加します。 app/model/user.rb ファイルをGitのインデックスに追加します。



3. git rm : 現在のワークスペースとインデックスからファイルを削除する、例. git rm app/model/user.rb



4. ギットコミット : 変更を現在のワークスペースにコミットする、例. git commit -m story #3, add user model コミットするときは、-mでコミットメッセージを入力する必要があります。



5. git push : ローカルコミットからリモートリポジトリにコードを更新する、など。 git push origin は、ローカルのコードを orgin というリモートリポジトリに更新します。



6. ギットログ : 履歴ログを表示する



7. git リバート : バージョン変更を取り消すには、特定のGitバージョン番号を指定する必要があります。例えば 'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20', Gitバージョン番号はハッシュとして生成されます。

Git特有のコマンドをいくつか紹介します。



8. ギットブランチ : ブランチの追加、削除、チェックなど。 git branch new_branch は、現在の作業バージョンから new_branch という新しいブランチを作成します。 git branch -D new_branch で、new_branch というブランチは強制的に削除されます。 git branch はすべてのローカルブランチをリストアップします



9. gitチェックアウト : Gitのチェックアウトには2つの目的があります。ひとつは、異なるブランチを切り替えることで、たとえば git checkout new_branch は new_branch ブランチに切り替えます。もうひとつの機能はコードをリストアすることです。 git checkout app/model/user.rb は user.rb ファイルを最後のコミットから更新し、コミットされていない内容もロールバックします。



10. git リベース : rebaseコマンドを実行すると、実際にCからGに分岐点が移動するので、CからGへの分岐としても機能することを、以下の2つの図を使って説明するとわかりやすいでしょう。



11. ギットリセット : 現在の作業ディレクトリを指定されたバージョン番号に完全にロールバックする。たとえば、以下のように A-G の 5 つのコミットがあり、C のバージョン番号が bbaf6fb5060b4875b18ff9ff637ce118256d6f20 であるとすると、次のように実行します。 git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20 すると結果は、A-Cの3つのコミットだけとなります。



12. ギットスタッシュ : 現在の未コミットの作業をGitワークスタックに保存し、時期が来たらそれを適用します。このコマンドの使い方を簡単に説明します。この後のヒントセクションで焦点を当てます。



13. ギットコンフィグ : このコマンドは、以下のような様々なGitの設定を追加・変更するために使用します。 git config branch.master.remote origin このコマンドは、マスターのリモートリポジトリをオリジンリポジトリと呼ぶように設定します。後のヒントセクションで、このコマンドを使ってあなたのGitをユニークなものにするためにパーソナライズすることができます。



14. gitタグ : 特定のバージョンにタグを付けることができるので、複雑なバージョンハッシュを覚える必要がありません。たとえば git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20 そうすれば、後でそのバージョンを見たいときに、ハッシュの代わりに revert_version タグを使用することができます。

Gitが簡単にローカルブランチを提供したり、その他の機能を提供できるのは、そのファイル保存メカニズムによるもので、Gitが定義したファイルシステムを使って、バージョン管理情報をコードルートにある.gitフォルダーに保存するようになっています。

$ ls .git/
branches COMMIT_EDITMSG config description HEAD hooks index info logs objects ORIG_HEAD refs

説明する必要のある重要なファイルとディレクトリがいくつかあります。HEADファイルはルートノードに関する情報を格納し、実際、ディレクトリ構造はツリー構造を表し、Gitはバージョン情報を格納するためにこのツリー構造を使い、それからHEADはルートを表します。refsディレクトリは現在のバージョンコントロール・ディレクトリへの様々な参照を格納します(参照はローカルおよびリモートで使う様々なツリーブランチを参照します)。heads, remotes, stash, tags という 4 つのサブディレクトリがあり、それぞれルート、リモートリポジトリ、Git スタック、タグの 4 つの異なる参照を保存します。参照をより明確に見るには、 'git show-ref' というコマンドを使います。logs ディレクトリは参照に応じたログ情報を保存します。したがって、GitはSVNのようにルートとサブディレクトリの両方に.svnディレクトリを持つのではなく、完全なバージョン管理情報を記録するためにコードのルートにこの一つの.gitディレクトリがあればよいのです。では、GitとSVNの違いを見てみましょう。

リポジトリの作成 git init

最初のステップは、適切な場所を選び、空のディレクトリを作成することです。

$ mkdir learngit
$ cd learngit

2番目のステップでは git init コマンドを使用して、このディレクトリをGitで管理可能なリポジトリにします。

$ git init
Initialized empty Git repository in /home/users/huangxue/learngit/.git/

使用方法 ls -ah コマンドを実行すると .git ディレクトリ

リポジトリへのファイルの追加 git add + git commit

最初のステップでは、コマンド git add でファイルをリポジトリに追加するよう Git に指示します。

$ git add readme.txt

上記のコマンドを実行しても何も表示されませんが、これは正しいです。

$ git status
# On branch master
#
# Initial commit
# Initial commit
# Changes to be committed:
# (use "git rm --cached 
... " to unstage)

#
# new file: readme.txt
#

2番目のステップでは、コマンド git commit のリポジトリにコミットするようGitに指示します。

$ git commit -m "wrote a readme file"

*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: empty ident name (for <huangxue@dl1.(none)>) not allowed

上記のエラーは、gitがユーザー情報を設定していない(ident名が空)ことを表しています。



解決方法 user.emailとuser.nameを設定するだけです。(その 参照 )

$git config --global user.name "cherie"  
$git config --global user.email "[email protected]" 

コミットを再実行する

$ git commit -m "wrote a readme file"
[master (root-commit) 50829b7] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

ワークスペースの状態を表示する ギットステータス

readme.txtの内容を変更して、以下のように使用します。 git status コマンドでワークスペースの状態を見ることができます。

$ vim readme.txt
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add 
... " to update what will be committed)

# (use "git checkout -- 
... " to discard changes in working directory)

#
# modified: readme.txt
# modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")

ワークスペースの変更点を表示する git diff

を見ることができます。 git status を使うと、ファイルが変更されたことがわかります。 git diff をクリックすると、変更点が表示されます。

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
++ Git is a distributed version control system.
 Git is free software.

コミット履歴を見る ギットログ

使用方法 git log コマンドを使用すると、最新から最も古いコミットログまで表示することができます。

$ git log
commit f8cd540b86cfb5b9b21a1a5bd0d2f20c56823b4f
Author: cherie <[email protected]>
Date: Thu Nov 2 07:54:01 2017 -0400

    add distributed

commit 50829b77a3ae43df944bfbb8bd1f856b379d86d5
Author: cherie <[email protected]>
Date: Thu Nov 2 07:52:37 2017 -0400

    wrote a readme file

もし、出力が目に余るようであれば、さらに --pretty=oneline パラメータ

$ git log --pretty=oneline
f8cd540b86cfb5b9b21a1a5bd0d2f20c56823b4f add distributed
50829b77a3ae43df944bfbb8bd1f856b379d86d5 wrote a readme file

バージョンのロールバック ギットリセット

まず、どのバージョンが現在のバージョンなのかを知る必要があり、Gitでは HEAD は現在のバージョンを示し、最新のコミットf8cd540b86cfb5b9b21a1a5bd0d2f20c56823b4f(私のコミットIDはあなたと確実に異なることに注意してください)、最終バージョンは HEAD^ で、その前のバージョンは HEAD^^ もちろん、100バージョンまでは100 ^と書く方が簡単なので、次のように書きます。 HEAD~100 .

さて、現在の "add distributed" のバージョンを以前の "wrote a readme file" のバージョンにロールバックするには、次のようにします。 git reset コマンドを使用します。

$ git reset --hard HEAD^
HEAD is now at 50829b7 wrote a readme file

もし将来のバージョンに戻りたい場合は、そのバージョンのコミットID、例えば50829b...を見つける必要があります(完全なバージョン番号を書く必要はなく、最初の数桁だけ書けば、Gitは自動的にそれを見つけます)ので、回復バージョンを指定することができます。

$ git reset --hard f8cd540b
HEAD is now at f8cd540 add distributed
$ git log --pretty=oneline
f8cd540b86cfb5b9b21a1a5bd0d2f20c56823b4f add distributed
50829b77a3ae43df944bfbb8bd1f856b379d86d5 wrote a readme file

全ブランチの全アクションのログを表示 git reflog

Gitでは、常に後悔の念がつきまといます。というのは $ git reset --hard HEAD^ Gitはコマンド git reflog を使用して、各コマンドのログを記録します。

$ git reflog
f8cd540 HEAD@{1}: reset: moving to f8cd540b
f8cd540 HEAD@{3}: reset: moving to HEAD^
f8cd540 HEAD@{5}: commit: add distributed
50829b7 HEAD@{6}: commit (initial): wrote a readme file

支店管理

<ブロッククオート

ブランチの表示: git branch



ブランチの作成: git branch



ブランチの切り替え:git checkout



ブランチの作成+切り替え:git checkout -b



あるブランチを現在のブランチにマージする: git merge



ブランチの削除: git branch -d

ブランチの作成 git checkout -b xxx

Create a dev branch and then switch to the dev branch: $ git checkout -b dev

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout コマンドに加え -b パラメータは create と switch を表し、次の2つのコマンドに相当します。

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

次に git branch コマンドで現在のブランチを確認できます。

$ git branch
* dev
  master

すべてのブランチをリストアップ gitブランチ

git branch コマンドはすべてのブランチを一覧表示し、現在のブランチの前には * 印を付けます。



そして、devブランチで普通にコミットできるようになります。たとえば、readme.txtにCreating a new branch is quickという一行を加えて変更すればよいのです。

そしてコミットします。

$ git add readme.txt 
$ git commit -m "branch test"
[dev 4aa1cab] branch test
 1 file changed, 1 insertion(+)


ブランチの切り替え git checkout xxx

dev ブランチの作業が終わったので、master ブランチに戻りましょう。

$ git checkout master
Switched to branch 'master'

master ブランチに戻って readme.txt を見てみると、先ほど追加したものが消えています! なぜなら、このコミットは dev ブランチでのものであり、master ブランチのコミットポイントはこの時点では変わっていないからです。

ブランチのマージ git マージ

git merge コマンドは、指定されたブランチを現在のブランチにマージするために使用されます。

$ git merge dev
Updating 1b1381f..4aa1cab
Fast-forward
 readme.txt | 1 +
 1 file changed, 1 insertion(+)


ブランチの削除 git マージ

$ git branch -d dev
Deleted branch dev (was 4aa1cab).

削除後、ブランチを見ると、masterブランチだけが残っています。

$ git branch
* master