zoukankan      html  css  js  c++  java
  • git归纳总结

    1,git 是分布式版本控制:单个电脑就是一个完整的版本库,只需向中央服务器(远程服务器)提交修改的部分。在没有网络情况下也能正常想本机服务器提交代码管理版本,有网时再推送到远程服务器。

       svn是集中式版本控制:从中央服务器获取版本,提交版本。所有记录都存在远程服务器,无网无法提交,合并等操作

    2,设置提交时的用户,--global表示本机上所有仓库使用的用户

    git config --global user.name "Your Name"
    
    git config --global user.email "email@example.com"
    检查已有的配置信息,可以使用 git config --list 命令:
    git config --list

    3,创建版本库(仓库repository),即仓库中的所有目录git都会跟踪管理(修改,删除,还原,记录)。目录尽量不用中文名

    mkdir App
    cd App
    git init   //把这个文件夹变成Git可管理的仓库
    git status //查看当前目录状态
    git add .  //所有变更文件 (git add README.md指定文件)将文件添加暂存区
    git commit -m ‘解释'
    // 创建SSH KEY。先看一下你C盘用户目录下有没有.ssh目录,有的话看下里面有没有id_rsa和id_rsa.pub这两个文件,有就跳到下一步,没有就通过下面命令创建
    $ git remote add origin 远程仓库地址 //关联origin远程库名
    git push -u origin master //把本地当前分支推送到远程origin库下的master分支上,除首次,其余可不加 -u

    4,回退版本,git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针

    git log 查看提交历史,以便确定要回退到哪个版本。git reflog 查看命令历史,以便确定要回到未来的哪个版本。)

    git log //获取提交id
    git reset --hard commit_id //根据commit_id回退到指定版本
    //git reset --hard HEAD //回退到最近的一个版本

    5,工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD(git add将工作区代码添加到stage。git commit将暂存区代码提交到分支)

    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

    6,创建分支

    $ git branch featrue      //创建分支
    $ git checkout featrue    //切换分支
    // 创建+切换分支一步到位git checkout -b featrue(-b表示branch)
    git branch 查看分支
    git merge featrue   合并featrue分支到当前master分支

    git branch -d featrue 合并后可以删除featrue分支

    git log --graph命令可以看到分支合并图

    7,合并分支时,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息,如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit

    git merge --no-ff -m "merge with no-ff" featrue

    因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去

    7,当手头工作没有完成时,先把工作区git stash一下,然后去修复bug,修复后,

    git stash pop,回到工作现场并删除stash内容,或者用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除,

    git stash list 查看stash工作现场

    git branch -D <name>   //未合并前,强制删除该分支

    8,查看远程库的信息,下面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

    $ git remote -v
    origin  git@github.com:michaelliao/learngit.git (fetch)
    origin  git@github.com:michaelliao/learngit.git (push)

    9,你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送。这是我们需要先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送。

    多人合作流程如下

    1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

    3. 如果合并有冲突,则解决冲突,并在本地提交;

    4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

    如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

    10,发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照

    git branch master    //先切换到打标签的分支
    git tag v1.0            //    打标签
    //如果是想打上周的commit标签,可以先获取提交id,打指定标签
    git log        //获取commitID
    git tag v0.9 f52c633
    
    git tag    //查看所有标签

    命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

    git tag -d v0.1  因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除

    命令git push origin <tagname>可以推送一个本地标签;

    命令git push origin --tags可以推送全部未推送过的本地标签;

    命令git tag -d <tagname>可以删除一个本地标签;

    命令git push origin :refs/tags/<tagname>可以删除一个远程标签(之前要先删除本地的标签)。

    11,

    git clone https://github.com/WuXiaolong/WeWin.git <拷过来自己重命的名子>
    get fetch //原作者修改了,这边直接获取更新
    git merge orgin/master //把原作者更改的合并到自己本地

    git log --decorate --all --pretty=oneline只显示commit的ID与描述 --oneline一行去显示,--before="2014-10-10"前的提交 , -10条, -graph 图形界面

    12,对于git已经跟踪的文件,进行重命名,改完名字后,先git rm a.js(移除a.js)然后添加b.js git add b.js

    git diff index.html //查看index.html文件的修改对比,那本地的和暂存区比较(git diff --staged查看远程和暂存区区别)
    git mv style.css css/ 将style.css移动到css目录下
    git mv  a.js  b.js  将a.js改名为b.js

     13,忽略 .gitignore_global 下的文件,然后打开这个文件,在里面编辑要忽略的目录,比如日志文件vim gitignore 然后*.log忽略所有日志文件

    参考: https://www.liaoxuefeng.com/wiki/896043488029600

    本想把日子过成诗,时而简单,时而精致,不料日子却过成了一首歌,时而不靠谱,时而不着调
  • 相关阅读:
    安装vmware tools 使用hgfs共享文件一波三折
    RedHat停止sendmail加快启动
    [宏]_IO, _IOR, _IOW, _IOWR 宏的用法与解析
    __VA_ARGS__
    超级终端串口发送命令,uboot接收不到
    statfs函数获取大容量磁盘信息速度慢的解决过程
    ctags使用简介
    做技术多久才能入门
    linux目录和文件介绍
    OpenScalesLayer
  • 原文地址:https://www.cnblogs.com/chuanq/p/11078258.html
Copyright © 2011-2022 走看看