git一些常用命令

推荐的工作流程是:
1. 基于公共分支创建一个私有分支。
2. 经常向这个私有分支commit代码。
3. 一旦你的代码完善了,就清理掉下私有分支的历史。
4. 将干净的私有分支merge到公共分支中。

/*************************************************************************************/
git init / git clone
.gitignore的语法
#为注释行,空行不匹配任何文件,这两个特征可以使.gitignore文件可读性强一些。
通过!取反。
斜杆/结尾的字符,被当做文件夹处理,文件夹下的所有文件将被忽略。
除去以上三种情况,其他时候使用标准的glob模式匹配。
glob语法:
* -> 匹配任意字符
[ab09] -> 匹配多种可能
? -> 匹配单个字符
[0-9a-zA-Z] -> 匹配一个范围
\ -> 转义字符
.gitignore文件实例:
# 此为注释– 将被Git 忽略
*.a # 忽略所有.a 结尾的文件
!lib.a # 但lib.a 除外
/TODO # 仅仅忽略项目根目录下的TODO 文件,也就是git家目录,不包括subdir/TODO,不太常用。
build/ # 忽略当前目录下build/目录下的所有文件,常用
doc/*.txt # 会忽略doc/notes.txt 但不包括doc/server/arch.txt
git add .
git commit
git diff:
workdir cache
git diff –cached:
cache repo
git rm –cached log/\*.log
delete but remain work dir files
git rm log/\*.log
recursive delete
git mv a.txt b.txt
rename the file

/*************************************************************************************/
git log -p -2
recent 2 commits, and the differences.
git log –pretty=format:”%h – %an, %ar : %s”
选项 说明
-p 按补丁格式显示每个更新之间的差异。
–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(后跟指定格式)。
-n 仅显示最近的n 条提交
–since, –after 仅显示指定时间之后的提交。
–until, –before 仅显示指定时间之前的提交。
–author 仅显示指定作者相关的提交。
–committer 仅显示指定提交者相关的提交。

/*************************************************************************************/
撤销操作:
1,修改最后一次提交
git commit –amend
2,取消已经暂存的文件
git reset HEAD new.txt
3,取消对文件的修改
git checkout — new.txt

/*************************************************************************************/
远程仓库:
查看 -
git remote -v
git remote show origin
添加 -
git remote add origin [email protected]:yidao620c/jaxbdemo.git
git remote show pb
抓取 – git fetch pb
fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,
只有当你确实准备好了,才能手工合并。
如果设置了某个分支用于跟踪某个远端仓库的分支(参见下节及第三章的内容),
可以使用git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。
推送 -
git push origin master
将本地分支master推送到远程仓库origin
只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。
重命名 -
git remote rename pb paul
删除 -
git remote rm paul

/*************************************************************************************/
标签:
显示 -
git tag
git tag -l ‘v1.4.2.*’
打annotated标签 -
git tag -a v1.4 -m ‘my version 1.4′
打lighted标签 -
git tag v1.4.1
推送标签 -
git push origin v1.4.1
git push origin –tags

/*************************************************************************************/
分支:
新建 -
git branch testing
切换分支 -
git checkout testing
新建并且切换到分支iss53 -
git checkout -b iss53
合并 -
先回到master分支:git checkout master
再合并分支hotfix:git merge hotfix
如果是直接上游的话,会出现Fast forward提示
合并之后赶紧删掉分支hotfix:git branch -d hotfix
三方合并 -
git checkout iss53, do some change
git checkout master
git merge iss53
Git会用两个分支的末端和它们的共同祖先进行一次简单的三方合并计算
合并完删除分支iss53:git branch -d iss53
冲突的合并 -
git status:查看标志位unmerged文件,然后亲自整合到一起
git add:标记为resolved
git commit:提交修改后的文件
分支管理 -
git branch -v
git branch –merged:查看已被并入当前分支的分支,可删除了
git branch –no-merged
git branch -D testing:强制删除
分支式工作流程 -
长期分支:master –> develop –topic直线分支
特性分支:mater –> iss01, mater –> iss02…
远程分支 – origin/master
远程分支(remote branch)是对远程仓库状态的索引
远程分支就像是书签,只有在进行Git的网络活动时才会更新
一次Git 克隆会建立你自己的本地分支master 和远程分支origin/master,
它们都指向origin/master 分支的最后一次提交
只要你不和服务器通讯,你的origin/master指针不会移动
将远程分支合并到当前分支 -
git merge origin/serverfix
在远程分支的基础上分化出一个新的分支来 -
git checkout -b serverfix origin/serverfix
跟踪分支 -
默认clone时候,master -> origin/master
git checkout –track origin/serverfix,默认创建本地serverfix分支跟踪
git checkout -b sf origin/serverfix,创建本地sf分支跟踪
删除远程分支 -
git push origin :serverfix
git push [远程名] [本地分支]:[远程分支],你懂的
衍合 rebase:
git checkout experiment
git rebase master
它的原理是回到两个分支(你所在的分支和你想要衍合进去的分支)的共同祖先,
提取你所在分支每次提交时产生的差异(diff),把这些差异分别保存到临时文件里,
然后从当前分支转换到你需要衍合入的分支,依序施用每一个差异补丁文件。
现在,你可以回到master 分支然后进行一次快进合并,
因为现在的分支指针变成了…master…experiment…
git rebase –onto master server client
注:永远不要衍合那些已经推送到公共仓库的更新
如果把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些永远不会公开的commit,
那就不会有任何问题,记住在分享之前进行衍合,分享后就再也不要衍合了。

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

猜你喜欢

转载自yidao620c.iteye.com/blog/1836959