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後...