Git 使用以及常见问题处理

Git 使用:

 

基本概念

[此图源于互联网]

[此图源于互联网]

使用Git之前需要有几个基本概念

三棵树, 也就是根据时间线串起来的三个标签区.  

  1. history 是我们保存一个完整的一些列修改的地方,可以认为是最终的仓库.
  2. index  暂存区, 
  3. workspace 实际工作路径

一个关键的操作:

 我的理解, 工作区中的文件如果不add(添加到index) 或者commit (从index 添加到history) ,那么这个文件与git关系不大.也不会被版本控制管理. 

 

Git reset

用来重置, 三种模式.

--soft 

将指定 commit ID 之后的修改同时放到index和workspace中

[此图源于互联网]

--mixed 默认模式,

将指定commit ID之后的修改直接放到workspace中

[此图源于互联网]

--heard

将指定commit ID 之后的修改直接全部丢弃,在 history index 和workspace 都清空 

[此图源于互联网]

关于用到git reset 命令的情景

1. 远程与本地冲突

error: Your local changes to the following files would be overwritten by merge:
        scripts/convert_gtf_2_genefuse.py
Please, commit your changes or stash them before you can merge.
Aborting

如下问题的时候,表明其他人和我们同时修改了一个文件,并且人家先提交到了github, 我们此时有两种方法来解决.:
1.  保留我们自己本地的文件

git stash  (将未commit的文件(其实也就是同时修改的文件)进行暂存

git pull 将远程commit 拉倒自己的本地

git stash pop  从暂存区恢复暂存的文件

2. 保留远程文件:

直接使用git reset --hard 

 

git stash

 

git stash 是一个commit 的替代品, 一般commit 的都是一个比较完善的修改, 而stash 可以暂存而不是commit. 暂存后可以切换分支.

一般认为 git stash 的使用情景是:

  • 但是假设你在dev分支修改了某些文件,但这时候你不想提交(因为你还没改完)。注意:
    如果你不先提交的话,git 切换分支时会把你未commit的文件(包括未track和已track但未放入暂存区及已放入暂存区但未commit的文件)带到另一个分支,这时候怎么办呢?

    https://www.jianshu.com/p/c459dc8cc7e0

  • 发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交。这时就可以考虑git stash
  • 使用git的时候,我们往往使用分支(branch)解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用git stash就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修Bug,等到修完Bug,提交到服务器上后,再使用git stash apply将以前一半的工作应用回来。
  • 经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。储藏(stash)可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

https://www.cnblogs.com/tocy/p/git-stash-reference.html

 

 

Git checkout 

 

Git checkout 有两种用途, 

1. 恢复工作区(主要是用来从index来恢复)

通过这六步操作 我觉得git checkout -- <file>指令应该是从先从缓存区中拉取版本还原,如果没有再到版本库中拉取还原。在之后重新翻看廖神博客时,发现廖神在这句话的前一章对这句指令的解释是

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

命令格式: git checkout -- file 

2 .切换分支

命令格式: git checkout branch_name

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章