成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Git 系列(四):在 Git 中進(jìn)行版本回退

開(kāi)源 Linux
在這篇文章中,你將學(xué)到如何查看項(xiàng)目中的歷史版本,如何進(jìn)行版本回退,以及如何創(chuàng)建 Git 分支以便你可以大膽嘗試而不會(huì)出現(xiàn)問(wèn)題。

在這篇文章中,你將學(xué)到如何查看項(xiàng)目中的歷史版本,如何進(jìn)行版本回退,以及如何創(chuàng)建 Git 分支以便你可以大膽嘗試而不會(huì)出現(xiàn)問(wèn)題。

在你的 Git 項(xiàng)目的歷史中,你的位置就像是搖滾專輯中的一個(gè)片段,由一個(gè)被稱為 HEAD 的 標(biāo)記來(lái)確定(如磁帶錄音機(jī)或錄音播放器的播放頭)。要在你的 Git 時(shí)間線上前后移動(dòng) HEAD ,需要使用 git checkout 命令。

git checkout 命令的使用方式有兩種。最常見(jiàn)的用途是從一個(gè)以前的提交中恢復(fù)文件,你也可以整個(gè)倒回磁帶,切換到另一個(gè)分支。

恢復(fù)一個(gè)文件

當(dāng)你意識(shí)到一個(gè)本來(lái)很好文件被你完全改亂了。我們都這么干過(guò):我們把文件放到一個(gè)地方,添加并提交,然后我們發(fā)現(xiàn)它還需要做點(diǎn)***的調(diào)整,***這個(gè)文件被搞得面目全非了。

要把它恢復(fù)到***的完好狀態(tài),使用 git checkout 從***的提交(即 HEAD)中恢復(fù):

  1. $ git checkout HEAD filename 

如果你碰巧提交了一個(gè)錯(cuò)誤的版本,你需要找回更早的版本,使用 git log 查看你更早的提交,然后從合適的提交中找回它:

  1. $ git log --oneline 
  2. 79a4e5f bad take 
  3. f449007 The second commit 
  4. 55df4c2 My great project, first commit
  5. $ git checkout 55df4c2 filename 

現(xiàn)在,以前的文件恢復(fù)到了你當(dāng)前的位置。(任何時(shí)候你都可以用 git status 命令查看你的當(dāng)前狀態(tài))因?yàn)檫@個(gè)文件改變了,你需要添加這個(gè)文件,再進(jìn)行提交:

  1. $ git add filename 
  2. $ git commit -m 'restoring filename from first commit.' 

使用 git log 驗(yàn)證你所提交的:

  1. $ git log --oneline 
  2.  
  3. d512580 restoring filename from first commit 
  4.  
  5. 79a4e5f bad take 
  6.  
  7. f449007 The second commit 
  8.  
  9. 55df4c2 My great project, first commit

 

從本質(zhì)上講,你已經(jīng)倒好了磁帶并修復(fù)了壞的地方,所以你需要重新錄制正確的。

回退時(shí)間線

恢復(fù)文件的另一種方式是回退整個(gè) Git 項(xiàng)目。這里使用了分支的思想,這是另一種替代方法。

如果你要回到歷史提交,你要將 Git HEAD 回退到以前的版本才行。這個(gè)例子將回到最初的提交處:

  1. $ git log --oneline 
  2.  
  3. d512580 restoring filename from first commit 
  4.  
  5. 79a4e5f bad take 
  6.  
  7. f449007 The second commit 
  8.  
  9. 55df4c2 My great project, first commit
  10.  
  11. $ git checkout 55df4c2  

當(dāng)你以這種方式倒回磁帶,如果你按下錄音鍵再次開(kāi)始,就會(huì)丟失以前的工作。Git 默認(rèn)假定你不想這樣做,所以將 HEAD 從項(xiàng)目中分離出來(lái),可以讓你如所需的那樣工作,而不會(huì)因?yàn)榕紶柕挠涗浂绊懼蟮墓ぷ鳌?/p>

如果你想看看以前的版本,想要重新做或者嘗試不同的方法,那么安全一點(diǎn)的方式就是創(chuàng)建一個(gè)新的分支。可以將這個(gè)過(guò)程想象為嘗試同一首歌曲的不同版本,或者創(chuàng)建一個(gè)混音的。原始的依然存在,關(guān)閉那個(gè)分支做你想做的版本吧。

