• git常见问题


    1,ssh

    在 github 上添加 SSH key:

    https://www.cnblogs.com/blogzhangwei/p/5944975.html

    远程分支推送详解:

    https://www.cnblogs.com/dyh-air/p/9257237.html

    ssh-key生成密钥及SSH无密码登录的配置

    cd ~/.ssh
    ls
    //生成秘钥(包括公钥和私钥,中间不用设置密码,免得忘记)
    ssh-keygen -t rsa -C "13260634356@163.com"
    
    //测试是否和远程服务器是否连接成功
    ssh -T git@github.com

    2,git pull 提示:

    There is no tracking information for the current branch.

    Please specify which branch you want to merge with.

    是因为本地分支和远程分支没有建立联系  (使用git branch -vv  可以查看本地分支和远程分支的关联关系)  .根据命令行提示只需要执行以下命令即可

    git branch --set-upstream-to=origin/远程分支的名字 本地分支的名字   //是本地分支与远程分支建立关联关系
    git pull origin master --allow-unrelated-histories //合并两个独立的仓库

    3,关联远程仓库

    git remote add origin git@github.com:michaelliao/learngit.git
    //
    git push -u origin master
    // -u:第一次带上这个参数,可以把本地master分支和远程master分支关联起来
    //之后不用带-u这个参数
    git clone url重远程仓库克隆

    4,解决冲突

    git pull --rebase origin master
    git status

    解决冲突,手动解决后重新走下面的步骤:

    git add xxx//将工作区修改添加到暂存区stash,反操作为:git checkout -- .
    git commit -m 'xxxx' git pull git push -u origin master git rebase --continue

    5,版本回退:

    //在Git中,用HEAD表示当前版本
    git reset --hard commit_id //返回到指定版本
    git reset --hard HEAD^//返回到上一版本,或者git revert HEAD
    //撤销修改
    git reset HEAD //回到git add 之前,但工作区可能已经修改;
    git checkout -- <file>//工作区已修改,丢弃工作区的修改 
    git checkout -- . //丢弃工作区的全部修改
    git checkout #其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
    //从来没有被添加到版本库就被删除的文件,是无法恢复的!
    git checkout 如果不加--file,就是切换到另一个分支

     6,分支管理

    git checkout -b dev//创建并切换分支
    //相当于:
    git branch dev//创建分支
    git checkout dev//切换分支
    
    //查看分支:
    git branch
    
    //把dev分支的工作成果合并到master分支上
    git merge dev
    
    //删除dev分支
    git branch -d dev

     //git强制覆盖本地命令(单条执行):

     git fetch --all && git reset --hard origin/master && git pull

      第一个是:拉取所有更新,不同步;
      第二个是:本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件);
      第三个是:再更新一次(其实也可以不用,第二步命令做过了其实)

    7,解决冲突

    //Git pull 强制覆盖本地文件
    git fetch --all  
    git reset --hard origin/master 
    git pull

    8,添加远程仓库管理

    Command line instructions
    
    Git global setup
    git config --global user.name "kuangzheng"
    git config --global user.email "kuangzheng@cmstop.com"
    
    #Create a new repository(场景一:本地没有仓库和项目)
    git clone git@git.meitiyun.org:answer/testReadme.git
    cd testReadme
    touch README.md
    git add README.md
    git commit -m "add README"
    git push -u origin master
    
    #Existing folder(场景二:本地已存在项目,没有仓库)
    cd existing_folder
    git init
    git remote add origin git@git.meitiyun.org:answer/testReadme.git
    git add .
    git commit -m "Initial commit"
    git push -u origin master
    
    #Existing Git repository(场景三:已存在一个本地仓库,当然已有项目)
    cd existing_repo
    git remote add origin git@git.meitiyun.org:answer/testReadme.git
    git push -u origin --all
    git push -u origin --tags
    //git push的时候可能会出现失败 fatal: refusing to merge unrelated histories,解决办法:
    //先 git pull remote_name master --allow-unrelated-histories
    //然后 git push -u remote_name master

     9,清除本地缓存

    .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

    解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

    git rm -r --cached .idea/
    git add .
    git commit -m 'delete .idea'
    git push -u origin master -f    //强制提交 //编写.gitignore文件,并把所有忽略提交的文件都写入提交

    10,推送本地所有分支和拉取远程所有分支

    #推送本地所有分支到远程
    git remote add origin_name remote_url
    git push origin_name --all
    
    #从远程拉取所有分支到本地
    #简单使用git clone ,git fetch --all, git pull --all 都不能全部一次获取远程的所有分支,他们都只对master分支起作用,
    #所以一次性拉取所有远程分支到本地应该使用 git clone的--mirror参数,但是这样会把它初始化为一个bare仓库,所以需要去掉这个属性 ,
    #依次输入以下三个命令即可: git clone
    --mirror remote_url cd project_root git config --bool core.bare false

    11,gitee 如何避免每次提交都要输入账号和密码问题

    在选择了https的方式作为远程的方式适合,https的访问方式决定了每次都需要验证用户名&用户密码的;

    只要采用SSH的方式,就避免了上面https的方式的每次验证用户名&用户密码,省去了不少的麻烦

    //方式一:重置远程仓库
    git remote rm origin
    git remote add git@gitee.com:Yourgitee_username/YourGitRepo.git
    
    //方式二:修改远程仓库的url
    git remote set-url origin-name url

    12,本地分支回滚了,需要远程分支也回滚

    Updates were rejected because the tip of your current branch is behind

    参考:https://blog.csdn.net/zhangkui0418/article/details/82977519

    方法1:先本地回滚,再创建一个新分支,删掉错误分支,再把新的分支命名为错误分支
    git reset --hard commit-id #本地分支回滚
    git checkout -b branch-new #创建本地新分支

    git branch -D branch-old #删除本地错误分支
    git branch -dr origin/branch-old #删除远程错误分支

    git branch -m branch-new branch-old #本地修改
    git push -u origin branch-old #推送到远程

    方法2:使用强制push的方法: git push -u origin master -f 这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。

    13,分支branch和提交commit顺序的关系 

    git merge

    git merge操作合并分支会让两个分支的每一次提交都按照提交时间(并不是push时间)排序,

    并且会将两个分支的最新一次commit点进行合并成一个新的commit,最终的分支树呈现非整条线性直线的形式

    git rebase

    git rebase操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,

    再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,

    rebase完成后,切到基分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性

    git rebase可以修改提交顺序,不按提交时间来排序

    参考:https://www.dazhuanlan.com/2020/01/17/5e20e1adeaea3/

     



  • 相关阅读:
    CF516D Drazil and Morning Exercise
    Daily question
    Promise练习
    window.location
    微信二次分享描述变链接,标题也没显示设置的标题,图片也不显示
    Vue项目配置微信分享
    swiper 轮播图圆角滑动变会变成直角然后再回到圆角(iOS)
    IOS下图片不能显示问题的解决办法
    alert组件关闭跳转页面,页面无法滚动(Vue)
    C# .net framework .net core 3.1 请求参数校验, DataAnnotations, 自定义参数校验
  • 原文地址:https://www.cnblogs.com/tkzc2013/p/11882104.html
Copyright © 2020-2023  润新知