GIT

头像
alogy
    阅读 5 分钟
    1

    基本概念

    git: 工具,版本控制

    github:网站,社交平台,开源项目,远程仓库

    配置

    git config --list: 设置贡献者和查看所有配置项

    设置贡献者

    设置:name,email

    git config --global  user.name 
        // 例如:git config --global user.name "smiel"
    git config --global  user.email 
       // 例如:git config --global user.erail "1129507496@qq.com"
    查看配置项
    git config --list: 查看所有配置项  

    修改别名:

    执行: `git unstage`
    配置: `git config --global alias.unstage "reset HEAD"`

    GIT三个区

    • 工作区
    • 暂存区
    作用:
    作为过渡层
    避免误操作
    保护工作去和版本区
    分支处理
    • 版本区(库)

    clipboard.png

    GIT工具作用

    1. 从服务器上克隆完成的GIT仓库(包括代码和版本信息)到单机上。
    2. 在自己的机器上根据不同的开发目的,创建分支,修改代码。
    3. 在单机上自己创建的分支上提交代码。
    4. 在单机上合并分支。
    5. 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
    6. 生成补丁(patch),把补丁发送给主开发者。
    7. 一般开发者之间解决冲突的方法,开发者之间可以使用pull命令解决冲突,解决完冲突之后再向主开发者提交.
    GIT优点
    1. 适合分布式开发,强调个体。
    2. 公共服务器压力和数据量都不会太大。
    3. 速度快,灵活。
    4. 任意两个开发者之间可以很容易的解决冲突。
    5. 离线工作。
    GIT缺点
    1. 学习周期相对而言比较长
    2. 不符合常规思维
    3. 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息.

    获取和创建项目

    init

    git init:将一个目录初始化为 Git 仓库

    执行init命令之后,就有了一个GIT仓库的架子,可以开始项目开发,创建的新的GIT仓库里,任何时候,任何目录中任何操作,都是本地化。

    clone

    git clone url: 复制一个GIT仓库

    git cloen https://github.com/vuejs/vue.git

    复制该项目中的全部记录,本地拥有代码,并且该操作将拷贝该项目的主分支,能够查看代码,或编辑,修改。进入到该目录中,会看到.git子目录。所有的项目数据都存储该文件中.

    基本操作

    add

    git add: 文件添加到暂存区

    git add .
    git add [name]

    status

    git status -s: 查看在工作区和暂存区的状态

    diff

    git diff 工作区和暂存区的差异对比

    git diff --cached(--staged) 暂存区和版本库的差异对比
    git diff master(分支名字):  分支之间的差异对比
    

    commit

    git commit 添加到版本库

    git commit -m : 执行弹窗文本编辑,需要添加注释
    git commit -a : 自动将提交前已经记录的,修改的文件放入缓存区.

    git add 提交缓存的流程太过繁琐, 可以通过git commit -a 跳过git add .这一步。为任意已有记录的文件执行git add .

    reset

    git reset HEAD demo1.html 撤回提交到暂存区的文件

    git reset --hard commit_id 对版本还原
        HEAD^
        HEAD~<num>
        
    git checkout --hard a7
    git reset --hard HEAD^ 往回走一个版本
    git reset --hard HEAD~2 往回走两个版本

    clipboard.png

    clipboard.png

    撤销:

    git reset HEAD <file.name> 撤销到暂存区
        git reset HEAD drag.js
    git checkout -- <file.name> 把暂存区还原到工作区
        git checkout -- drag.js
    git commit --amend 撤销到暂存区
        git commit -m "change drag.js" --amend 
    

    恢复 :

    git checkout commit_id <file.name> 对文件的还原
    
    git checkout a7e8623 drag.js   

    rm

    git rm 删除

    git rm 会将文件从缓存区中移除。这与git reset HEAD 将文件从取消缓存是有区别的,“取消缓存”的意思是将缓存去恢复为做出修改之前的样子。 git rm 则将该文件测底从缓存去踢出,因此不会有log日志,删除了文件.

    执行git rm 来删除GIT追踪的文件。还会删除工作目录中的相应文件.

    git rm <file.name> 删除暂存区的文件[手动删除工作区的文件,才可以使用]
        git rm test.txt
    git rm -f <file.name>    直接删除暂存区的文件. 工作区的文件也删除
        git rm -f test.txt
    git rm 0f --cached <file.name> 只删除暂存区的文件,工作区的文件保留.
        git rm --cached test.txt

    分支与合并

    branch

    git branch 创建分支

    git branch <name> 创建分支
    git branch 查看分支

    git branch 查看分支
        -d
        --merged
        --no-merged
        
    git branch --merged  查看mster分支所合并的分支
    git branch --no-merged 查看没值合并的分支
    git branch -d new1 删除分支        

    checkout

    git checkout 切换分支

    git checkout 切换分支
        -b
        
    git checkout new1 
    git checkout -b new2  // 创建new2分支,直接把创建的当作主分支     

    merge

    git merge 合并分支

    修改分支冲突:一旦发生冲突,手动进行修改.

    clipboard.png

    git diff master origin/master 查看远端和工作区的区别
    git merge origin/master 合并代码,然后手动选择
    git pull 直接合并文件,少掉 diff和merge 的步骤 // 把远端的直接合并到master上.
    git fetch 一般情况下使用这个,可以查看出现问题的原因.

    tag

    git tag 给历史记录中某个重要的一点打上标签

    git tag -a v1.0

    git tag // 查看
    git tag v1.0 // 创建标签
    git push origin v1.0 // 同步到github

    查看标签在日志中的信息

    git log --oneline --decorate --graph 

    mv

    git mv 移动或重命名

    git mv file_old file_new
    mv file_old file_new

    info : 执行info指令,查询指令相关信息,会要求您输入欲查询的名称。
    cat : 执行cat指令,列出文件内容。
    gitview : 执行gitview指令,观看文件内容。
    vi : 执行vi指令,编辑文件内容。
    cp : 执行cp指令,复制文件或目录,会要求您输入目标文件或目录。
    mv : 执行mv指令,移动文件或目录,或是更改其名称,会要求您输入目标文件或目录。
    mkdir : 执行mkdir指令,建立目录。
    rm : 执行rm指令,删除文件或目录。
    make : 执行make指令,批处理执行指令或编译程序时,会要求您输入相关命令。
    git : 离开git文件管理员。

    更新项目

    remote

    git remote 查看,添加和删除远端仓库

    git remote 
        -v
        origin 
    
    git remote origin 远程仓库名字
    git remote -v 查看到仓库对于远程的地址    

    git remote add 项目添加一个新的远端仓库

    git remote add [alias] [url]

    git remote rm 删除现存的某个别名

    git remote rm [alias]

    fetch

    git fetch 从远端仓库下载新分支与数据

    git fetch [alias] 将仓库与远端仓库同步,提取所有它独有的数据到本地分支以合并或怎样。

    pull

    git pull 从远端仓库提取数据并尝试合并到当前分支

    该命令是在git fetch之后紧接着 git merge 远端分支到你所在的任意分支。

    push

    git push 本地改动推送到远端仓库

    git push [alias] [branch] // 仓库名字,分支.  

    检查与比较

    log

    git log 显示一个分支中提交的更改记录.

    需要了解当执行git commit以存储一个日志的时候,都有什么信息被保存了。除了文件详单提交信息,和提交者的信息,Git还保存了此次提交所基于的日志信息。

    git log --oneline 查看历史记录的紧凑简洁的版本.

    git log --oneline --graph 查看历史中什么时候出现分支,合并,展示拓扑图.

    git log --oneline master 查看特殊分支的日志信息

    git log --author

    git log --author 寻找某个特定的作者的提交

    git log --author=v_linxingzhang --oneline -5
    git log --since --before
    git log --oneline --before={3.weeks.ago} --after={2017-01-06} --no-merges
    git log -p

    git log -p 显示每个提交引入的补丁

    git log -p -2
    git log --stat

    git log --stat 显示每个提交引入的改动的差值统计

    如果-p 选项太过详细,可以用--stat 总结改动。 使用--stat选项时,同一份日志的输出。

    git log 远程分支 origin/本地分支
    > git log dev origin/dev

    查看全部日志信息,包括本地没有更新远程信息.

    diff

    git diff 对比

    git diff [version]

    git diff 工作区和暂存区的差异对比
    git diff --cached(--staged) 暂存区和版本库的差异对比
    git diff master 
        git diff 分支名字
    git diff --stat

    比较两个不同的分支,类似执行git diff branchA branchB的命令

    git diff --stat master dev

    比较两个不同的分支,指定分支.

    使用git diff 查看某一分支自它偏离出来起与过去某一点之间项目的改动。 总是使用git diff branchA ... branchB来查看branchBbranchA的相对差值.

    其它

    git stash 将文件给push 到一个回收站中
    git stash pop 将文件给pop到一个回收站中
    git stash drop 将放入回收站的文件删除
    git push origin 本地分支名字:远程分支名字 本地分支添加到远程分支

    git push --set-upstream origin master -f 和远程分支建立关联+ 强制推本地文件
    git push origin :origin/master 删除远程分支需要加:

    git checkout -b dev origin/dev 以远程分支创建本地分支
    git checkout -m 旧分支名字 新分支名字 分支修改名字
    git checkout -b <本地分支名> origin/<远程分支名>,git checkout -b v4.0 origin/v4.0 获取远程存在分支,本地不存在分支。
    git cherry-pick <commit id> 对已经存在的commit进行再次提交.(不同版本,不同分支)


    git diff 查看本地的改动,即git status的文件具体改动。
    git diff commit-id1 commit-id2 --stat 两个版本之间有哪些改动
    git diff branch1 branch2 --stat 两个分支之间有哪些改动
    git diff tag1 tag2 --stat 两个分支之间有哪些改动
    git log file看到一个文件的改动,以commit的形式
    git log -p file具体一个文件的历史改动记录


    git fetch origin barnch1:barnch2 远程仓库同步到本地


    alogy
    1.3k 声望121 粉丝

    // Designer and Developer


    « 上一篇
    PHP_ThinkPHP
    下一篇 »
    CSS_Flex