「GITの使い方」の版間の差分

提供: Eospedia
移動: 案内検索
(差分ファイルを確認する)
 
(他の1人の利用者による、間の3版が非表示)
行55: 行55:
 
</pre>
 
</pre>
  
特定ファイルについての変更履歴を確認したいときは"git log-p (ファイル名)"を使用します。<br>
+
特定ファイルについての変更履歴を確認したいときは"'''git log -p''' (ファイル名)"を使用します。<br>
 
<br>
 
<br>
 
実行例<br>
 
実行例<br>
行105: 行105:
 
$ git clean -f
 
$ git clean -f
 
Removing a.txt
 
Removing a.txt
 +
</pre>
 +
 +
=== .gitignoreで無視されるファイルを強制的に追跡する ===
 +
以下コマンドにより、.gitignoreで無視されるファイルでも強制的に追跡することが可能になります。
 +
<pre>
 +
$ git add --force (ファイル名)
 
</pre>
 
</pre>
  
行124: 行130:
 
また、後にファイル名を付けることで特定のファイルのみHEADへ戻すことが可能です。
 
また、後にファイル名を付けることで特定のファイルのみHEADへ戻すことが可能です。
 
  git reset HEAD (ファイル名)
 
  git reset HEAD (ファイル名)
 +
 +
==== pushを間違えたとき ====
 +
下記のコマンドでpushしたときのIDを確認します。
 +
git log
 +
次にrevertで元に戻します。
 +
git revert (push時のID)
 +
これでローカルのワーキングツリー、インデックス、HEADが元に戻りましたので、<br>
 +
これをpushして完了となります。<br>
 +
<br>
 +
 +
==== 特定のリビジョンに戻したいとき ====
 +
下記のコマンドでリビジョンのIDを取得します。<br>
 +
<pre>
 +
$ git rev-parse vX.X.XpXXXX
 +
(リビジョンのID)
 +
</pre>
 +
<br>
 +
 +
このIDにてgit reset --hardを行うと、そのリビジョンまでワーキングディレクトリも含めて戻すことができます。更新によって不具合が発生し、とりあえず前回の環境に戻したい場合などに使用すると良いでしょう。<br>
 +
<pre>
 +
git reset --hard (リビジョンのID)
 +
</pre>
 +
<br>

2020年5月27日 (水) 08:30時点における最新版

GITの構造

下記にGITの構造を簡易図で示します。

HowToUse-GIT1.png
共有環境 <- 作業ファイルへの更新の場合
HowToUse-GIT2.png
共有環境 -> 作業ファイルへの更新の場合

一括でgit rmする方法

実際のファイルを消したのち、git rmを一括でかけたくなる場合があります。

git rm `git ls-files --deleted`

特殊なファイル名が混じっている場合には下記を使ってみましょう

git status | grep deleted: | cut -c 15- | sed -e 's/ /\\ /g' | xargs git rm

特殊なファイル名をgit rmする方法

特殊なファイル名(例えば、?)のものが消えない場合があります。その際に利用します。

git rm "XX"
git status | grep deleted: | cut -c 15- | sed -e 's/ /\\ /g' | xargs git rm

git reset とは?

HEAD の位置を変更するコマンド。オプションによってインデックス、ワーキングツリーの内容も変更できる。

git reset のオプションは? --soft、--mixed(オプションなしと同等)、--hard オプションがあり、影響度の小さい順に以下のようになる。

--soft HEAD の位置のみを変更する。インデックス、ワーキングツリーには影響なし。

--mixed (またはオプションなし) HEAD の位置とインデックスを変更する。ワーキングツリーには影響なし。

--hard HEADの位置、インデックス、ワーキングツリーをすべて変更する。

HEAD、インデックス、ワーキングツリーとは

  • ワーキングツリー:現在のディレクトリ
  • インデックス:addが終わった状態
  • HEAD:commitが終わった状態(登録されている一番最後)
    • HEAD^: HEADの一つ前(HEAD^^: さらに前)
    • HEAD~n: HEADのn番前
  • commitが終わった直後は、HEAD、インデックス、ワーキングツリーの3つが同じ位置を示す。
  • ファイル等を変更するとワーキングツリーが先に進む。
  • addを行うと、インデックスがワーキングツリーの位置に進む
  • さらにファイル等を修正すると、ワーキングツリーが先に進む(この場合、HEAD、インデックス、ワーキングツリーがすべて異なる状態)

