Git 常用命令

来源:互联网 发布:mac safari下载速度慢 编辑:程序博客网 时间:2024/06/10 21:57

详细 git 教程 : progit

Git Community Book


初始化一个新的仓库

$ git init Initialized empty Git repository in .git/


$ git add file1 file2 file3


获得当前项目的一个状况
$ git status


提交
$ git commit -m "first commit"


创建一个新的叫”experimental”的分支:
$ git branch experimental


创建一个新的叫”experimental”的分支,并切换到experimental分支下:
$ git checkout -b 'experimental'


当前仓库中存在的所有分支列表:星号(“*”)标识了你当工作在哪个分支下
$ git branch  experimental
* master


切换到”experimental”分支
$ git checkout experimental


合并“experimental”和“master”两个分支:
$ git merge experimental


显示还没有暂存起来的改动:
$ git diff


已经暂存起来的文件和上次提交时的快照之间的差异
$ git diff --cached


提交(commit)了合并的内容后就可查看一下:
$ gitk


删除掉 “experimental” 分支 (git branch -d只能删除那些已经被当前分支的合并的分支.)
$ git branch -d experimental


如果你要强制删除某个分支的话就用git branch –D;
下面假设你要强制删除一个叫”crazy-idea”的分支:
$ git branch -D crazy-idea


撒销一个合并
$ git reset --hard HEAD


你已经把合并后的代码提交,但还是想把它们撒销:
$ git reset --hard ORIG_HEAD


显示所有的提交(commit)
$ git log


-p 按补丁格式显示每个更新之间的差异。
--word-diff 按 word diff 格式显示差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
--oneline --pretty=oneline --abbrev-commit 的简化用法。


撤消刚才的提交操作,可以使用 --amend 选项重新提交:
$ git commit --amend


显示两个分支间的差异
git diff master..experimental


想找出‘master’,‘test’的共有 父分支和'test'分支之间的差异,你用3个‘.'来取代前面的两个'.' 
git diff master...experimental


显示你工作目录与上次提交时之间的所有差别
$ git diff HEAD


这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 到最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。
$ git rebase origin


取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍
$ git rebase --onto master server client


 — git rebase [主分支] [特性分支] 命令会先取出特性分支 server,然后在主分支 master 上重演:
$ git rebase master server


在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
$ git rebase --continue


在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。
$ git rebase --abort


列出所有修改过的文件及它们的状态
$>git add -i


取消文件的暂存
$ git reset HEAD file1.txt


移除跟踪但不删除文件
$ git rm --cached readme.txt


保存你的本地修改到储藏(stash)中, 然后将你的工作目录和索引里的内容全部重置, 回到你当前所在分支的上次提交时的状态
$ git stash save "stash test"


查看你保存的'储藏'(stashes):
$ git stash list


回复到以前的工作状态.
$ git stash pop stash@{0}


你可以在使用'git branch'命令时加上'--track'参数, 来手动创建一个'追踪分支'.
$ git branch --track experimental origin/experimental


它会自动从‘origin'抓取(fetch)内容,再把远程的'origin/experimental'分支合并进(merge)本地的'experimental'分支.
$ git pull experimental


$ git grep xmmap 仓库里每个使用'xmmap'函数的地方
$ git grep -n xmmap 显示行号
$ git grep --name-only xmmap 只显示文件名
$ git grep -c xmmap 查看每个文件里有多少行匹配内容(line matches):
$ git grep xmmap v1.5.0


这条命令会把你工作目录中所有未提交的内容清空(当然这不包括未置于版控制下的文件 untracked files). 从另一种角度来说, 这会让"git diff" 和"git diff --cached"命令的显示法都变为空.
$ git reset --hard HEAD


这条命令把hello.rb从HEAD中签出并且把它恢复成未修改时的样子.
$ git checkout -- hello.rb


撤消最近的一个提交:git revert 其实不会直接创建一个提交(commit), 把撤消后的文件内容放到索引(index)里,你需要再执行git commit命令,它们才会成为真正的提交(commit).
$ git revert HEAD


压缩操作比较耗时, 你运行git gc命令最好是在你没有其它工作的时候.
$ git gc


运行一些仓库的一致性检查
$ git fsck


查找问题的利器
$ git bisect start
$ git bisect good v2.6.18
$ git bisect bad master


回到之前(执行git bisect start之前)的状态.
$ git bisect reset


整个文件的每一行的详细修改信息:包括SHA串,日期和作者:
$ git blame file1.txt


git中把commit删了后,并不是真正的删除,而是变成了悬空对象(dangling commit)
$git fsck --lost-found


创建一个含附注类型的标签
$ git tag -a v1.0 -m '测试tag'


查看引用日志(引用日志信息只存在于本地——这是一个记录你在你自己的仓库里做过什么的日志。)
$ git reflog


所有可从experiment分支中获得而不能从master分支中获得的提交
$ git log master..experiment


显示任何在你当前分支上而不在远程origin 上的提交。如果你运行 git push 并且的你的当前分支正在跟踪 origin/master,被git log origin/master..HEAD 列出的提交就是将被传输到服务器上的提交。
$ git log origin/master..HEAD


指定被两个引用中的一个包含但又不被两者同时包含的分支。
$ git log master...experiment



Git 命令别名
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.last 'log -1 HEAD' //最后一次的提交信息
$ git config --global alias.lo 'log --oneline'
$ git config --global alias.lg 'log --oneline --graph'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
0 0
原创粉丝点击