日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Git 常用命令 // Jin Liu

 mzsm 2015-05-26

從設計轉型學開發(fā)的第一天起,老大只教我一件事,使用 Git。
比起一上來就給我各種任務寫 HTML/CSS/JS 調各種 Bug, 讓我熟練掌握 Git 這件事至今我都非常感激。
毫無疑問地說,Git 是當今編程學習里最基本的必備技能。

我記得很清楚,當時我問他,假如全世界的軟件你只能保留一個在電腦,你的選擇是什么?
Git,老大很肯定地回答,當時我很不解。
3年后,如果現(xiàn)在要我回答這個問題,我會給出同樣的答案。

Git 的強大一本書都不足以全部說明,更何況一篇博客。
本文記錄了我 3 年來使用 Git 最頻繁的命令,很負責地說,學會這些基本也就能快樂地體會到 Git 的樂趣了 (持續(xù)整理更新ing)。

Hope you enjoy!

1. 超實用 Alias

1
2
3
4
5
6
7
8
alias g='git'
alias gb='git branch'
alias gco='git checkout'
alias gcmsg='git commit -m'
alias gamend='git commit --amend -C HEAD'
alias gst='git status'
alias log='git log --oneline --graph --decorate --color=always'
alias logg='git log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative'

2. 取回遠端 master 與本地 master 分支合并

1
2
3
4
5
6
7
gco master

g fetch --all 或者
g fetch origin master

g reset --hard origin/master(本地沒有修改,所以完全覆蓋也沒關系) 或者
g rebase origin/master(本地有修改還沒push)

3. 推送分支到遠端

假設現(xiàn)在所在的分支是import,指定推送到遠端分支liujin-import

1
g push origin import:liujin-import

假如遠端的 liujin-import 分支已經不需要,可以直接覆蓋掉

1
g push -f origin import:liujin-import

4. 追加文件到某個 commit

有時候修完某功能并提交了 commit 之后才發(fā)現(xiàn)還有一點小修改,這時候又不想再提交一個commit,可以追加這個文件到前一個commit,步驟如下:

1
2
git add 你要追加修改的文件
git commit --amend -C HEAD 或者 gamend

5. 查找包含某文件的 commit

1
2
git log 文件路徑
git show commit_id

或者

1
git log --follow filename(絕對路徑)

Ref: List all commit for a specific file

6. 把一個 commit 分拆為兩個 commit

老大常說要養(yǎng)成一個小改動對應一個commit的習慣,但是有時候寫得太亂懶得去分割就把很多改動做成了一個commit,這樣子增加了以后維護的難度,所以要把一個 commit 分拆為多個 commit 怎么辦呢?

  • 首先把你要分拆的 file reset 了:
1
2
git reset HEAD~1 path/to/file 
# This doesn't delete your changes to path/to/file
  • 接著修改當前這個 commit 的 message,命令是:
1
2
git commit --amend -v 
# -v參數(shù)是打開editor編輯
  • 然后就可以把 reset 出來那個 file 新建一個 commit,命令是:
1
git commit -v path/to/file

這樣就把一個 commit 分拆為兩個啦,^_^

7. 刪除某些 commit

1
git rebase -i HEAD~10

8. 追加修改到之前某個 commit

假如 gst 發(fā)現(xiàn)已經有文件被修改,這時候需要把修改暫存起來。

1
git stash

接著找到你需要追加修改的那個commit id,如4b739bb

1
2
g rebase 4b739bb~ -i 或者
g rebase -i HEAD~5 #列出最近5個commit

這時候會自動打開編輯器,把你需要修改的 commit 前面的 pick 改成 edit,保存,關閉編輯器,這時候會回到終端,再輸入:

1
g stash pop

把暫存的修改讀出來,然后做修改,g add .,最后

1
g rebase --continue

9. 查找含有特定關鍵字的 commit

  • git log --grep
    最基本的用法
  • git log --grep=frotz --grep=nitfol --since=1.month
    查找一個月以內commit log message里含有 frotz 或者 nitfol 的 commits

  • git log --grep=frotz --author=Linus
    查找指定作者

  • git grep -l -e frotz --and -e nitfol
    查找同一行含有 frotznitfol 的文件

  • git grep -l --all-match -e frotz -e nitfol
    查找文件里面含有 frotznitfol 的文件(不局限于同一行)

10. 清空 git working copy 還沒追蹤的文件

  • git clean -f

  • git clean -f -d
    如果還想刪除目錄

  • git clean -f -X
    如果只是想刪除忽略的文件

  • git clean -f -x
    如果想刪除忽略和非忽略的文件

11. 清理本地倉庫

長時間做一個項目,經常需要 git fetch,這樣做每次都會拉回遠端的全部分支。
即使遠端有些分支已經刪除,但是運行git branch -a還是會顯示已刪除的分支,
長時間下來這個列表就會很長很長,這時候就需要清理一下本地的倉庫了:

1
2
git remote prune origin
# `prune`會刪除任何不存在于遠端倉庫的分支,這樣運行 `git branch -a`命令的時候頓時就清靜了

12. 創(chuàng)建追蹤遠端分支的本地分支

1
2
gb dev origin/r1-dev
#Branch dev set up to track remote branch r1-dev from origin.

13. 分支移動

1
2
g branch -f master HEAD~3
# 把 master 分支強制移到 HEAD 前面第三個 commit

14. Revert一個 Merge

git revert -m 1 M -> W

1
2
3
---o---o---o---M---x---x---W
/
---A---B

15. 獲取短的 commit hash

1
git rev-parse --short HEAD

16. commit 了以后才記起來忘了創(chuàng)建 .gitignore, 垃圾文件都已經提交

比如說一個nodejs項目,一開始的時候就忘記了創(chuàng)建.gitnore文件忽略掉node_modules的內容,所以其中的內容就已經被提交了。

即使緊接著你在.gitignore加了一行node_modules, 已經被提交的文件是不會自動刪除的。

這時候你就需要做的就是:

1
2
3
git rm --cached path/to/ignored
#nodejs案例就是
git rm -r --cached node_modules

17. 提交所有被刪除的文件

1
$ git add -u

This tells git to automatically stage tracked files — including deleting the previously tracked files.

If you are using git 2.0, you should now use:

1
$ git add -u :/

Warning, starting git 2.0 (mid 2013), this will stage files on the whole working tree.
If you want to stage file only under your current path with that working tree, then you need to use

1
$ git add -u .

See “Difference of “git add -A” and “git add .””.

Ref: StackOverflow

18. 撤銷上一次 git add . 操作

這種情況通常是因為忘記添加.gitignore文件,
或者一時手快把一些非必要的文件(如node_modules)跟蹤了, 解決辦法:

You can use git reset. This will ‘unstage’ all the files you’ve added after your last commit.
If you want to unstage only some files, use

1
git reset -- <file 1> <file 2> <file n>

Also it’s possible to unstage some of the changes in files by using

1
git reset -p

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多