zoukankan      html  css  js  c++  java
  • 【git】git知识梳理(一):基本操作&远程控制&分支管理

    (一)基本操作: 

    git中所有文件一共有三个状态:已提交,已暂存,已修改。

    三个工作区域:

    git目录:.git文件夹,每次拷贝其实只拷贝git目录

    工作目录:文件和目录都是从git目录中压缩对象数据库中提取出来的。

    暂存区:是一个简单的文件,在git目录中,有时叫做索引文件。

    工作流程:

    1、在工作目录中修改文件

    2、对修改后文件进行快照,存入暂存区

    3、提交更新,将保存在暂存区的文件快照永久转存到git目录中。

    获取帮助的方法:git help <verb> / git <verb> --help / man git-<verb>

    工作目录中文件一共有四个状态:未追踪,未修改,已修改,已暂存。

    git diff: 看已修改的和暂存的差异(也就是修改的地方)、如果看暂存的和提交的差异,要用diff --cached(--staged)

    git commit -a 不经过暂存直接提交。

    git rm是从暂存区移除,同时删除文件。如果只想解除追踪,不想删除文件,那么使用git rm --cached aaa.py

    git reset是取消对文件的暂存,不修改工作区的内容,只是不暂存了。git reset HEAD file,其原理是回退版本。

    git checkout -- file是取消对文件的修改,修改的是工作区的内容!修改成为之前一次add或者commit的状态。非常危险!非常危险!非常危险!git中,只要提交了,就总能回到这个版本!

    git tag:标签,比较麻烦。

     (二)远程控制:

    git remote -v是查看远程库,git remote add 添加

    git fetch pb, 远程库的master分支可以在本地访问了,对应的名字是pb/master,会把没有的数据拉下来,但fetch操作不涉及分支合并。

    git pull origin master 如果我的分支跟踪了某个远程仓库的分支,先fetch抓取数据,然后将远端分支自动合并到当前分支。在git clone时默认本地的master分支跟踪远程仓库的master分支。

    git push 如果我在推送数据之前已经有其他人推送过数据了,这时就先要fetch下来,然后合并,然后再提交。

    git remote show origin 看origin仓库的详细信息。

     (三)git分支:

    git鼓励多次使用分支和合并,哪怕一天内分支合并多次

    提交时保存一个提交对象,包含一个指向暂存快照的指针,包含作者等附属信息,包含0或多个祖先,每一次commit实际上都继承了上一个parent,

    git checkout实际上是更换分支的操作,将head指针指向另一个分支,

    分支实际上就是一个指针,总共只有41个字节,40个校验和,1个换行符。

    切换分支的时候要注意保持工作区的清洁,也就是先提交!!!

    git branch -d asd 删除分支

    合并分支方法:

      1、切回到master分支:git checkout master

      2、与之后的分支合并: git merge hotfix

      (如果是直接后代的话,那么是fast-forward,只改变指针的位置)

    如果出现冲突:git status可以看到冲突的文件,直接去文件中,可以看到冲突的地方,直接修改之后再add commit就可以了。同时可以通过git mergetool调用可视化工具

    可以用git branch --merged查看哪些分支在当前分支的直接上游。

    远程分支:一般是 库/名字的状态 origin/master,只可读,不可写。可以推送 比如 git push origin master:master,如果要删除 可以git push origin 【空格】:master

    推送操作为 git push (远程仓库名) (本地分支名):(远程分支名)

    本地创建新指针 git checkout -b local1 remote1/branch1,这样也就默认跟踪了。

    如果不能直接pull的话,一般要fetch下来,然后再merge,解决冲突之后再提交。

    分支的衍合(rebase):

      1、切换到test分支,要衍合到master上

      2、git rebase master

      从分支上衍合master,然后提交上去,相当于把冲突合并的事情提前做了,主人想修改,只需要直接向后快进合并就可以了。

    比较复杂的情况:git rebase --onto master server client 取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍。

    衍合不应该衍合已经提交到公共仓库的对象!

  • 相关阅读:
    【CS Round #46 (Div. 1.5) B】Letters Deque
    【CS Round #46 (Div. 1.5) A】Letters Deque
    【Codeforces Round #432 (Div. 2) A】 Arpa and a research in Mexican wave
    【Codeforces Round #432 (Div. 2) B】Arpa and an exam about geometry
    【Codeforces Round #432 (Div. 1) A】 Five Dimensional Points
    【2017 Multi-University Training Contest
    Managing remote devices
    防止表单重复提交的解决方案整理
    防止表单重复提交的解决方案整理
    日期格式化函数
  • 原文地址:https://www.cnblogs.com/yesuuu/p/5958656.html
Copyright © 2011-2022 走看看