facebook twitter hatena line email

Git/コマンド

提供: 初心者エンジニアの簡易メモ
2016年2月17日 (水) 20:37時点におけるAdmin (トーク | 投稿記録)による版 (タグ削除)

移動: 案内検索

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 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

ブランチをpush

$ git branch develop
$ git push origin develop

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

$ git branch develop origin/develop

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

ローカルブランチの削除

git branch -D hoge

タグ作成

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 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

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されるので注意。