facebook twitter hatena line email

「Git/コマンド」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
行30: 行30:
 
  $ git add -u
 
  $ git add -u
 
  $ git commit
 
  $ git commit
 +
 +
==コミット時の差分確認==
 +
git commit -v
  
 
==現在のブランチ確認==
 
==現在のブランチ確認==
行241: 行244:
 
==gitログ検索==
 
==gitログ検索==
 
  git log --stat -S hogehoge
 
  git log --stat -S hogehoge
 
==コミット時の差分確認==
 
git commit -v
 

2016年12月13日 (火) 13:56時点における版

目次

gitクローン作成

$ git clone ssh://user1@localhost/var/git/project1.git project1

gitのインデックスに追加する場合

全てのファイル

$ git add .

新しく作成されたファイルも含めるとき

$ git add -A

ローカルの変更を元に戻す場合

$ git checkout file1

全ての場合

$ git checkout .

全ソースをある地点まで戻す

git checkout リビジョンid
git pull origin master // 戻した後、ソースを最新にする場合

git pushがnon-fast-forwardエラーとなりpushできない際

push先の子孫でない場合発生

$ git merge origin master

を実行してからpush

もしくは強制的に・・

$ git push --force

削除したファイルをコミットするには

$ git add -u
$ git commit

コミット時の差分確認

git commit -v

現在のブランチ確認

$ git branch
* master

現在のブランチ確認(リモートも含める場合

$ git branch -a
* master
remotes/origin/master

ブランチ作成

$ git branch develop
$ git branch
* master
develop

ブランチのマージ

ブランチをマスターにしてからdevelopブランチをマージ

$ git checkout master
$ git merge develop

ローカルブランチ削除

$ git branch -d develop

ローカルブランチ削除時にerror: The branch '〜' is not fully mergedのエラーが発生した場合

マージされてないものを含んでいるブランチを消そうとしたときに発生する

消しても問題なければ以下で消せる

$ git branch -D develop

ブランチをpush

$ git branch develop
$ git push origin develop

リモートブランチをローカルに

$ git branch develop origin/develop

注意)pullするのは危険(現在自分がみているブランチにマージされる恐れがある

タグ作成

git tag -a v1.0

タグリスト

$ git tag
v1.0

タグ削除

git tag -d v1.0

タグ削除(リモート)

git push origin :v1.0

タグcheckout

git checkout v1.0

作成したタグpush

git push origin v1.0

エクスポート

svn exportと同じ(ファイルだけ出力したいとき

$ git archive [branchname] | tar -x -C [filename]
$ git archive master | tar -x -C /var/www/project1

コミット日付をタイムスタンプに復元

for FILE in `git ls-files`; do
  TIME=`git log --pretty=format:%ci -n1 $FILE`
  echo $TIME'\t'$FILE
  STAMP=`date -d "$TIME" +"%y%m%d%H%M.%S"`
  touch -t $STAMP $FILE
done

参考:http://d.hatena.ne.jp/iww/20121011/pretty

コミット日付をタイムスタンプに復元(例:テンプレのみ

for FILE in `git ls-files`; do
  if [[ "$FILE" =~ ^public|fuel/app/views|fuel/app/themes ]]; then
    TIME=`git log --pretty=format:%ci -n1 $FILE`
    echo $TIME'\t'$FILE
    STAMP=`date -d "$TIME" +"%y%m%d%H%M.%S"`
    touch -t $STAMP $FILE
  fi
done

git pull時のエラー

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in

以下コマンドで対応

$ git config branch.master.remote origin

gitデフォユーザ設定

$ git config --global user.name="sampleuser"
$ git config --global user.email="sampleuser@example.com"

gitコンフィグ確認

$ git config --list

git履歴一覧

$ git log
$ git log --stat # ファイル名一覧付き
$ git log --name-status # ファイル名一覧付き M A D付き
$ git log --since=2013-07-10 --until=2013-07-16 # 期間指定
$ git log --name-status --since="2013-07-10 10:10:10" | grep '^M' | grep -v '^Merge' | cut -f 2
$ git log --name-status --since="2013-07-10 10:10:10" | grep '^A' | grep -v '^Author' | cut -f 2

git差分確認

$ git show [リビジョンid]
$ git show [リビジョンid] test.php #1ファイルのコード差分
$ git show [リビジョンid] --name-only #ファイルだけ

gitで管理しないdir指定方法

.gitignoreをトップdirにおき無視ファイルを記載

$ vi .gitignore
*~
*.bak
Thumbs.db
desktop.ini
.DS_Store
.buildpath
.project
.settings
*.tmproj
fuel/app/logs/*/*/*
fuel/app/cache/*/*
build
nbproject/
.idea
logs/*
# .svnディレクトリ無視
.svn
*.swp

.gitignoreに追加したと同時に無視設定が反映される

空のdirを管理する

空dir内に.gitkeepファイルを作成

$ touch .gitkeep

(no branch)にコミットしたログをマージ

$ git branch # とすると以下のように表示される場合
* (no branch)
  master
$ git checkout master # masterブランチに戻る
> 2516532 readme記述 # などとコミットログが出力される
$ git merge 2516532 #マージする

Previous HEAD position was 923c794... result文言修正

gitログ削除

直近ログ削除なら問題ないが、昔のログ削除は競合しまくって難しいかも。

$ git rebase -i 103b8e948f1fee1e5b024cd444e46dee0d6f0057 # 最もさかのぼりたい過去のコミットを記述
pick 6896fde gitignore修正
pick 630644c version置換対応
pick e12c899 dbダンプ最新
# ↑削除したいものだけddで削除する
git rebase --continue
git status
# 競合を直す
git add -u

git_cloneが重くなった場合

ダンプなどの重いdataをcommitした場合は重くなるので履歴から削除

git filter-branch --tree-filter 'rm -fr db/hoge_dump.tar.gz';

コミット処理を戻す

git revert [リビジョンid]

実行すると戻し修正されて、commitされるので注意。 (競合するとcommitはされない)

mergeコミット処理を戻す

git revert -m 1 [リビジョンid]
-m 1 はマージされた側のオプション(基本はこちらだと思う)
-m 2 はマージした側のオプション

ちなみにmerge部分を"-m"オプションを使わずに利用しようとするとエラーとなる

git revert  [リビジョンid]
error: Commit  [リビジョンid] is a merge but no -m option was given.

branchを指定してcloneする

git clone -b develop ssh://user1@localhost/var/git/project1.git project1

ロールバック(ファイルも戻す)

git reset --hard [リビジョンid]

指定したリビジョンidが最後にコミットがされた状態まで全体ソースが戻る(ログも全て戻る)

(注)ロールバック前にpushしてしまっていると、ロールバック後にpushができなくなる(別ブランチに変えればpush出来る)

ロールバック(ファイルは維持)

git reset --soft [リビジョンid]

指定したリビジョンIDが最後にコミットがされた状態までログが戻る(ソースは維持)

別ブランチのリビジョンを追加コミットする方法

git cherry-pick [リビジョンid]

過去dateでコミットが追加される

参考 https://teratail.com/questions/58184

コンフリクト解消ツール

git mergetool

真ん中がオリジナルファイルなのでそこを修正する

1つ前のコミットコメント修正

git commit --amend

エディタが開くのでそこで修正

gitログをツリーで表示

git log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'

gitログ検索

git log --stat -S hogehoge