就像記錄到一個(gè)空白磁帶一樣,把你的 Git HEAD 指到一個(gè)新的分支處:

  1. $ git checkout -b remix 
  2.  
  3. Switched to a new branch 'remix'  

現(xiàn)在你已經(jīng)切換到了另一個(gè)分支,在你面前的是一個(gè)替代的干凈工作區(qū),準(zhǔn)備開(kāi)始工作吧。

也可以不用改變時(shí)間線來(lái)做同樣的事情。也許你很想這么做,但切換到一個(gè)臨時(shí)的工作區(qū)只是為了嘗試一些瘋狂的想法。這在工作中完全是可以接受的,請(qǐng)看:

  1. $ git status 
  2.  
  3. On branch master 
  4.  
  5. nothing to commit, working directory clean 
  6.  
  7. $ git checkout -b crazy_idea 
  8.  
  9. Switched to a new branch 'crazy_idea'  

現(xiàn)在你有一個(gè)干凈的工作空間,在這里你可以完成一些奇怪的想法。一旦你完成了,可以保留你的改變,或者丟棄他們,并切換回你的主分支。

若要放棄你的想法,切換到你的主分支,假裝新分支不存在:

  1. $ git checkout master 

想要繼續(xù)使用你的瘋狂的想法,需要把它們拉回到主分支,切換到主分支然后合并新分支到主分支:

  1. $ git checkout master 
  2.  
  3. $ git merge crazy_idea  

git 的分支功能很強(qiáng)大,開(kāi)發(fā)人員在克隆倉(cāng)庫(kù)后馬上創(chuàng)建一個(gè)新分支是很常見(jiàn)的做法;這樣,他們所有的工作都在自己的分支上,可以提交并合并到主分支。Git 是很靈活的,所以沒(méi)有“正確”或“錯(cuò)誤”的方式(甚至一個(gè)主分支也可以與其所屬的遠(yuǎn)程倉(cāng)庫(kù)分離),但分支易于分離任務(wù)和提交貢獻(xiàn)。不要太激動(dòng),你可以如你所愿的有很多的 Git 分支。完全自由。

遠(yuǎn)程協(xié)作

到目前為止你已經(jīng)在自己舒適而私密的家中維護(hù)著一個(gè) Git 倉(cāng)庫(kù),但如何與其他人協(xié)同工作呢?

有好幾種不同的方式來(lái)設(shè)置 Git 以便讓多人可以同時(shí)在一個(gè)項(xiàng)目上工作,所以首先我們要克隆倉(cāng)庫(kù),你可能已經(jīng)從某人的 Git 服務(wù)器或 GitHub 主頁(yè),或在局域網(wǎng)中的共享存儲(chǔ)上克隆了一個(gè)倉(cāng)庫(kù)。

工作在私人倉(cāng)庫(kù)下和共享倉(cāng)庫(kù)下唯一不同的是你需要把你的改變 push 到別人的倉(cāng)庫(kù)。我們把工作的倉(cāng)庫(kù)稱之為本地(local)倉(cāng)庫(kù),其他倉(cāng)庫(kù)稱為遠(yuǎn)程(remote)倉(cāng)庫(kù)。

當(dāng)你以讀寫的方式克隆一個(gè)倉(cāng)庫(kù)時(shí),克隆的倉(cāng)庫(kù)會(huì)繼承自被稱為 origin 的遠(yuǎn)程庫(kù)。你可以看看你的克隆倉(cāng)庫(kù)的遠(yuǎn)程倉(cāng)庫(kù):

  1. $ git remote --verbose 
  2. origin  seth@example.com:~/myproject.Git (fetch
  3. origin  seth@example.com:~/myproject.Git (push) 

有一個(gè) origin 遠(yuǎn)程庫(kù)非常有用,因?yàn)樗挟惖貍浞莸墓δ埽⒃试S其他人在該項(xiàng)目上工作。

如果克隆沒(méi)有繼承 origin 遠(yuǎn)程庫(kù),或者如果你選擇以后再添加,可以使用 git remote 命令:

  1. $ git remote add seth@example.com:~/myproject.Git 

如果你修改了文件,想把它們發(fā)到有讀寫權(quán)限的 origin 遠(yuǎn)程庫(kù),使用 git push。***次推送改變,必須也發(fā)送分支信息。不直接在主分支上工作是一個(gè)很好的做法,除非你被要求這樣做:

  1. $ git checkout -b seth-dev 
  2. $ git add exciting-new-file.txt 
  3. $ git commit -m 'first push to remote' 
  4. $ git push -u origin HEAD 

