且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

笔记二、本地git命令

更新时间:2022-09-15 18:06:50

参考书籍:
    《Pro Git》中文版.pdf
 
git init           // 建立一个git仓库, 本地目录为工作目录, .git目录是中间数据目录
git init --bare    // 建立一个git裸库,本地目录为中间数据目录
 
git clone /home/git/test.git    // 同一机器,直接目录clone, 可指定clone后名称
git clone ssh://cxt@192.168.3.254/home/git/test.git  // 远程git目录clone,使用ssh协议,也可以使用http协议,git://协议
 
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命令
 
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命令
 
 
============================================================
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命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

1
$ git pull <远程主机名> <远程分支名>:<本地分支名>

比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

1
$ git pull origin next:master

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

1
$ git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。

1
2
$ git fetch origin
$ git merge origin/next

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。

Git也允许手动建立追踪关系。

1
git branch --set-upstream master origin/next

上面命令指定master分支追踪origin/next分支。

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

1
$ git pull origin

上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。

如果当前分支只有一个追踪分支,连远程主机名都可以省略。

1
$ git pull

上面命令表示,当前分支自动与唯一一个追踪分支进行合并。

如果合并需要采用rebase模式,可以使用–rebase选项。

1
$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名><br data-filtered="filtered"><br data-filtered="filtered">
==============================================================
 
 

下面总结一下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 pushorigin 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

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 












本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/5180600.html,如需转载请自行联系原作者