差分ファイルを確認する

差分ファイルを確認するにはgit diffを使用します。

実行例

$ git diff
diff --git a/bin/wish/Display2/tclIndex b/bin/wish/Display2/tclIndex
index 8fd9302..75a715a 100644
--- a/bin/wish/Display2/tclIndex
+++ b/bin/wish/Display2/tclIndex

特定ファイルについての変更履歴を確認したいときは"git log -p (ファイル名)"を使用します。

実行例

$ git log -p TIPS/Help/Makefile/Makefile-lib
commit 8b3b508176a7ded9aa86df2b3e36aedc73702c7c

-中略-

Date:   Fri Oct 17 17:22:31 2014 +0900

    Add: TIPS of Projection for 3D
            new file:   TIPS/Projection3DImage/Makefile/Makefile
            new file:   TIPS/Projection3DImage/Makefile/Makefile-lib
    Modify: Template of tutorial Makefile.
     Changes to be committed:
        modified:   CTFCorrection/CTFCorrection4/Makefile.config
        modified:   CTFCorrection/CTFCorrection5/Makefile.config
        modified:   Small Tools/Template/Makefile/Makefile
        modified:   Small Tools/Template/Makefile/Makefile-lib

qキーで中断します。

作業ディレクトリを切り替える

git checkoutを使用すれば、作業ディレクトリ(ワーキングツリー)のデータをadd直後や特定のバージョン(タグ)に切り替えることができます。

$ git checkout (ファイル名)

こちらの操作でワーキングツリーはadd直後に切り替わります。

$ git checkout (タグ名) (ファイル名)

こちらの操作でワーキングツリーは特定のコミット直後に切り替わります。

例: ワーキングツリーを最後のコミット時に切り替える。
$ git checkout HEAD .

管理外のファイル削除する

git cleanを使用することにより、GITで管理していないファイルを削除することができます。例えば、コマンド単体テストやチュートリアル実行などでできるファイルなどをまとめて削除したい場合に有効です。オプション-n で削除対象の確認、オプション-f で実際に削除します。一旦削除すると元に戻せませんので、必ず -nで確認を行ってから実行しましょう。

使用例
$ git clean -n
Would remove a.txt
$ git clean -f
Removing a.txt

.gitignoreで無視されるファイルを強制的に追跡する

以下コマンドにより、.gitignoreで無視されるファイルでも強制的に追跡することが可能になります。

$ git add --force (ファイル名)

困ったとき・間違えたとき

共同開発においては、互いにデータを書き換えるのでトラブルは付き物です。しかし、そのトラブルを恐れていては積極的な開発は出来ないでしょう。ここではGITを使用する際に出くわす問題の対処法を記載していきます。

mergeがうまくいかないとき

下記のエラーメッセージに出会ったとき

error: Your local changes to the following files would be overwritten by merge:

下記のコマンドでローカルのワーキングツリー、インデックス、HEADをリモートの最新バージョンの状態に戻します。(管理外のファイルには適応されません。)

git reset --hard HEAD

addを間違えたとき

下記のコマンドでaddによるインデックスの変更をHEADの状態に戻します。(コミットせずに複数回addした場合は注意)

git reset HEAD

また、後にファイル名を付けることで特定のファイルのみHEADへ戻すことが可能です。

git reset HEAD (ファイル名)

pushを間違えたとき

下記のコマンドでpushしたときのIDを確認します。

git log

次にrevertで元に戻します。

git revert (push時のID)

これでローカルのワーキングツリー、インデックス、HEADが元に戻りましたので、
これをpushして完了となります。

特定のリビジョンに戻したいとき

下記のコマンドでリビジョンのIDを取得します。

$ git rev-parse vX.X.XpXXXX
(リビジョンのID)


このIDにてgit reset --hardを行うと、そのリビジョンまでワーキングディレクトリも含めて戻すことができます。更新によって不具合が発生し、とりあえず前回の環境に戻したい場合などに使用すると良いでしょう。

git reset --hard (リビジョンのID)