天天看點

【git】git指令手冊--編輯中

git checkout遷出一個分支的特定版本。預設是遷出分支的HEAD版本

一此用法示例:

$ git checkout  master            #//取出master版本的head。

$ git checkout  tag_name         #//在目前分支上 取出 tag_name 的版本

$ git checkout  master file_name  #//放棄目前對檔案file_name的修改

$ git checkout  commit_id  file_name  #//取commit_id送出版本的file_name

$ git checkout -b dev/1.5.4 origin/dev/1.5.4

# 從遠端dev/1.5.4分支取得到本地分支/dev/1.5.4

$ git checkout -- hello.rb

#這條指令把hello.rb從HEAD中簽出.

$ git checkout .

#這條指令把 目前目錄所有修改的檔案 從HEAD中簽出并且把它恢複成未修改時的樣子.

#注意:在使用 git checkout 時,如果其對應的檔案被修改過,那麼該修改會被覆寫掉。

git pull 将遠端主機的最新内容拉下來到本地工作目錄後直接合并,即:git pull = git fetch + git merge,這樣可能會産生沖突,需要手動解決。

git pull 的過程可以了解為:

git fetch origin master       //從遠端主機的master分支拉取最新内容 

git merge FETCH_HEAD    //将拉取下來的最新内容合并到目前所在的分支中

即将遠端主機的某個分支的更新取回,并與本地指定的分支合并,完整格式可表示為:

$ git pull  <遠端主機名>  <遠端分支名>:<本地分支名>

如果遠端分支是與目前分支合并,則冒号後面的部分可以省略:

$ git pull origin next

//查詢目前遠端的版本

$ git remote -v

//直接拉取并合并最新代碼

$ git pull origin master [示例1:拉取遠端origin/master分支并合并到目前分支]

$ git pull origin dev [示例2:拉取遠端origin/dev分支并合并到目前分支]

git fetch将遠端主機的最新内容拉到本地倉,使用者在檢查了以後決定是否合并到本地工作本目錄

$ git fetch  <遠端主機名>  //這個指令将某個遠端主機的更新全部取回本地

$ git fetch  <遠端主機名>  <分支名>取回特定分支的更新,可以指定分支名

$ git fetch  origin  master  最常見的指令如取回origin 主機的master 分支

取回更新後,會傳回一個FETCH_HEAD ,指的是某個branch在伺服器上的最新狀态,我們可以在本地通過它檢視剛取回的更新資訊:

$ git log -p FETCH_HEAD

git fetch後的合并:

git reset HEAD

什麼都不會發生, 指針指向目前位置

git reset --mixed HEAD~1

HEAD~1 指上一個送出, HEAD~2 指上上一個送出

讓暫存區和曆史區與指定的送出保持一緻,可以了解為撤銷 git add

git reset --soft HEAD~1

讓曆史區與指定的送出保持一緻,可以了解為撤銷 git commit

git reset --hard HEAD~1

讓工作區、暫存區和曆史區都與指定的送出保持一緻,可以了解為撤銷所有改動

連結:https://www.jianshu.com/p/e84283d2f0f1

reset指令有3種方式:

1:git reset –mixed:此為預設方式,不帶任何參數的git reset,即時這種方式,它回退到某個版本,隻保留源碼,回退commit和index資訊

2:git reset –soft:回退到某個版本,隻回退了commit的資訊,不會恢複到index file一級。如果還要送出,直接commit即可

3:git reset –hard:徹底回退到某個版本,本地的源碼也會變為上一個版本的内容

#回退所有内容到上一個版本

git reset HEAD^

#回退a.py這個檔案的版本到上一個版本

git reset HEAD^ a.py

#向前回退到第3個版本

git reset –soft HEAD~3

#将本地的狀态回退到和遠端的一樣

git reset –hard origin/master

#回退到某個版本

git reset 057d

#回退到上一次送出的狀态,按照某一次的commit完全反向的進行一次commit

git revert HEAD

如果我們某次修改了某些内容,并且已經commit到本地倉庫,而且已經push到遠端倉庫了

這種情況下,我們想把本地和遠端倉庫都回退到某個版本,該怎麼做呢?

前面講到的git reset隻是在本地倉庫中回退版本,而遠端倉庫的版本不會變化

這樣,即時本地reset了,但如果再git pull,那麼,遠端倉庫的内容又會和本地之前版本的内容進行merge

這并不是我們想要的東西,這時可以有2種辦法來解決這個問題:

1:直接在遠端server的倉庫目錄下,執行git reset –soft 10efa來回退。注意:在遠端不能使用mixed或hard參數

2:在本地直接把遠端的master分支給删除,然後再把reset後的分支内容給push上去,如下:

#建立old_master分支做備份

git branch old_master

#push到遠端

git push origin old_master:old_master

#本地倉庫回退到某個版本

git reset –hard bae168

#删除遠端的master分支

git push origin :master

#重新建立master分支

git push origin master

在删除遠端master分支時,可能會有問題,見下:

$ git push origin :master

error: Bydefault, deleting the current branch is denied, because the next

error:'git clone' won't result in any file checked out, causing confusion.

error:

error: You can set'receive.denyDeleteCurrent'configuration variable to

error:'warn' or 'ignore'in the remote repository to allow deleting the

error: current branch, with or without a warning message.

error: To squelchthis message, you can set it to 'refuse'.

error: refusing to delete the current branch: refs/heads/master

To [email protected]:gitosis_test![remote rejected] master (deletion of the current branch prohibited)

error: failed to push some refs to'[email protected]:gitosis_test'

這時需要在遠端倉庫目錄下,設定git的receive.denyDeleteCurrent參數

git receive.denyDeleteCurrent warn

然後,就可以删除遠端的master分支了

雖然說有以上2種方法可以回退遠端分支的版本,但這2種方式,都挺危險的,需要謹慎操作……

相關資源:Git恢複之前版本的兩種方法reset、revert(圖文詳解)_gitrevert後...