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

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