Git

跟蹤工作的變化以實(shí)現(xiàn)可重復(fù)性和協(xié)作。 ## Intuition 無(wú)論是單獨(dú)工作還是與團(tuán)隊(duì)一起工作,重要的是有一個(gè)系統(tǒng)來(lái)跟蹤項(xiàng)目的變化杠巡,這樣就可以恢復(fù)到以前的版本,這樣其他人就可以重現(xiàn)transformers工作并為之做出貢獻(xiàn)雇寇。[Git](https://git-scm.com/)是一個(gè)分布式版本控制系統(tǒng)氢拥,可以讓做到這一點(diǎn)。Git 在transformers計(jì)算機(jī)上本地運(yùn)行锨侯,它會(huì)跟蹤transformers文件及其歷史記錄嫩海。為了與他人協(xié)作,可以使用遠(yuǎn)程主機(jī)([GitHub](https://github.com/)囚痴、[GitLab](https://gitlab.com/)叁怪、[BitBucket](https://bitbucket.org/)等)來(lái)托管transformers文件及其歷史記錄。將使用 git 將transformers本地更改推送到遠(yuǎn)程主機(jī)或從遠(yuǎn)程主機(jī)拉取其他人的更改深滚。 > Git 傳統(tǒng)上用于存儲(chǔ)小于 100MB 的小文件(腳本奕谭、自述文件等)并對(duì)其進(jìn)行版本控制涣觉,但是,仍然可以使用指向 blob 存儲(chǔ)的文本指針對(duì)大型工件(數(shù)據(jù)集血柳、模型權(quán)重等)進(jìn)行版本控制官册。這些指針將包含assert所在位置、特定內(nèi)容/版本(例如通過(guò)哈希)等信息难捌。將在[版本控制](https://franztao.github.io/2022/10/8/versioning/)課程中看到這一點(diǎn)膝宁,將創(chuàng)建一個(gè)指向特定版本的指針transformers數(shù)據(jù)集和模型。 ## 設(shè)置 ### 初始化git ![混帳環(huán)境](https://upload-images.jianshu.io/upload_images/27840083-aa25bbc9545f888d.png) 初始化一個(gè)本地存儲(chǔ)庫(kù)(`.git`目錄)來(lái)跟蹤transformers文件: `git init` ``` Initialized empty Git repository in /Users/goku/Documents/madewithml/MLOps/.git/ ``` 可以看到哪些文件未被跟蹤或尚未提交: `git status` ``` On branch main No commits yet Untracked files: (use "git add ..." to include in what will be committed) .flake8 .vscode/ Makefile ... ``` ### .gitignore 可以看到有一些不想推送到遠(yuǎn)程主機(jī)的文件根吁,比如transformers虛擬環(huán)境员淫、日志、大數(shù)據(jù)文件等婴栽÷郑可以創(chuàng)建一個(gè)`.gitignore`文件來(lái)確保不簽入這些文件。 `touch .gitignore` 將以下文件添加到文件中: ``` # Data logs/ stores/ data/ # Packaging venv/ *.egg-info/ __pycache__/ # Misc .DS_Store ``` 現(xiàn)在愚争,也將添加`data`到transformers`.gitignore`文件中映皆,但這意味著其他人在從transformers遠(yuǎn)程主機(jī)上拉取時(shí)將無(wú)法生成相同的數(shù)據(jù)assert。[為了解決這個(gè)問(wèn)題轰枝,將在transformers版本控制課程](https://franztao.github.io/2022/10/8/versioning/)中推送指向數(shù)據(jù)文件的指針捅彻,以便數(shù)據(jù)也可以完全按照在本地?fù)碛械姆绞竭M(jìn)行復(fù)制。 > Tip > > 查看項(xiàng)目的[.gitignore](https://github.com/GokuMohandas/mlops-course/blob/main/.gitignore)以獲得更完整的示例鞍陨,其中還包括許多通常不想推送到遠(yuǎn)程存儲(chǔ)庫(kù)的其他系統(tǒng)工件步淹。transformers完整`.gitignore`文件基于 GitHub 的[Python 模板](https://github.com/github/gitignore/blob/main/Python.gitignore),使用的是[Mac](https://github.com/github/gitignore/blob/main/Global/macOS.gitignore)诚撵,因此也添加了相關(guān)的[全局](https://github.com/github/gitignore/tree/main/Global)文件名缭裆。 如果`git status`現(xiàn)在運(yùn)行,不應(yīng)該再看到在文件中定義的`.gitignore`文件寿烟。 ### Add to stage 接下來(lái)澈驼,將transformers工作從工作目錄添加到暫存區(qū)。 - 可以一次添加一個(gè)文件: `git add ` - 可以一次添加所有文件: `git add .` 現(xiàn)在運(yùn)行`git status`將向展示所有暫存文件: `git status` ``` On branch main No commits yet Changes to be committed: (use "git rm --cached ..." to unstage) new file: .flake8 new file: .gitignore new file: Makefile ... ``` ### 承諾回購(gòu) 現(xiàn)在準(zhǔn)備將暫存區(qū)中的文件提交到本地存儲(chǔ)庫(kù)筛武。默認(rèn)分支(項(xiàng)目的一個(gè)版本)將被稱為`main`. `git commit -m "added project files"` ``` [main (root-commit) 704d99c] added project files 47 files changed, 50651 insertions(+) create mode 100644 .flake8 create mode 100644 .gitignore create mode 100644 Makefile ... ``` 提交需要一條消息缝其,指示發(fā)生了哪些更改。如果需要徘六,可以`git commit --amend`用來(lái)編輯提交消息内边。如果進(jìn)行`git status`檢查,會(huì)發(fā)現(xiàn)暫存區(qū)沒(méi)有其他內(nèi)容可以提交待锈。 `git status` ``` On branch main nothing to commit, working tree clean ``` ### 推送到遠(yuǎn)程 現(xiàn)在已準(zhǔn)備好將更新從本地存儲(chǔ)庫(kù)推送到遠(yuǎn)程存儲(chǔ)庫(kù)漠其。[首先在GitHub](https://github.com/)?(或任何其他遠(yuǎn)程存儲(chǔ)庫(kù))上創(chuàng)建一個(gè)帳戶,然后按照[說(shuō)明](https://github.com/new)創(chuàng)建一個(gè)遠(yuǎn)程存儲(chǔ)庫(kù)(它可以是私有的或公共的)。在transformers本地存儲(chǔ)庫(kù)中辉懒,將設(shè)置transformers用戶名和電子郵件憑據(jù)阳惹,以便可以將更改從本地存儲(chǔ)庫(kù)推送到遠(yuǎn)程存儲(chǔ)庫(kù)。 ``` # Set credentials via terminal git config --global user.name git config --global user.email ``` 可以像這樣快速驗(yàn)證是否設(shè)置了正確的憑據(jù): ``` # Check credentials git config --global user.name git config --global user.email ``` 接下來(lái)眶俩,需要在本地和遠(yuǎn)程存儲(chǔ)庫(kù)之間建立連接: ``` # Push to remote git remote add origin https://github.com//.git git push -u origin main # pushing the contents of our local repo to the remote repo # origin signifies the remote repository ``` ## Developing 現(xiàn)在準(zhǔn)備好開(kāi)始添加到transformers項(xiàng)目并提交更改莹汤。 ### cloning 如果(或其他人)還沒(méi)有設(shè)置本地存儲(chǔ)庫(kù)并連接到遠(yuǎn)程主機(jī),可以使用cloning命令: `git clone ` 也可以cloning存儲(chǔ)庫(kù)的特定分支: `git clone -b ` - ``是遠(yuǎn)程倉(cāng)庫(kù)的位置(例如 https://github.com/GokuMohandas/mlops-course)颠印。 - ``是要將項(xiàng)目cloning到的本地目錄的名稱纲岭。 ### 創(chuàng)建分支 當(dāng)想要添加或更改某些內(nèi)容時(shí),例如添加功能线罕、修復(fù)錯(cuò)誤等止潮,在開(kāi)發(fā)之前創(chuàng)建一個(gè)單獨(dú)的分支始終是[最佳實(shí)踐。](https://franztao.github.io/2022/10/26/Git/#best-practices)這在與團(tuán)隊(duì)合作時(shí)尤為重要钞楼,這樣就可以在討論和審查后將transformers工作干凈利落地合并到`main`分支機(jī)構(gòu)中喇闸。 將從創(chuàng)建一個(gè)新分支開(kāi)始: `git checkout -b ` 可以使用以下命令查看創(chuàng)建的所有分支,其中 * 表示當(dāng)前的分支: `git branch` ``` * convnet main ``` 可以使用以下方法輕松地在現(xiàn)有分支之間切換: `git checkout ` 進(jìn)入分支后询件,可以對(duì)項(xiàng)目進(jìn)行更改并提交這些更改燃乍。 ``` git add . git commit -m "update model to a convnet" git push origin convnet ``` 請(qǐng)注意,正在將此分支推送到transformers遠(yuǎn)程存儲(chǔ)庫(kù)宛琅,該存儲(chǔ)庫(kù)尚不存在刻蟹,因此 GitHub 將相應(yīng)地創(chuàng)建它。 ### 拉取請(qǐng)求(PR) 當(dāng)將新分支推送到遠(yuǎn)程存儲(chǔ)庫(kù)時(shí)嘿辟,需要?jiǎng)?chuàng)建一個(gè)拉取請(qǐng)求 (PR) 以與另一個(gè)分支(例如`main`本例中的分支)合并舆瘪。將transformers工作與另一個(gè)分支(例如 main)合并時(shí),它被稱為拉取請(qǐng)求红伦,因?yàn)檎?qǐng)求該分支*拉取*提交的工作英古。可以使用此處概述的步驟創(chuàng)建拉取請(qǐng)求:[創(chuàng)建拉取請(qǐng)求](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request)昙读。 ![在github上合并](https://upload-images.jianshu.io/upload_images/27840083-38f17aa0d7f5eb75.png) > note > > 可以使用 git CLI 命令合并分支和解決沖突召调,但最好使用在線界面,因?yàn)榭梢暂p松地將更改可視化箕戳,與隊(duì)友進(jìn)行討論等某残。 > > ``` > # Merge via CLI > git push origin convnet > git checkout main > git merge convnet > git push origin main > > ``` ### Pull 一旦接受了拉取請(qǐng)求国撵,transformers`main`分支現(xiàn)在就更新了transformers更改陵吸。然而,更新只發(fā)生在遠(yuǎn)程存儲(chǔ)庫(kù)上介牙,所以也應(yīng)該將這些更改拉到transformers本地`main`分支壮虫。 ``` git checkout main git pull origin main ``` ### Delete branches 一旦完成了一個(gè)分支的工作,就可以刪除它以防止transformers存儲(chǔ)庫(kù)混亂∏羲疲可以使用以下命令輕松刪除分支的本地和遠(yuǎn)程版本: ``` # Delete branches git branch -d # local git push origin --delete # remote ``` ## 合作 到目前為止剩拢,集成迭代開(kāi)發(fā)的工作流程非常順利,但在協(xié)作環(huán)境中饶唤,可能需要解決沖突徐伐。假設(shè)有兩個(gè)分支(`a`和`b`)是從`main`分支創(chuàng)建的。這是要嘗試模擬的內(nèi)容: 1. 開(kāi)發(fā)人員 A 和 B 分叉`main`分支進(jìn)行一些更改 2. 開(kāi)發(fā)人員 A 進(jìn)行更改并向`main`分支提交 PR募狂。 3. 開(kāi)發(fā)者 B 對(duì)與開(kāi)發(fā)者 A 相同的行進(jìn)行更改办素,并向 提交 PR?`main`。 4. 現(xiàn)在有合并沖突祸穷,因?yàn)閮蓚€(gè)開(kāi)發(fā)人員都更改了同一行性穿。 5. 選擇要保留的代碼版本并解決沖突。 `main`當(dāng)嘗試合并第二個(gè) PR 時(shí)雷滚,必須解決這個(gè)新 PR 與分支中已經(jīng)存在的沖突需曾。 ![解決github上的沖突](https://upload-images.jianshu.io/upload_images/27840083-eb40e1a4084ba00e.png) `main`可以通過(guò)選擇保留哪些內(nèi)容(與分支合并的當(dāng)前內(nèi)容`a`或本`b`分支)并刪除另一個(gè)內(nèi)容來(lái)解決沖突。然后可以成功合并 PR 并更新本地的`main`分支祈远。 ``` <<<<<< BRANCH_A ====== >>>>>> BRANCH_B ``` 一旦沖突得到解決并且合并了 PR呆万,就可以更新transformers本地存儲(chǔ)庫(kù)以反映這些決定。 ``` git checkout main git pull origin main ``` > note > > 只是有沖突绊含,因?yàn)檫@兩個(gè)分支都是從該`main`分支的先前版本派生出來(lái)的桑嘶,并且它們碰巧都更改了相同的內(nèi)容。如果先創(chuàng)建一個(gè)分支躬充,然后在創(chuàng)建第二個(gè)分支之前更新主分支逃顶,就不會(huì)有任何沖突。但在協(xié)作環(huán)境中充甚,不同的開(kāi)發(fā)人員可能隨時(shí)分叉出相同版本的分支以政。 > 需要了解的一些更重要的命令包括[rebase](https://git-scm.com/docs/git-rebase)和[stash](https://git-scm.com/docs/git-stash)。 ## 檢查 Git 允許在許多不同的層次上檢查工作的當(dāng)前和以前的狀態(tài)伴找。讓探索最常用的命令盈蛮。 ### Status 已經(jīng)多次使用 status 命令,因?yàn)樗鼘?duì)于快速查看工作樹(shù)的狀態(tài)非常有用技矮。 ``` # Status git status git status -s # short format ``` ### 日志 如果想查看所有提交的日志抖誉,可以使用 log 命令。也可以通過(guò)在 Git 在線界面上檢查特定的分支歷史來(lái)做同樣的事情衰倦。 ``` # Log git log git log --oneline # short version ``` `704d99c (HEAD -> main) added project files` > 提交 ID 的長(zhǎng)度為 40 個(gè)字符袒炉,但可以用前幾個(gè)字符來(lái)表示它們(Git SHA 的默認(rèn)值是七位數(shù)字)。如果有歧義樊零,Git 會(huì)通知我磁,可以簡(jiǎn)單地添加更多的提交 ID孽文。 ### 差異 如果想知道兩次提交之間的區(qū)別,可以使用 diff 命令夺艰。 ``` # Diff git diff # all changes between current working tree and previous commit git diff # diff b/w two commits git diff : : # file diff b/w two commits ``` ``` diff --git a/.gitignore b/.gitignore index 288973d..028aa13 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ # Data logs/ stores/ -data/ ``` ### Blame 最有用的檢查命令之一是 blame芋哭,它允許查看文件中每一行的提交。 ``` # Blame git blame git blame -L 1,3 # blame for lines 1 and 3 ``` ## Time travel 有時(shí)可能做了一些希望可以改變的事情郁副。在生活中并不總是可以做到這一點(diǎn)减牺,但在 Git 的世界里,它是存谎! ### 恢復(fù) 有時(shí)可能只想撤消添加或暫存文件烹植,可以使用*restore*命令輕松完成。 ``` # Restore git restore -- # will undo any changes git restore --stage # will remove from stage (won't undo changes) ``` ### 重置 現(xiàn)在愕贡,如果已經(jīng)提交但還沒(méi)有推送到遠(yuǎn)程草雕,可以通過(guò)將分支指針移動(dòng)到該提交來(lái)重置到之前的提交。請(qǐng)注意固以,這將撤消自上次提交以來(lái)所做的所有更改墩虹。 ``` # Reset git reset # or HEAD^ ``` > `HEAD`是引用上一次提交的快速方法。兩者`HEAD`和任何先前的提交 ID 都可以帶有一個(gè)`^`或`~`符號(hào)作為相對(duì)引用憨琳。`^`n 指的是提交的第 n 個(gè)父級(jí)诫钓,而`~`n指的是第n個(gè)祖父母。當(dāng)然篙螟,總是可以明確地使用提交 ID菌湃,但是這些短手可以派上用場(chǎng),無(wú)需`git log`檢索提交 ID 即可進(jìn)行快速檢查遍略。 ### 恢復(fù) 但是可以通過(guò)添加一個(gè)新的提交來(lái)恢復(fù)某些以前的提交來(lái)繼續(xù)前進(jìn)惧所,而不是將分支指針移動(dòng)到之前的提交。 ``` # Revert git revert ... # rollback specific commits git revert .. # range ``` ### Checkout 有時(shí)可能想暫時(shí)切換回以前的提交绪杏,只是為了探索或提交一些更改下愈。最好在單獨(dú)的分支中執(zhí)行此操作,如果想保存更改蕾久,需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的 PR势似。請(qǐng)注意,如果您確實(shí)檢查了以前的提交并提交了 PR僧著,則可以覆蓋兩者之間的提交履因。 ``` # Checkout git checkout -b ``` ## 最佳實(shí)踐 有很多不同的工作可以與 git 一起工作,有時(shí)當(dāng)其他開(kāi)發(fā)人員遵循不同的做法時(shí)盹愚,它會(huì)很快變得不守規(guī)矩栅迄。在處理提交和分支時(shí),這里有一些被廣泛接受的最佳實(shí)踐杯拐。 ### 提交 - 經(jīng)常提交霞篡,這樣每個(gè)提交都有一個(gè)明確的關(guān)聯(lián)更改,您可以批準(zhǔn)/回滾端逼。 - 如果在推送到遠(yuǎn)程主機(jī)之前有多個(gè)提交朗兵,請(qǐng)嘗試[壓縮提交。](https://franztao.github.io/2022/10/26/Git/#squash) - 避免整體提交(即使您經(jīng)常存儲(chǔ)和變基)顶滩,因?yàn)樗鼤?huì)導(dǎo)致許多組件崩潰并造成代碼審查的噩夢(mèng)余掖。 - 將有意義的消息附加到提交中,以便開(kāi)發(fā)人員確切地知道 PR 需要什么礁鲁。 - 使用標(biāo)簽來(lái)表示有意義且穩(wěn)定的應(yīng)用程序版本盐欺。 `# Tags git tag -a v0.1 -m "initial release"` - 不要?jiǎng)h除提交歷史(重置),而是使用[revert](https://franztao.github.io/2022/10/26/Git/#revert)回滾并提供推理仅醇。 ### 分支機(jī)構(gòu) - 在處理功能冗美、錯(cuò)誤等時(shí)創(chuàng)建分支,因?yàn)檫@使得添加和恢復(fù)到`main`分支變得非常容易析二。 - 避免使用神秘的分支名稱粉洼。 - 將您的分支維護(hù)`main`為始終有效的“演示就緒”分支。 - [用規(guī)則](https://docs.github.com/en/github/administering-a-repository/managing-a-branch-protection-rule)保護(hù)分支機(jī)構(gòu)(尤其是`main`分支機(jī)構(gòu))叶摄。 ### 標(biāo)簽 利用 git[標(biāo)簽](https://git-scm.com/book/en/v2/Git-Basics-Tagging)標(biāo)記重要的發(fā)布提交属韧。可以通過(guò)終端或在線遠(yuǎn)程界面創(chuàng)建標(biāo)簽蛤吓,這也可以對(duì)以前的提交完成(以防忘記)宵喂。 ``` # Tags git tag # view all existing tags git tag -a -m "SGD" # create a tag git checkout -b # checkout a specific tag git tag -d # delete local tag git push origin --delete # delete remote tag git fetch --all --tags # fetch all tags from remote ``` > 標(biāo)簽名稱通常遵循版本命名約定,例如`v1.4.2`數(shù)字從左到右表示主要会傲、次要和錯(cuò)誤更改锅棕。 ___ 更多干貨,第一時(shí)間更新在以下微信公眾號(hào): ![](https://raw.githubusercontent.com/franztao/blog_picture/main/marktext/2022-12-03-12-49-27-weixin.png) 您的一點(diǎn)點(diǎn)支持淌山,是我后續(xù)更多的創(chuàng)造和貢獻(xiàn) ![](https://upload-images.jianshu.io/upload_images/27840083-1a46262416ac4e2b.png) 轉(zhuǎn)載到請(qǐng)包括本文地址 更詳細(xì)的轉(zhuǎn)載事宜請(qǐng)參考[文章如何轉(zhuǎn)載/引用](https://franztao.github.io/2022/12/04/%E6%96%87%E7%AB%A0%E5%A6%82%E4%BD%95%E8%BD%AC%E8%BD%BD%E5%92%8C%E5%BC%95%E7%94%A8/) 本文主體源自以下鏈接: ``` @article{madewithml, author = {Goku Mohandas}, title = { Made With ML }, howpublished = {\url{https://madewithml.com/}}, year = {2022} } ``` 本文由[mdnice](https://mdnice.com/?platform=6)多平臺(tái)發(fā)布
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哲戚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子艾岂,更是在濱河造成了極大的恐慌顺少,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件王浴,死亡現(xiàn)場(chǎng)離奇詭異脆炎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)氓辣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門秒裕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人钞啸,你說(shuō)我怎么就攤上這事几蜻±耍” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵梭稚,是天一觀的道長(zhǎng)颖低。 經(jīng)常有香客問(wèn)我,道長(zhǎng)弧烤,這世上最難降的妖魔是什么忱屑? 我笑而不...
    開(kāi)封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮暇昂,結(jié)果婚禮上莺戒,老公的妹妹穿的比我還像新娘。我一直安慰自己急波,他們只是感情好从铲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著澄暮,像睡著了一般食店。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赏寇,一...
    開(kāi)封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天吉嫩,我揣著相機(jī)與錄音,去河邊找鬼嗅定。 笑死自娩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的渠退。 我是一名探鬼主播忙迁,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碎乃!你這毒婦竟也來(lái)了姊扔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梅誓,失蹤者是張志新(化名)和其女友劉穎恰梢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體梗掰,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嵌言,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了及穗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摧茴。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖埂陆,靈堂內(nèi)的尸體忽然破棺而出苛白,到底是詐尸還是另有隱情娃豹,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布购裙,位于F島的核電站懂版,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缓窜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一谍咆、第九天 我趴在偏房一處隱蔽的房頂上張望禾锤。 院中可真熱鬧,春花似錦摹察、人聲如沸恩掷。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)黄娘。三九已至,卻和暖如春克滴,著一層夾襖步出監(jiān)牢的瞬間逼争,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工劝赔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留誓焦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓怀酷,卻偏偏與公主長(zhǎng)得像论悴,于是被迫代替她去往敵國(guó)和親涨岁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容