我认为每一个学过Git的人都应该作过相似这种笔记,由于Git命令太多看着看着就把前边看过的忘了,以前我也看过Git,可是一直没用,如今一看几乎没有印象了,因此此次我要把我看到的命令记下来给我本身备忘。 html
Git已是最流行的版本控制系统了,网上相关的免费学习资源不少,我见过的中文书籍就有: git
但我是买的一本纸质书叫作《版本控制之道—使用Git》,下边是我记录的几乎是整本书讲过的全部命令: github
git config —global user.name “Nshen” //必须
git config —global user.email “nshen121@gmail.com” //必须
git config —global color.ui “always” //或者"auto", always不只Base环境是彩色,Dos里也是彩色的。
git config —global core.editor notepad.exe //设为windows记事本
git config —global alias.ci “commit” //别名缩写
git config —global merge.tool //能够设置合并工具
git config —global —list //查看设置 windows
其实最后这些设置都保存在C:\Documents and Settings\用户名\.gitconfig 文件下(windows) 缓存
查看帮助: git help command 编辑器
git init 工具
git add *.txt //添加全部txt文件
git add README //添加单个文件
git add . //添加全部文件包括子目录,但不包括空目录 学习
add命令是个多功能命令,根据目标文件的状态不一样,此命令的效果也不一样:能够用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)注意每次修改后都要从新add,否则就会提交以前add时的版本。 fetch
git add -i //进入交互式add
git add -p //直接进入补丁模式,能够暂存修改的一部分。 ui
git commit -m “initial project version”
git commit -m “something” someFile //提交指定文件
git commit -C HEAD -a —amend //复用HEAD留言,增补提交(修改小错误,而不增长提交记录,掩盖本身的小马虎)
-m “提交的说明”
-a 动把全部已经跟踪过的文件暂存,并提交.(工做目录中修改过的文件都提交到版本库,不需一个一个手动add了)
—amend 增补提交
-C 复用指定提交的提交留言
-c 打开编辑器在已有的提交基础上编辑修改
e.g 修改最后一次提交:
git commit -m 'initial commit' git add forgotten_file git commit --amend
若是没有修改就至关于更改提交说明,上边3个命令获得一个提交.
全部人都须要忽略的文件要写在.gitignore文件里,而只有本身的我的偏好须要忽略的文件要写在.git/info/exclude文件中
语法:
# 此为注释 – 将被 Git 忽略 *.a # 忽略全部 .a 结尾的文件 !lib.a # 但 lib.a 除外 *.[oa] #忽略以.o或.a结尾的文件 *~ #忽略以~结尾的文件 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目录下的全部文件 doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
git diff // 比较工做目录与缓存区的区别
git diff —cached 或者 git diff —staged //缓存区与版本库里的区别
git diff HEAD //三者的区别
请注意,单单 git diff 不过是显示尚未暂存起来的改动,而不是此次工做和上次提交之间的差别。因此有时候你一会儿暂存了全部更新过的文件后,运行 git diff 后却什么也没有,就是这个缘由。
git diff 18f822e //18f822e这个版本与当前目录的区别
git diff aaaaa..bbbbb //比较aaaaa与bbbbb之间差异
git diff —stat能够统计数据,比较特别的命令
git mv file_from file_to //更名或移动
$ git mv README.txt README $ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # renamed: README.txt -> README
其实,运行 git mv 就至关于运行了下面三条命令:
$ mv README.txt README
$ git rm README.txt
$ git add README
必须调用 git rm 文件名 //从暂存区移除,而且文件也被删除
若是只是手工删除了文件,运行git status时会出现
# Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # # deleted: grit.gemspec
此时必须再运行 git rm 文件名,才会在提交时候再也不归入版本管理.
若是删除以前修改过而且已经add到缓存区了的话,则必须强制删除 -f
另一种状况是,咱们想把文件从Git仓库中删除(亦即从暂存区域移除),但仍然但愿保留在当前工做目录中。换句话说,仅是从跟踪清单中删除。好比一些大型日志文件或者一堆.a编译文件,不当心归入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 —cached 选项便可:
git status
$ git status # On branch master # Changes to be committed: //只要在这行后边的,说明放入暂存区了 # (use "git reset HEAD <file>..." to unstage) //想取消放入缓存 git reset HEAD README # # new file: README # Changed but not updated: //跟踪文件内容改变,但尚未放到暂存区,须要git add 命令才会放到暂存区 # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) //删除修改,恢复到以前版本,有危险 (若是想保留而且回退版本用stashing 和分支来处理) # modified: benchmarks.rb
git log
这时“j”向下浏览,“k”向上浏览,“q”退出
git log —pretty=oneline //一行显示
—pretty=“%h %s” //以各类格式输出
git log –p -2 //-p显示每次提交的内容差别 -2表示最近2次更改
git log —since “5 hours”
—since “3 hours”
—since “1 minute”
—before =“2008-10.01”
git log 27j34j3j..03u43u23 //最老版本..最新版本(不包括起点只包括终点)
git log 34j4j4..HEAD
git log fhfs8fh.. //省略HEAD
git log “HEAD^^”..“HEAD^” //windows必须加引号表示回溯上一个提交
git log -1 HEAD~1 //至关于git log -1 HEAD^
git log —graph //图形化显示分支
git log —graph —pretty=oneline //一行图形化显示分支
git blame hello.html //你也能够用"-L"参数在命令(blame)中指定开始和结束行:
git blame -L 12,+10 hello.html //12到22行
blame还能够跟踪内容复制,文件复制,略,见版本控制之道 79页
git checkout head 文件名 //撤销暂存区的修改
git checkout head readme.txt todo.txt
git checkout head *.txt
git checkout head . //撤销全部
git revert HEAD //建立一个反向的新提交抵消原来的提交改动
若是须要反转多个,必须从最后的开始反转, 加 -n能够不立刻提交,以后一块儿提交。
git revert -n HEAD
git revert -n 54efhds
git commit -m “revert head and 54efhds”
git reset —hard HEAD //全部未提交的内容清空,这会让"git diff" 和"git diff —cached"命令的显示法都变为空
git reset —soft HEAD //复位版本库,暂存差别,便于提交中发现错误须要更改时有用(例如私人密码放到里边了)
git branch RB_1.0(创建分支不会自动切换过去)
git checkout RB_1.0(切换到RB_1.0分支)
git checkout -b RB_1.0(简化上边2步操做)
git branch -d RB_1.0
git branch RB_1.0 master
git branch RB_1.0 6fe57de0
git branch Rb_1.01 1.0
git branch //列出本地分支 iss53 * master //*号表示当前所在分支 testing
git branch -r //显示远程分支
git branch -a //列出全部分支
git branch -m master mymaster
-M 大写M会覆盖同名的分支
直接合并:
git merge 想合并到当前分支的源分支名
git merge —no-commit 分支 //合并但不提交
压合合并:将分支压合成一条commit记录,并合并过来
git merge —squash 某bug分支
git commit -m “修复某bug”
拣选合并:只合并一个提交
git cherry-pick 321d76f
若是须要连续拣选,就须要加 -n参数
而后再git commit ,但不要加-m参数,编辑器就会使用刚拣选的提交留言做为如今的留言。
git tag
git tag 1.0 //在当前分支最后一次提交建立标签
git tag 1.0 RB_1.0 //基于RB_1.0分支的最新踢脚建立标签
git tag 1.0 ae468d8kt //为某次提交建立标签
git checkout 1.0 //检出标签与检出分支同样操做,但检出标签后用git branch查看本地分支会发现你如今再也不任何分支上
这时你不该该修改,而应该当即基于此标签建立一个分支
git checkout -b from-1.0
1)git rebase RB_1.01 //也许修改过一个bug,但愿新版本变基到RB_1.01分支上
2)手动解决冲突 //若是解决不了直接git rebase -skip或-abort来跳过特定提交或彻底放弃变基
3)git add xxx.html //冲突解决
4)git rebase —continue
git rebase --onto HEAD^^ HEAD^ HEAD
//—onto参数能够改写历史抹掉中间的参数,将倒数第一个参数变基到倒数第3个参数,为防止出错建议在试验性分支上先试验。
rebase -i 能够排序历史记录,多个提交合并为1个,一个提交分解成多个提交 ,
详见版本控制之道p86 ,须要编辑器支持,windows记事本不行
git clone git://github.com/schacon/grit.git //从现有仓库克隆
git clone git://github.com/schacon/grit.git mygrit //换名,惟一区别就是新建的目录成了mygrit,其余都同样
git remote add pb git://github.com/paulboone/ticgit.git
clone会默认添加origin仓库,若是本来用git init建立的版本库,后来又想提交到远程版本库,就能够用下边的办法
git remote add origin git@example.com:/xxxxxx
git remote -v //查看远程仓库,默认clone后,应该有一个origin仓库,-v显示对应的clone地址
git remote show origin //查看远程仓库信息
git remote rename pb paul
git remote rm paul
git fetch [remote-name] 拉取远程仓库到本地远程仓库,不自动合并 //$ git fetch origin $ git fetch pb remote: Counting objects: 58, done. remote: Compressing objects: 100% (41/41), done. remote: Total 44 (delta 24), reused 1 (delta 0) Unpacking objects: 100% (44/44), done. From git://github.com/paulboone/ticgit * [new branch] master -> pb/master * [new branch] ticgit -> pb/ticgit
如今pb/master能够在本地访问了,你能够合并到本身的某个分支,或者切换到这个分支看看有什么有趣的更新
git pull 抓取数据合并到工做目录中当前分支
git push [remote-name] [branch-name] //默认为 git push origin master
git push origin serverfix //推送分支,实际上是下边一句的简化,提取个人 serverfix 并更新到远程仓库的 serverfix
git push origin serverfix:serferfix
git push origin :serverfix //这个语法用于删除,只要把分号前留空
git gc //垃圾回收,每隔一段时间例如一个月运行一次能够减小磁盘占用空间。
git reflog //最后的保障,列出误删的东东
git bisect //二分查找,版本控制之道p124页,略
git archive —format=格式 —prefix=目录/ 版本>压缩包.zip
git archive —format=zip head>test.zip
git archive —format=tar —prefix=mysite-1.0/ 1.0 | gzip>mysite-1.0.tar.gz
git archive —format=zip —prefix=mysite-1.0/ 1.0 >mysie-1.0.zip
本站文章均为原创,转载请保留连接,谢谢。