zoukankan      html  css  js  c++  java
  • Git学习

    ===========Windows下git bash命令=========================
    git status 检查修改了什么
    git log 查看历史提交信息

    git config --list 查看git配置信息
    git config user.name 查看git用户名
    git config user.email 查看邮箱配置
    git config --global user.name "zjj6029" 全局配置用户名
    git config --global user.email "zhoujunjie92@163.com" 全局配置邮箱

    本地仓库创建
    git init 在指定文件夹下,创建了一个Git仓库
    git add [test.txt] 把文件添加到资源库
    git commit -m "wrote a test file" 把文件提交到仓库

    可以查看远程仓库的地址
    git remote -v
    git remote show origin 查看当前仓库的基本信息

    配置远程仓库的名称
    git remote add origin xxxxx
    git remote add origin zhoujunjie92@163.com:zjj6029/learngit.git

    git push -u origin master //origin指的是远程仓库的地址,名称; master是分支
    使用了-u之后就可以仅git push 来代替上述一大段命令了;

    =================参考链接===============================
    Git for Windows安装指南:
    https://blog.csdn.net/sishen47k/article/details/80211002

    Windows下Git入门教程:
    https://blog.csdn.net/m0_37580324/article/details/80471947

    Windows下使用git拉去github上项目:
    https://segmentfault.com/a/1190000018518248?utm_source=tag-newest

    Git 里面的 origin 到底代表啥意思?
    https://blog.csdn.net/yexudengzhidao/article/details/102882774

    ============push、clone===================================
    记Git报错-refusing to merge unrelated histories:
    https://blog.csdn.net/u012145252/article/details/80628451

    出现这个问题的最主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库。假如我之前是直接clone的方式在本地建立起远程github仓库的克隆本地仓库就不会有这问题了。

    查阅了一下资料,发现可以在pull命令后紧接着使用--allow-unrelated-history选项来解决问题(该选项可以合并两个独立启动仓库的历史)。
    也可以这么写:
    git push origin master -f

    $ git push <远程主机名> <本地分支名>:<远程分支名>
    也就是
    $git push origin master:master
    提交成功。

    先有远程仓库,后又本地克隆库:
    https://blog.csdn.net/qq_42672770/article/details/81317778

    git fetch [remote-name]

    ===============================================================
    140.82.113.4 github.com - Github
    199.232.5.194 github.global.ssl.fastly.net

    Git master branch has no upstream branch的解决
    https://blog.csdn.net/benben_2015/article/details/78803753

    Windows 环境下 Git clone pull fetch 慢 解决之道
    https://blog.csdn.net/xiangqianzou_liu/article/details/81116006

    github访问慢和clone慢的解决方案
    https://www.cnblogs.com/ericzz/p/10335600.html
    ===============================================================
    git log -p //什么意思

    如果改的是同一行,merge的话会有冲突,那必须手动解决;
    本地可以回退commit,然后merge;
    如何查看冲突
    如何查看当前head在哪


    git fetch, git pull 以及 FETCH_HEAD
    https://www.cnblogs.com/Venom/p/5477367.html


    工作区内修改文件与git分支的关联
    https://www.cnblogs.com/cynthia0705/p/3397059.html


    git从master分支checkout一个新分支,开发完毕合并到master出现冲突
    https://www.cnblogs.com/fangjianbin/p/4381207.html


    Git分支合并冲突解决
    https://www.cnblogs.com/shuimuzhushui/p/9022549.html


    git 利用好git status的提示信息
    https://blog.csdn.net/anlian523/article/details/98041383?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1


    git status命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用git log.


    如何解决在使用git pull 拉取线上代码时发生的冲突
    https://blog.csdn.net/yangchunshang/article/details/80281699


    git reset 加不加 --hard的区别
    https://blog.csdn.net/chenpuzhen/article/details/92006378


    git 冲突解决
    https://blog.csdn.net/private66/article/details/80737374

    =================================================

    git log 查看hash值;
    通过hash指定提交记录不是很方便;
    使用相对引用,可以从一个易于记忆的地方开始工作;
    使用^ 向上移动1个提交记录
    使用^<num> 向上移动多个提交记录
    git checkout master^ //相当于将Head移动到master的父提交上

    假设需要在提交树中向上移动很多步。使用多个 ^ 非常无聊,所以 Git 也引入了波浪 (~) 操作符。
    波浪操作符后面可以(可选地)跟一个数字,指定向上移动多少次。
    看个例子 git checkout HEAD~4

    使用相对引用最多的就是移动分支,可以使用-f选项直接让分支指向另一个提交。
    git branch -f master HEAD~3
    (强制)移动 master 指向 HEAD 的第3级父提交。


    在 Git 里主要用两种方法来撤销变动 —— 一种是 git reset,另外一种是 git revert。

    git reset 把分支记录回退到上一个提交记录来实现撤销改动。你可以认为这是在"重写历史"。
    git reset 往回移动分支,原来指向的提交记录好像重来没有提交过一样。
    git reset HEAD~1

    虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对别人的远端分支是无效的哦!
    为了撤销更改并传播给别人,我们需要使用 git revert。


    git cherry-pick C2 C4
    git rebase -i overHere --solution-ordering C3,C5,C4

    git rebase -i
    git cherry-pick
    交互(-i)衍合允许你选择哪些提交是要被保留,哪些要被舍弃。它允许你将提交重新排序。假如你要舍弃一些工作,这个会帮上很大的忙。

    ==========【基本配置】==========================
    1、配置用户信息:
    git config --global user.name "Zhou Junjie"
    git config --global user.email "zhoujunjie@tp-link.com.cn"


    2、设置的是默认使用的文本编辑器。Git 需要您输入一些额外消息的时候,会自动调用一个外部文本编辑器给您用。
    git config --global core.editor vim

    也可以通过下述命令更改 Ubuntu 默认编辑器,这种方式对其他应用程序也生效。
    echo 'export EDITOR = vim' >> ~/.bashrc
    . ~/.bashrc

    3、如果您要下载 Gerrit 服务器上托管的代码,就需要生成密钥对并把公钥配置到 Gerrit 中。

    4、
    .....



    git diff
    https://blog.csdn.net/wq6ylg08/article/details/88798254

    git diff命令详解
    https://www.cnblogs.com/lsgxeva/p/8540485.html



    git pull后本地暂存区(stage,index)和工作区(workspace)的文件及修改会不会没掉?

    ->测试过不会有影响,暂存区和工作区的内容依然存在;

    可以使用"git restore --staged <file>..." 命令来unstage,将修改回退到add前,也就是将暂存区的修改回退到工作区中;

    可以使用"git restore <file>..." 命令来丢弃工作区中的修改;



    git stash详解:https://blog.csdn.net/realLiuNing/article/details/90968988

    1.当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。

    2.由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。

    总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。

    git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。

     

    git切换分支时,会将未add或未commit的内容切换过去:https://segmentfault.com/a/1190000017794371

    工作区和缓存区内容是公共的,不从属于任何一个分支;

    当既想要在切换分支,又不想add时,可以使用git stash,当使用了git stash后,在其他分支仍然可以通过git stash pop找出来;

     

    git stash
    能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。

     

    git stash pop:

    将当前stash中的内容弹出,并应用到当前分支对应的工作目录上。
    注:该命令将堆栈中最近保存的内容删除(栈是先进后出)
    如果从stash中恢复的内容和当前目录中的内容发生了冲突,也就是说,恢复的内容和当前目录修改了同一行的数据,那么会提示报错,需要解决冲突,可以通过创建新的分支来解决冲突。

    git stash apply:

    将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况。
    堆栈中的内容并没有删除。
    可以使用git stash apply + stash名字(如stash@{1})指定恢复哪个stash到当前的工作目录。

     

    git stash clear
    清除堆栈中的所有 内容

     

    git stash show
    查看堆栈中最新保存的stash和当前目录的差异。

     

    [Git]执行git stash pop时的冲突解决:https://blog.csdn.net/jy692405180/article/details/78520251



    git rebase:

    Git分支Rebase详解:https://blog.csdn.net/endlu/article/details/51605861

    你真的懂git rebase吗?:https://www.jianshu.com/p/6960811ac89c

    git rebase 还是 merge的使用场景最通俗的解释:https://www.jianshu.com/p/4079284dd970

     

    rebase最好是对自己的分支进行rebase;不要对公共分支rebase;

    rebase是在分支之间合并工作的第二种方法,rebasing是取出一系列的提交记录,复制它们,然后在别的地方放下来;

     

    Git rebase使用:
    https://www.jianshu.com/p/f7ed3dd0d2d8



    git快进合并: https://blog.csdn.net/mengltx/article/details/89643370

    快进和并的优点是能简化版本库的历史记录并使其保持线性发展。

    缺点是我们不能根据已经合并过的历史记录来看版本库的这一发展.git提供了–no-ff的选项,以强制其产生一次提新的提交。

    [Git] 以非快进方式合并分支来保留合并记录:https://blog.twofei.com/747/



    git push origin  将当前分支推送到origin主机的对应分支。前提是跟踪关系已经建立了,如果当前分支只有一个追踪分支,那么主机名都可以省略。

    git push 如果当前分支与多个主机存在追踪关系,那么这个时候-u选项会指定一个默认主机,这样后面就可以不加任何参数使用git push。

    git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。



     

    一些备忘:

    git checkout 切分支,是不会对stage区以及工作区产生影响的;

    如果在a分支上开发一个功能,中途遇到一个bug,需要切到b分支上改bug。

    这时候就需要把还没有提交的功能用git stash存起来,然后切到分支b上改bug,并提交。然后切回分支a上,git stash pop回复暂存区和工作区,继续开发;git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。

     

    commit不要太频繁,太多的commit不利于后期问题的追溯。如果开发一个功能还没完成,可以先不提交,保留在stage区就可以了;可以配合git stash,也可以方便切换到其他分支做别的事情。



    本地库和远程库的同步问题:

    //涉及命令:fetch,merge,pull,push,rebase,

     

    merge冲突

    本地库 做了一处修改,

    远程库 也在同一行做了修改,

    本地库不知道远程库做了修改的情况下,要上传代码前,最好fetch一下;

     

     

    我们merge之后会产生冲突,同时会冲突的地方会被插入冲突标记,类似于下方:

    <<<<<<HEAD

    ========

    >>>>origin/master

    这时候要手动修改冲突,然后再次commit,之后push上去就行了; 

     

    输入git diff 可以查看差异;

    手动解决merge冲突之后,实际上不得不增加一次新的commit,然后merge;最好push上去;

    多以fetch+merge比直接pull要好;

     

    git pull时冲突的几种解决方式:

    https://www.cnblogs.com/zjfjava/p/10280247.html

     

    将本地库更新到远程库:

    git push origin master    //origin仓库名, master分支

     

    学习理解GIT命令之git fetch的用法
    https://blog.csdn.net/naro7l/article/details/78900338

     

    一般的操作是:

    git fetch origin master

    git log -p master..origin/master  //比较本地的master分支和origin/master分支的差别

    git merge origin master

     

    所以一般在本地push之前,最好fetch+merge,并解决冲突;然后再push上去就行了;

     

    本地开发,远程发生了改变;
    本地提交之前,最好fetch一下,然后merge,检查并修改merge冲突;然后再次commit,尝试使用commit -amend;
    git fetch是将远程仓库的更新获取到本地仓库,不影响其他区域。而git pull则是一次性将远程仓库的代码更新到工作区(同时也会更新本地仓库)。

     

    fetch+merge 比直接pull 要好;
    代码冲突是多人协作开发过程中最常见的问题,尤其是修改同一个文件的时候;
    最好养成定期pull的好习惯;修改代码后,先fetch,再merge,最后再提交;
    如果实在有冲突,则根据冲突标记,手动解决冲突;

     

    Git基础之合并解决冲突, 解决vs报错: 遇到合并冲突标记:
    http://www.skcircle.com/?id=207

     

    Git中pull对比fetch和merge:
    https://www.cnblogs.com/wushank/p/5172419.html

     

    Git冲突与解决方法:
    https://www.cnblogs.com/gavincoder/p/9071959.html

    知行合一
  • 相关阅读:
    IE6-9中tbody的innerHTML不能赋值bug
    matchesSelector及低版本IE中对该方法的实现
    JavaScript日期组件的实现
    IE6/7/8中parseInt第一个参数为非法八进制字符串且第二个参数不传时返回值为0
    子程序设计原则
    仅IE6中链接A的href为javascript协议时不能在当前页面跳转
    JavaScript获取图片的原始尺寸
    JavaScript判断图片是否加载完成的三种方式
    Mac OS X 快捷键
    IE6-8中Date不支持toISOString方法
  • 原文地址:https://www.cnblogs.com/grooovvve/p/14646183.html
Copyright © 2011-2022 走看看