git 学习

 git基本总结

  看了几次git,都没有很好的使用,不久就忘记了,为了方便自己,加深记忆,在这里总结一下,毕竟自己的东西看的懂。

借用一下别人的图:

注释命令备注
初始化init在本地的当前目录里初始化git仓库,第一次建立仓库,要ssh对接的自己的仓库
 clone 地址从网络上某个地址拷贝仓库(repository)到本地,在.git里保存了自己或者其他源仓库的信息,直接push/pull
查看当前状态status查看当前仓库的状态。碰到问题不知道怎么办的时候,可以通过看它给出的提示来解决问题
查看不同diff查看当前状态和最新的commit之间不同的地方
 diff 版本号1 版本号2查看两个指定的版本之间不同的地方。这里的版本号指的是commit的hash值
添加文件add -A这算是相当通用的了。在commit之前要先add
撤回stage的东西checkout -- file/.这里用小数点表示撤回所有修改,在--的前后都有空格
提交commit -m "提交信息"提交信息最好能体现更改了什么
删除未trackedclean -xf删除当前目录下所有没有track(追踪)过的文件。不管它是否是.gitignore文件里面指定的文件夹和文件
查看提交记录log查看当前版本及之前的commit记录
 reflogHEAD的变更记录
版本回退reset --hard 版本号回退到指定版本号的版本,该版本之后的修改都被删除。同时也是通过这个命令回到最新版本。需要reflog配合

2.个人使用远程仓库

行为命令备注
设置用户名config --global user.name "你的用户名" 
设置邮箱config --global user.email "你的邮箱" 
生成ssh keyssh-keygen -t rsa -C "你的邮箱"这条命令前面不用加git (window在~目录下生成)
添加远程仓库remote add origin 你复制的地址设置origin
上传并指定默认push -u origin master指定origin为默认主机,以后push默认上传到origin上
提交到远程仓库push将当前分支增加的commit提交到远程仓库
从远程仓库同步pull在本地版本低于远程仓库版本的时候,获取远程仓库的commit

命令解释

  1. changes to committed  提示语 表明可以commit提交到本地库中
  2. git restore file 回撤未add的文件
  3. git rm --cached file  表示从缓存移除文件
  4. tracked 追踪 表示被添加到缓存中的文件被索引
  5. git diff 默认跟最新的commit比较 红色-表示删除 +绿色表示添加
  6. git ckeckout --  file  撤销改变
  7. git gc  删除.git 的镜像文件
  8. git rebase -i  版本号 ^  修改注释
  9. git branch -a   查看远程全部的分支,白色的表示本地有的,红色的表示本地没有,仅在远程存在。
  10. git push origin branch1:branch2   注意:将本地分支branch1推到远端的branch2操作步骤
  11. git branch -D/-d分支  删除分支
  12. git push origin --delete  分支  删除远程分支
  13. git stash  储藏更改:将当前更改的代码储藏起来,等以后恢复使用
  14. git stash pop //恢复的同时把stash内容删掉 ,恢复储藏的代码 或者 git stash apply   恢复stash,但是stash内容并不删除
  15. git stash drop    在上面操作的基础上,以此来删除stash
  16.  git stash list   查看全部的stash列表
  17.  git stash clear  将stash空间清空
  18. git stash pop 和 git stash apply 区别
  19. 原来git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,
  20. 而 git stash apply stash@{id} 命令则会继续保存stash id。

4.版本回退

--soft      – 缓存区和工作目录都不会被改变
--mixed  – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
--hard    – 缓存区和工作目录都同步到你指定的提交,工作目录受影响
git reset  --hard  版本号 (取版本号前7位就可以了)

git reset 版本号/HEAD^/HEAD~2

git reflog 查看版本 可以回到最新的版本  通过reset 可以查看历史commit   log不可以查看删除的commit

www.cnblogs.com/schaepher/p/5561193.html

 