它會(huì)推送你當(dāng)前的位置(HEAD)及其存在的分支到遠(yuǎn)程。當(dāng)推送過(guò)一次后,以后每次推送可以不使用 -u 選項(xiàng):

  1. $ git add another-file.txt 
  2. $ git commit -m 'another push to remote' 
  3. $ git push origin HEAD 

合并分支

當(dāng)你工作在一個(gè) Git 倉(cāng)庫(kù)時(shí),你可以合并任意測(cè)試分支到主分支。當(dāng)團(tuán)隊(duì)協(xié)作時(shí),你可能想在將它們合并到主分支之前檢查他們的改變:

  1. $ git checkout contributor 
  2. $ git pull 
  3. $ less blah.txt  ### 檢查改變的文件 
  4. $ git checkout master 
  5. $ git merge contributor 

如果你正在使用 GitHub 或 GitLab 以及類似的東西,這個(gè)過(guò)程是不同的。但克隆項(xiàng)目并把它作為你自己的倉(cāng)庫(kù)都是相似的。你可以在本地工作,將改變提交到你的 GitHub 或 GitLab 帳戶,而不用其它人的許可,因?yàn)檫@些庫(kù)是你自己的。

如果你想要讓你克隆的倉(cāng)庫(kù)接受你的改變,需要?jiǎng)?chuàng)建了一個(gè)拉取請(qǐng)求(pull request),它使用 Web 服務(wù)的后端發(fā)送補(bǔ)丁到真正的擁有者,并允許他們審查和拉取你的改變。

克隆一個(gè)項(xiàng)目通常是在 Web 服務(wù)端完成的,它和使用 Git 命令來(lái)管理項(xiàng)目是類似的,甚至推送的過(guò)程也是。然后它返回到 Web 服務(wù)打開(kāi)一個(gè)拉取請(qǐng)求,工作就完成了。

下一部分我們將整合一些有用的插件到 Git 中來(lái)幫你輕松的完成日常工作。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2020-08-29 19:28:08

版本回退命令代碼

2019-01-21 09:28:32

版本命令程序員

2016-08-02 11:06:34

開(kāi)源Linux版本控制

2016-08-03 15:32:50

GitLinux開(kāi)源

2025-05-26 09:52:42

IDEAGit分支

2018-12-07 12:30:16

CVSGit版本控制

2020-11-23 07:27:22

Git Flow

2023-06-19 15:38:38

JavaScripAPI

2009-06-22 10:29:11

集成測(cè)試Spring

2016-08-23 10:39:38

GitLinux開(kāi)源

2011-01-26 09:09:06

版本控制系統(tǒng)GitLinux

2016-12-19 14:59:55

Git二進(jìn)制管理

2016-09-23 20:04:26

2015-08-20 10:42:17

2011-08-01 10:41:59

Xcode 條件編譯

2016-08-05 12:58:44

GitLinux開(kāi)源

2022-12-07 07:43:21

2021-03-24 09:30:02

Jupyter not單元測(cè)試代碼

2023-10-18 18:31:04

SQL查詢數(shù)據(jù)

2023-08-02 08:02:30

Redis數(shù)據(jù)原生方法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美精品在线免费观看 | 久久精彩视频 | 色视频在线播放 | 91久久精品一区二区三区 | 九色一区 | 狠狠操天天干 | 人人九九精 | 国产98色在线 | 日韩 | 午夜精品一区二区三区在线视频 | 成人免费在线视频 | 欧美日韩国产一区二区三区 | 国产小u女发育末成年 | 激情久久av一区av二区av三区 | 日韩精品一二三 | 亚洲精品日韩综合观看成人91 | 日本不卡一区二区三区在线观看 | 国产男人的天堂 | 亚洲精品国产成人 | 国产你懂的在线观看 | gogo肉体亚洲高清在线视 | 毛片在线视频 | 亚洲免费人成在线视频观看 | 精品一区二区av | 天天想天天干 | 国产精品视频偷伦精品视频 | www日本在线播放 | 深夜福利亚洲 | 中文字幕精品一区二区三区精品 | 高清黄色| 中文字幕亚洲视频 | 1级黄色大片 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 国产精品一码二码三码在线 | 蜜桃免费av| 免费久久久 | www性色| 国产一区二区三区精品久久久 | 毛片a区| 欧美精品tv | 欧美aaa级| 国产丝袜av |