参考书籍:
《Pro Git》中文版.pdf
git init // 建立一个git仓库, 本地目录为工作目录, .git目录是中央数据目录
git init --bare // 建立一个git裸库,本地目录为中央数据目录
git clone /home/git/test.git // 同一机器,直接目录clone, 可指定clone后名称
git config --global user.email xiaotaohuoxiao@163.com // 设置用户email,强制性的
git config --global user.name cxt // 设置用户名称
git config --list // 查看已有配置信息
git status // 查看git文件状态,未保存本地数据目录
git add file // 保存file文件至本地数据目录 .git 暂存区
git add . // 保存所有文件(修改,新增,删除等) 到 .git 暂存区
git add -u // 只保存修改modify文件到 .git 暂存区
git rm --cache file // 删除保存到 本地.git暂存区 的文件
git commit // 项目提交到 .git, 进入交互界面提交编辑log
git commit -m string // 项目提交到 .git,提交log为 string,提交后出现字符串为SHA-1校验和(20Bytes)
git commit --amend // 撤销commit,前提是撤销之前未做任何改动
git log // 查看提交历史
git log -p // 展开显示每次提交的内容差异
git log -2 // 显示最近的两次更新
git log --stat // 显示行数变化统计,查看做了哪些改动
git log --pretty=xxx // 显示风格,=oneline,放在一行显示
git push origin master // 推送,将本地 .git信息推送至 远程主机 .git中央数据目录
git pull origin master // 取回,将远程 .git信息取回至本地主机 .git,同时更改当前工作目录文件
=========================================================================================
vi .gitignore // 忽略某些文件,不要忽略 .gitignore,这样其他clone就能生效忽略
-----------------
*.[oa] // 忽略所有 .o , .a文件
*~ // 忽略所有存档文件
doc/ // 忽略doc目录下所有文件
git diff // 对比文件,对比还没有 git add缓存文件内容
git diff --cache // 对比这次修改与上一次commit快照内容
git remote // 查看当前远程仓库, 仓库信息位置在 .git/config
git remote -v // 显示对应克隆地址
git remote -r // 显示远程分支
git remote add cxt /home/work/test // 裸库可用来添加远程仓库目录(远程目录必须有 .git),非裸库也可以指定
// cxt是远程仓库的本地分支名字
git remote rename cxt sky // 将远程仓库本地分支名称改为 sky
git branch f_cxt // 创建f_cxt新分支,当前分支保存在 .git/HEAD
git checkout f_cxt // 切换到f_cxt分支
git checkout -b f_cxt // 创建f_cxt新分支, 并切换
git branch -d f_cxt // 删除f_cxt分支
合并:
====================================
git checkout master
git merge f_cxt // 将f_cxt更改合并到 master当前分支中,master未修改时,合并成功;master修改后,合并错误,需要解决冲突 conflicts
解决冲突:
====================================
$ git merge f_cxt
Auto-merging test.c
CONFLICT (add/add): Merge conflict in test.c
Automatic merge failed; fix conflicts and then commit the result. // 需要解决冲突
此时系统处于合并未解决状态:
git status // 查看冲突,列出所有未合并状态文件,并且文件内容有变化
$ cat test.c
------------------>
<<<<<<< HEAD
hahaha
======= // 文件隔开
111
>>>>>>> f_cxt
修改冲突:
vi test.c
------------------>
hahaha // 删除<<<< >>>> ===== 行,并且采取最终方案
git add test.c // 将test.c标记为 已解决
git commit // 提交merge更新
// 做法为删除原有两个test.c,新建修改后的test.c
============================================================
git branch -v // 查看各个分支最后一次commit信息
git fetch origin // 同步远程服务器尚未拥有的数据,更新origin/master指针
git push origin serverfix:aaa // 将本地仓库serverfix分支推送至远程仓库的远程分支aaa,若没有aaa,则创建
git checkout -b serverfix origin/aaa // 新建serverfix新分支,内容与远程origin/aaa一致,并且进行分支切换
git push origin :aaa // 删除远程aaa分支
===============================================================
git rebare aaa // 把aaa分支修改合并到当前分支,会将所有commit节点合并过来
出现冲突,解决冲突
git add . // 提交冲突
git rebare --continue // 完成rebare合并
git rebare --abort // 终止rebare合并,回到rebare前状态
git reset --hard 版本回退到最新
git reset a.c 是把git仓库的a.c同步到暂存区中
git checkout a.c是把暂存区的a.c同步到工作区
原文:
http://www.tech126.com/git-fetch-pull/
Git中从远程的分支获取最新的版本到本地有这样2个命令:
1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并
上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp
git diff tmp
git merge tmp
从远程获取最新的版本到本地的test分支上
之后再进行比较合并
2. git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
结束
==================================================================
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。
$ git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
$ git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。
$ git fetch origin
$ git merge origin/next
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
Git也允许手动建立追踪关系。
git branch --set-upstream master origin/next
上面命令指定master分支追踪origin/next分支。
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
$ git pull origin
上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。
如果当前分支只有一个追踪分支,连远程主机名都可以省略。
$ git pull
上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
如果合并需要采用rebase模式,可以使用–rebase选项。
$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
==============================================================
下面总结一下git reset的各个选项吧:
1 git reset –soft 只撤销commit,保留working tree和index file。
2 git reset –hard 撤销commit、index file和working tree,即撤销销毁最近一次的commit
3 git reset –mixed 撤销commit和index file,保留working tree
4 git reset和git reset –mixed完全一样
5 git reset –用于删除登记在index file里的某个文件。
git config配色方案
默认情况下,ubuntu下的终端中,git没有颜色,可以使用如下命令给git配色
git config --global color.status auto
git config --global color.diff auto
git config --global color.branch auto
git config --global color.interactive auto
对比不同分支的文件列表
git diff hash1 hash1 --stat
如果是branch的话
git diff branch1 branch2 --stat
加上 --stat 是显示文件列表, 否则是文件内容diff
Git常用操作命令收集:
1) 远程仓库相关命令
检出仓库:$ git clone git://github.com/jquery/jquery.git
查看远程仓库:$ git remote -v
添加远程仓库:$ git remote add [name] [url]
删除远程仓库:$ git remote rm [name]
修改远程仓库:$
git remote set-url --
push[name][newUrl]
拉取远程仓库:$ git pull [remoteName] [localBranchName]
推送远程仓库:$ git push [remoteName] [localBranchName]
2)分支(branch)操作相关命令
查看本地分支:$ git branch
查看远程分支:$ git branch -r
创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支
切换分支:$ git checkout [name]
创建新分支并立即切换到新分支:$ git checkout -b [name]
删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项
合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并
创建远程分支(本地分支push到远程):$ git push origin [name]
删除远程分支:$ git push origin :heads/[name]
我从master分支创建了一个issue5560分支,做了一些修改后,使用git push origin master提交,但是显示的结果却是'Everything up-to-date',发生问题的原因是git push origin master 在没有track远程分支的本地分支中默认提交的master分支,因为master分支默认指向了origin master 分支,这里要使用git push origin issue5560:master 就可以把issue5560推送到远程的master分支了。
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。
$
git push origin
test:master // 提交本地test分支作为远程的master分支
//好像只写这一句,远程的github就会自动创建一个test分支
$
git push origin
test:test //
提交本地test分支作为远程的test分支
如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
$
git push origin
:test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
3)版本(tag)操作相关命令
查看版本:$ git tag
创建版本:$ git tag
[name]
删除版本:$ git tag -d
[name]
查看远程版本:$ git tag -r
创建远程版本(本地版本push到远程):$ git push origin
[name]
删除远程版本:$ git push origin
:refs/tags/[name]
4) 子模块(submodule)相关操作命令
添加子模块:$ git submodule add [url]
[path]
如:$ git submodule add
git://github.com/soberh/ui-libs.git
src/main/webapp/ui-libs
初始化子模块:$ git submodule init
----只在首次检出仓库时运行一次就行
更新子模块:$ git submodule update
----每次更新或切换分支后都需要运行一下
删除子模块:(分4步走哦)
1)$ git rm --cached
[path]
2)
编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
3) 编辑“.git/config”文件,将子模块的相关配置节点删除掉
4) 手动删除子模块残留的目录
5)忽略一些文件、文件夹不提交
在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如
target
bin
*.db
git操作-删除文件
转自:http://www.cnblogs.com/springbarley/archive/2012/11/03/2752984.html
日期:2012-05-20 来源: bg090721 分享至:
git删除文件
rm add2.txt
git rm add2.txt
git commit -m "rm test"
git push web
-----------at server
cd /var/www/foo.git;sudo git update-server-info
------------检查删除效果
cd;rm foo3 -rf;git clone http://[某ip]/foo.git foo3
------------更新已经存在的local code
cd;cd foo2
git remote add web [某user]@[某ip]:/var/www/foo.git/
git pull web master
git diff aa package/prolin/libxui/src/Makefile
一次性清除本地与服务器不同的文件
git clean -d -fx
git clean -d -fx package/prolin/libxui/src/Makefile