命令作用域常用情景
git reset提交层面在私有分支上舍弃一些没有提交的更改,删除回退
git reset文件层面将文件从缓存区中移除
git checkout提交层面切换分支或查看旧版本,查看以前版本,不回退
git checkout文件层面舍弃工作目录中的更改
git revert提交层面在公共分支上回滚更改   将回退版本新增在前面
git revert文件层面(然而并没有)

https://www.cnblogs.com/houpeiyong/p/5890748.html

 

5.Git版本恢复命令reset和revert
一. 本地commit错误没有push到远程仓库
  reset命令有3种方式:
  git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,保留工作区源码,回退commit和index信息
  git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
  git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容

 

二.  如果我们某次修改了某些内容,已经commit到本地仓库,而且已经push到远程仓库了

这种情况下,我们想把本地和远程仓库都回退到某个版本,该怎么做呢?
前面讲到的git reset只是在本地仓库中回退版本,而远程仓库的版本不会变化
这样,即时本地reset了,但如果再git pull,那么,远程仓库的内容又会和本地之前版本的内容进行merge
这并不是我们想要的东西,这时可以有2种办法来解决这个问题:

 1.直接在远程server的仓库目录下,执行git reset –soft 10efa来回退

 2.在本地直接把远程的master分支给删除,然后再把reset后的分支内容给push上去,

 以上2种方法可以回退远程分支的版本,但这2种方式,都挺危险的,

 

 

一,对于已经push的版本,进行回退
   1、第一步:
      git reset --hard 版本号 //本地回退到指定的版本
   2、第二步:
      git push  -f origin dev    //将远程的也回退到指定版本
      本地同步远程删除的分支
      git fetch origin -p  //用来清除已经没有远程信息的分支,这样git branch -a 就不会拉取远程已经删除的分支了
二,删除掉没有与远程分支对应的本地分支
        从gitlab上看不到的分支在本地可以通过git branch -a 查到,删掉没有与远程分支对应的本地分支:   git fetch -p
三、查看远程库的一些信息,及与本地分支的信息
        git remote show origin 

 

三. git revert
   对于已经把代码push到远程仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令
revert
   git revert用于反转提交,执行revert命令时要求工作树必须是干净的.
   git revert用一个新提交来消除一个历史提交所做的任何修改.
   revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)

   git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
看似达到的效果是一样的,其实完全不同.
第一:
   上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.
第二:
   如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
第三:
reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

https://blog.csdn.net/lindexi_gd/article/details/52554159

 

总结:
 1.初始化仓库时,本地仓库没有保存远程仓库的信息,所以要 remote add origin + 地址  在push -u origin master(分支),其中就保存了远程仓库的信息(ssh对接的仓库),如果远程仓库版本高,需要pull origin master(分支)

 2.clone 后保存了远程仓库信息,直接push (提交管理员审核)

3.本地版本需要和远程同步,只能比远程的版本多个版本,才可以提交,不然会有冲突(需要远程仓库回退到相同的版本,才可以提交)

4.git pull origin master

fatal: refusing to merge unrelated histories

在Github新建一个仓库,把本地东西上传。这时会发现 github 的仓库和本地的没有一个共同的 commit 所以 git 不让提交,认为是写错了 origin ,如果这个 origin 就可以使用 --allow-unrelated-histories 告诉 git 自己确定

遇到无法提交的问题,一般先pull 也就是使用 git pull origin master 这里的 origin 就是仓库,因为两个仓库不同,发现 git 输出 refusing to merge unrelated histories 无法 pull 内容

因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在 git pull 之后,这句代码是在git 2.9.2版本发生的,最新的版本需要添加 --allow-unrelated-histories 告诉 git 允许不相关历史合并

假如我们的源是origin,分支是master,那么我们需要这样写git pull origin master --allow-unrelated-histories
这个方法只解决因为两个仓库有不同的开始点,也就是两个仓库没有共同的 commit 出现的无法提交。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值