• 笔记二、本地git命令


    参考书籍:
        《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 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

    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 

  • 相关阅读:
    423. Reconstruct Original Digits from English
    400. Nth Digit
    397. Integer Replacement
    396. Rotate Function
    365. Water and Jug Problem
    335. Self Crossing
    319. Bulb Switcher
    线段树-hdu2795 Billboard(贴海报)
    线段树---求逆序数
    线段树——单点替换区间最值
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/5180600.html
Copyright © 2020-2023  润新知