1. 程式人生 > >撤銷git add/commit 與更新從別人倉庫克隆的專案

撤銷git add/commit 與更新從別人倉庫克隆的專案

1.撤銷 git add

撤銷操作

git status #先看一下add 中被add了哪些檔案 
git reset HEAD #如果後面什麼都不跟的話 就是上一次add 裡面的全部撤銷了 
git reset HEAD XXX/abc.python #就是對某個檔案進行撤銷了

演示:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..."
to unstage) new file: teset.py $ git reset HEAD teset.py $ git status On branch master Your branch is up-to-date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) teset.py # 提示你可以用 git add新增,說明撤銷成功

2.撤銷 git commit

git
reset --soft HEAD^ # 這樣就成功的撤銷了你的commit(未撤銷add)

注意:
a. 僅僅是撤回commit操作,您寫的程式碼仍然保留(工作空間的程式碼還在)。
b. HEAD^的意思是上一個版本,也可以寫成HEAD1,如果你進行了2次commit,想都撤回,可以使用HEAD2
c. --mixed:不刪除工作空間改動程式碼,撤銷commit,並且撤銷git add 操作
d. --soft: 不刪除工作空間改動程式碼,撤銷commit,不撤銷git add .
e. --hard: 刪除工作空間改動程式碼,撤銷commit,撤銷git add .完成這個操作後,就恢復到了上一次的commit狀態。

演示:

# ------------提交 commit----------------
$ git add teset.py
$ git commit -m 'test'

[master 9ff1ee5] test
 1 file changed, 8 insertions(+)
 create mode 100644 teset.py

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 comm

# ------------撤銷 commit----------------
$ git reset --soft HEAD^
$ git status

On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   teset.py

順便說一下,如果commit註釋寫錯了,只是想改一下注釋,只需要:git commit --amend此時會進入預設vim編輯器,修改註釋完畢後儲存就好了。

3.更新從別人倉庫克隆的專案

背景:在github上克隆了別人的程式碼,當別人更新後,我們需要再將其從github上更新到自己的本地倉庫。

第一步:首先使用git remote add upstream 原作者倉庫把別人的倉庫新增到你的上游遠端,通常命名為upstream。(這部操作只需一次即可,以後再次更新時不用);
第二步:使用git remote -v就可以看到一個origin是你的,另外一個upstream是原作者的;
第三步:使用git fetch upstream去拉原作者的倉庫更新;
第四步:使用git checkout master切換到自己的master
第五步:使用git merge upstream/master合併到你自己本地的master,這樣自己本地的程式碼就得到更新了