代码改变世界

git使用常用

2020-06-05 23:55  youxin  阅读(255)  评论(0编辑  收藏  举报

git fetch git pull区别:

git pull看起来像git fetch+get merge,但是根据commit ID来看的话,他们实际的实现原理是不一样的。
这里借用之前文献看到的一句话:
不要用git pull,用git fetch和git merge代替它。
git pull的问题是它把过程的细节都隐藏了起来,以至于你不用去了解git中各种类型分支的区别和使用方法。当然,多数时候这是没问题的,但一旦代码有问题,你很难找到出错的地方。看起来git pull的用法会使你吃惊,简单看一下git的使用文档应该就能说服你。
将下载(fetch)和合并(merge)放到一个命令里的另外一个弊端是,你的本地工作目录在未经确认的情况下就会被远程分支更新。当然,除非你关闭所有的安全选项,否则git pull在你本地工作目录还不至于造成不可挽回的损失,但很多时候我们宁愿做的慢一些,也不愿意返工重来。
————————————————
原文链接:https://blog.csdn.net/weixin_41975655/article/details/82887273

 

 git  reset--hard HEAD——丢弃自最近提交以来的分阶段和非分阶段更改。

https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting

指定一个不同的提交而不是HEAD来放弃自提交以来的更改。——hard指定丢弃暂存和未暂存的更改。

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

 

 

Git冲突:commit your changes or stash them before you can merge.

1.stash

通常遇到这个问题,你可以直接commit你的修改;但我这次不想这样。

看看git stash是如何做的。

git stash
git pull
git stash pop
接下来diff一下此文件看看自动合并的情况,并作出相应修改。

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

 

2.放弃本地修改,直接覆盖之

git reset --hard
git pull

————————————————
 原文链接:https://blog.csdn.net/lincyang/article/details/21519333

 

 

git checkout -- 

https://www.jianshu.com/p/285302d1eb73

 

unstage

带文件参数的reset

上面讲到的git reset实际上不带参数的,如果带上文件参数,那么效果会是怎样的?

  1. HEAD不会动
  2. 将那个commit的snapshot里的那个文件放到Index区域中

需要注意的是带文件参数的git reset没有--hard, --soft这两个参数。只有--mixed参数。

 

下面这两个命令是一样的,都是reset到HEAD上。

 
git reset file.txt
git reset --mixed HEAD file.txt

这个例子的意义在于,unstage file,仔细想一想是不是这样?当你把一个文件stage到Index区域里后后悔了,那么只需要把Index区域里的这个文件恢复到最近一次commit的状态(也就是HEAD),那就相当于unstage了。

 

git提交代码时遇到代码库有更新以及本地有更新的解决方法

 

在多人协作开发时,经常碰到同事把最新修改推送到远程库,你在本地也做了修改,这个时候无论是执行git pull还是执行git push都会提示错误,我的解决方式如下:

先隐藏掉本地的修改,然后执行git pull从代码块拉取最新代码,具体步骤如下:

1.输入 git status 查看本地的修改

2.输入git stash 隐藏掉本地修改

3.输入 git pull 从代码库拉取更新

4.输入 git stash pop stash@{版本号}

5.然后再git add git commit git push 就行了

另外,还有一种情况,因为自己粗心,在git push之前并没有看代码库的提交记录,导致同事做了修改我不知道,但是我已经执行了git add 和 git commit 这个时候怎么撤销掉git commit 呢?我采用的解决方式如下:

1.先复制你本地的项目到另外一个文件夹

2.输入 git log 查看commit日志,找到最新的提交的commit_id

3.输入git reset - -hard commit_id

4.再把刚才的项目复制过来

5.执行 上面的2 3 4  5步骤就可以了

另外需要注意的问题,当我们git pull 时发现本地的修改和远程代码库的修改有冲突,该怎么解决呢?

这个时候,我们可以根据提示来找到冲突的位置,其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashedchanges之间的内容就是本地修改的内容,需要我们手动进行确认需要怎么合并