1. 程式人生 > >iOS - Git 撤消操作(分布式版本控制系統)

iOS - Git 撤消操作(分布式版本控制系統)

獨立 update stat 並且 應該 嘗試 文本編輯 也會 after

1、覆蓋提交

  • 有時候我們提交完了才發現漏掉了幾個文件沒有添加,或者提交信息寫錯了。此時,可以運行帶有 --amend 選項的提交命令嘗試重新提交。

    $ git commit --amend
    
    或
    
    # git commit --amend -m [提交內容說明]
    $ git commit --amend -m "Amend commit dsc"
    • 這個命令會將暫存區中的文件提交。如果自上次提交以來你還未做任何修改(例如,在上次提交後馬上執行了此命令),那麽快照會保持不變,而你所修改的只是提交信息。

    • 文本編輯器啟動後,可以看到之前的提交信息。編輯後保存會覆蓋原來的提交信息。

  • 例如,你提交後發現忘記了暫存某些需要的修改,可以像下面這樣操作。

    $ git commit -m 'initial commit'
    
    $ git add forgotten_file
    
    $ git commit --amend    
    • 最終你只會有一個提交 - 第二次提交將代替第一次提交的結果。

2、取消暫存的文件

  • 接下來的兩個小節演示如何操作暫存區域與工作目錄中已修改的文件。這些命令在修改文件狀態的同時,也會提示如何撤消操作。

  • 例如,你已經修改了兩個文件並且想要將它們作為兩次獨立的修改提交,但是卻意外地輸入了 git add * 暫存了它們兩個。如何只取消暫存兩個中的一個呢?git status

    命令提示了你。

    $ git add *
    
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        renamed:    README.md -> README
        modified:   CONTRIBUTING.md
  • 在 “Changes to be committed” 文字正下方,提示使用 git reset HEAD <file>... 來取消暫存。所以,我們可以這樣來取消暫存 CONTRIBUTING.md 文件。

    # git reset HEAD [文件名]
    $ git reset HEAD CONTRIBUTING.md
    Unstaged changes after reset:
    M   CONTRIBUTING.md
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        renamed:    README.md -> README
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   CONTRIBUTING.md
  • 雖然在調用時加上 --hard 選項可以令 git reset 成為一個危險的命令(可能導致工作目錄中所有當前進度丟失!),但本例中工作目錄內的文件並不會被修改。不加選項地調用 git reset 並不危險 — 它只會修改暫存區域。

3、撤消對文件的修改

  • 如果你並不想保留對 CONTRIBUTING.md 文件的修改怎麽辦?你該如何方便地撤消修改 - 將它還原成上次提交時的樣子(或者剛克隆完的樣子,或者剛把它放入工作目錄時的樣子)?幸運的是,git status 也告訴了你應該如何做。在最後一個例子中,未暫存區域是這樣。

    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   CONTRIBUTING.md    
  • 它非常清楚地告訴了你如何撤消之前所做的修改。

    # git checkout -- [文件名]
    $ git checkout -- CONTRIBUTING.md
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        renamed:    README.md -> README
  • git checkout -- [file] 是一個危險的命令。對那個文件做的任何修改都會消失 - 你只是拷貝了另一個文件來覆蓋它。除非你確實清楚不想要那個文件了,否則不要使用這個命令。

iOS - Git 撤消操作(分布式版本控制系統)