Android関係ないけど覚え書きとして。
git branch -a git checkout -b develop remotes/origin/develop
作業ツリーを完全に元に戻す(svn revert)
git checkout <blanch> -f[edit]
git reset --hard ORIG_HEAD[edit]
git reset --soft HEAD^
git reset --hard HEAD^
(git add) git commit --amend
git branch -a[edit]
git branch -d hoge[edit]
git push origin :hoge[edit]
error: dst refspec xxxxxx matches more than one. error: failed to push some refs to xxxxxx
タグとブランチの名前が同じだったときにおきる。
# タグ削除 git push origin :refs/tags/<tag_name> # ブランチ削除 git push origin :refs/heads/<branch_name>[edit]
git fetch --prune[edit]
git branch -m new-name[edit]
現在のブランチのワークツリーを一時してに保存する
git stash
git stash list git stash pop git stash pop stash@{1}
popの代わりに apply を使うと適用された変更は stash から削除されずに残る。
git stash apply git stash apply stash@{1}
stash に保存されている状態を削除する
git stash drop git stash drop stash@{1}
stash の状態とその親コミットとの差を表示する
git stash show git stash show stash@{1}
また、差分を表示したければ git stash show -p
stash からブランチを作る
git stash branch new-branch git stash branch new-branch stash@{1}
インデックスに保存されている変更を除いて stash に保存する
「-k」か「–keep-index」オプションをつけると、 インデックスに保存されてる変更を除いて stash に保存され、 インデックスはワークツリーにそのまま残る。 git stash -k[edit]
git remote set-url origin <新しいリポジトリURL>
# ssh://project-master/eoblog-sitemonitor
git remote add origin <新しいリポジトリURL>
#git push origin master:master
git push -u origin master
file modeの確認
git ls-tree HEAD ファイル名
file modeの変更
git update-index --chmod=+x ファイル名[edit]
git svn clone <repo> <dir>
ブランチなども移行
git svn clone -T trunk -b branches -t tags <subversion リポジトリ> </subversion>
gitリポジトリをSvbversionリポジトリの最新の状態と同期させる
git svn rebase
origin追加
git remote add origin ssh://project-master/jukuzukan.git git push origin master:master
git-svnでcloneした既存のWorking copyが手元にあって、そこに別なbranchやtrunkを追加したい場合は、以下のように.git/config ファイルに項目を加えます。
1 [svn-remote "svn"] 2 url = http://svn.repos.com/foo/branches/bar 3 fetch = :refs/remotes/git-svn 4 [svn-remote "trunk"] 5 url = http://svn.repos.com/foo/trunk 6 fetch = :refs/remotes/git-svn-trunk
下の方が今回追加したものです。 あとは、以下のコマンドを実行してSVNからfetchしてきます。
1 % git svn fetch trunk
そうすると、以下のようなブランチが作成されます。
1 % git branch -r 2 git-svn 3 git-svn-trunk
ここから先は、普通にGitのbranchとしてmergeすればOKです。
git remote add myrepo homepage@192.168.xx.xx:/var/www/gitrepo/xxx.git git remote -v git fetch myrepo git push myrepo develop git checkout -b localb repo/remoteb[edit]
git rebase -i HEAD~4
# fixup は「このコミットでの変更内容を直前のコミットに合成する」
# squash の場合はコミットログを編集できる
rebaseしているとauthor_dateは昔のままでcommiter_dateだけ現在時刻になる。
直前のcommitのタイムスタンプ(Committer date,author date)を現時点に修正
git rebase HEAD~1 --ignore-date
committer date を author date と同じ値にする
git rebase HEAD~1 --committer-date-is-author-date[edit]
git log --oneline git diff --no-prefix 67c4b35 87a45ba > diff.patch
git diff --no-prefix HEAD~ > diff.patch
パッチの作成
git-format-patch -r HEAD~ (パッチファイルが作成される)
format-patchで作られたパッチをあてる
git-am 0001-Changed-hoge.patch
diffで作られたパッチをあてる
git apply 001-Changed-hoge.patch
パッチをチェックする
git apply --check 001-Changed-hoge.patch[edit]
git archive --format=zip HEAD `git diff --diff-filter=d --name-only HEAD^ HEAD` -o archive.zip[edit]
checkout したときや reset --hard したときなど
git fsck --lost-found git show xxxxxxxxxxxxxxxxxxxxxxx > tmp.txt git apply tmp.txt[edit]
git rm --cached を使う。
$ git rm --cached hoge.txt # 上記のトラックされたファイルをインデックスから削除すれば(ワークツリーはそのまま) # もしhoge.txtをcommit済みの場合 $ git commit -m 'delete hoge.txt' # コミットしてリポジトリからも消す[edit]
.git/info/exclude に書く。
git fetch <repository> <refspec> <refspec> = <src>:<dst>
gitconfig内の記述
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
→ git fetch ってやったらデフォルトで
git fetch origin +refs/heads/*:refs/remotes/origin/*
が実行される
参考
git status --short --branch[edit]
git diff --name-status HEAD HEAD^[edit]
git diff[edit]
git diff --cached[edit]
git diff HEAD[edit]
git diff HEAD^ HEAD --stat[edit]
設定→SSH→Configure Git credential helper
!"C:/Program Files (x86)/GitExtensions/GitCredentialWinStore/git-credential-winstore.exe"[edit]
gitのプロセスがどっかで詰まってる。SSHアクセスしようとしてパスワードで詰んでる可能性。
git count-objects -v
git rerere
git config rerere.enabled true
または、.git ディレクトリ以下に rr-cache ディレクトリが存在していれば有効になります。
git reset HEAD~1
でcommit前の状態にもどしてから再add, commitする
初めのコミットは空コミットにしておくとよい
git commit --allow-empty -m "first commit"[edit]
git checkout FILE[edit]
git checkout HEAD FILE git checkout HEAD -- FILE[edit]
git checkout [commit] -- FILE (FILE は*を指定可)[edit]
git checkout HEAD -- git checkout -- *[edit]
git clean -n (見るだけ) git clean -f (消す)(戻せない!!!)[edit]
git checkout --ours <FILE>
git checkout --theirs <FILE>
git reset <FILE> git add <FILE>[edit]
git log --graph --oneline --decorate=full[edit]
git reflog git reset --hard HEAD@{1}