Git使用總結(jié)

排版凌亂扶关,即用即補玫锋,一些常用的問題操作都匯總到這里了疗韵。

英文文檔
https://git-scm.com/docs/
https://www.atlassian.com/git/tutorials/


Git倉庫壓縮

git reflog expire --all --expire=now
git gc --prune=now --aggressive

顯示單一文件修改記錄

git log -p test.html


徹底刪除文件,github根據(jù)不同情況給出不同方法:

使用git filter-branch或者BFG Repo-Cleaner


查看commit修改內(nèi)容

git show #CommitID

git如何刪除本地所有未提交的更改
git 有什么命令可以清除工作區(qū)的文件


git處理沖突
Resolving a merge conflict from the command line

以github官方提供例子:沖突部分在<<<>>>之間

  • <<<之后榆骚,===之前,為目前分支內(nèi)容
  • ===之后煌集,>>>之前妓肢,為待合并分支內(nèi)容
    接下來就是處理<<<>>>之間需要保留的內(nèi)容,執(zhí)行git add -A保存,之后提交即可苫纤。
the number of planets are
<<<<<<< HEAD
nine
=======
eight
>>>>>>> branch-a

Git提交到多個遠程倉庫
github-help

git remote add origin https://github.com/*user*/*repo*.git

//提交多個倉庫
git push --all

pull request流程
鏈接這里

git rp流程-知乎


單一文件回退到某個版本:
Reset or revert a specific file to a specific revision using Git?

# Assuming the commit you want is abcde
git checkout abcde file/to/restore

強制遠程分支覆蓋本地分支
How to force “git pull” to overwrite local files?

git fetch --all
git reset --hard origin/master
git reset --hard origin/your_branch

git標簽

# git列表
git tag

# 打標簽
git tag v0.1.1

# 補打標簽
git tag v0.1.1 6224937

# 創(chuàng)建輕量標簽-輕量標簽是指向提交對象的引用(暫時沒用到)
git tag v0.1.2-light

# 附注標簽則是倉庫中的一個獨立對象碉钠。建議使用附注標簽
git tag -a v0.1.2 -m "0.1.2版本備注"

# 給指定的commit打標簽(即補打標簽)
git tag -a v0.1.1 9fbc3d0

# 切換標簽
git checkou [tagname]

# 刪除標簽
git tag -d v0.1.2

# 刪除遠程標簽(需要先刪除本地標簽)
git push origin :refs/tags/v0.9

# 標簽發(fā)布
git push origin v0.1.2 // 提交單一標簽
git push origin --tags //提交所有標簽

# 查看標簽內(nèi)容
git show v1.2.5

刪除所有tags
remove all tag

# Delete local tags.
git tag -l | xargs git tag -d
# Fetch remote tags.
git fetch
# Delete remote tags.
git tag -l | xargs -n 1 git push --delete origin
# Delete local tasg.
git tag -l | xargs git tag -d

強行替換某一分支內(nèi)容
git@Osc當中怎么把一個分支的內(nèi)容完全替換成另一個分支的內(nèi)容呢?

怎么說呢……[@Zoker](http://my.oschina.net/silentboy) 的答案確實能解決你的問題卷拘,但是你本地的master分支還是舊的喊废,通常來說應該在本地做好修改再去push到遠端,所以我推薦如下操作
git checkout master
git reset --hard develop  //先將本地的master分支重置成develop
git push origin master --force //再推送到遠程倉庫

強行覆蓋遠程分支方法

git push origin master --force

git回滾遠程版本后強制提交

git push -f

安全方法見Git回滾遠程版本

中文阮一峰
Git遠程操作詳解

本地倉庫名與遠程分支名字不同栗弟,如何提交
辦法How can I push a local Git branch to a remote with a different name easily?
如不設(shè)置污筷,每次提交需要按照以下方式

// 本地:遠程
git push origin HEAD:liuyk-2016-7-27

git 2.0 默認git push為simple
Warning: push.default is unset; its implicit value is changing in Git 2.0
Git 2.0 更改 push default 為‘simple’

stream:‘matching’ 參數(shù)是 Git 1.x 的默認行為,其意是如果你執(zhí)行 git push 但沒有指定分支乍赫,它將 push 所有你本地的分支到遠程倉庫中對應匹配的分支瓣蛀。

simple:而 Git 2.x 默認的是 simple陆蟆,意味著執(zhí)行 git push 沒有指定分支時,只有當前分支會被 push 到你使用 git pull 獲取的代碼惋增。

stream:只關(guān)聯(lián)git pull本分支獲取的代碼叠殷,此處是解決辦法

查看所有別名

git config -l

查看所有的alias:List Git aliases

$ git config --get-regexp alias

取消工作區(qū)修改

git checkout -- .

修改遠程倉庫地址
修改倉庫名后,是否需要更改clone地址诈皿。
官方給出的是可以不用換溪猿,但是還是強烈建議替換地址
Renaming a repository

In addition to redirecting web traffic, all git clone, git fetch, or git push operations targeting the previous location will continue to function as if made on the new location. However, to reduce confusion, we strongly recommend updating any existing local clones to point to the new repository URL. You can do this by using git remote on the command line:

git remote set-url origin *new_url*

查看分支關(guān)聯(lián)

git branch -vv

本地新建分支與遠程分支關(guān)聯(lián)

git checkout -b release origin/release

fetch,merge

git fetch //默認獲取所有分支最新
git fetch origin master // 拉取遠程origin master分支最新
git log -p master..origin/master // 比較不同
git merge origin/master// 合并

查看單個文件修改記錄


git log --patch -- [filename] //每次修改的內(nèi)容
// 以上簡寫為
git log -p [filename]
git log -- [filename] //修改歷史

顯示哪些文件被改動

git log --name-status//僅顯示哪些文件被改動

恢復單個文件到某個記錄節(jié)點

git checkout <commit> <file>//會將文件存入緩存區(qū)
git commit -m "~~~~"

git初始化設(shè)置,個人信息

git config --global user.name "your_username"
git config --global user.email "your_email@domain.com"

初始化本地倉庫

git init

加載文件至臨時緩存

git add . //加載所有文件
git add my_file, my_other_file //加載制定文件夾

取消緩存

git reset

撤銷

git checkout -- filename撤銷提交 //撤銷工作區(qū)file文件的修改,或者誤刪也可以找回
git checkout filename //測試也可撤銷文件在工作區(qū)的修改
git reset HEAD readme.txt //撤銷暫存區(qū)readme.txt
git reset //撤銷暫存區(qū)的修改

撤銷工作區(qū)untrack文件

git clean -f  [options: filename] //直接撤銷untrack文件
git clean -nf //撤銷前查看提示
git clean -f xx.txt //刪除xx.txt文件

git clean -fd //連同文件夾一塊撤銷刪除
git clean -nfd//撤銷前查看提示

刪除文件(不好用纫塌,刪除)

git rm file

創(chuàng)建切換分支

git checkout -b new_feature // 創(chuàng)建切換分支
git branch new_feature  //創(chuàng)建分支
git checkout new_feature //切換分支

git checkout -b local_branch origin/remote_branch //用法舒服

參考鏈接Clone all remote branches with Git?

合并分支,切換到最終的分支诊县,然后執(zhí)行

git merge new_feature //合并原new_feature上的內(nèi)容

刪除分支

git branch -d new_feature

查看不同

$ git diff --name-status master分支..branchName其他分支 //查看分支不同
$ [Git](http://lib.csdn.net/base/28) diff 工作區(qū)與提交任務(提交暫存區(qū),stage)中相比的差異
$ git diff HEAD 工作區(qū)和HEAD(當前工作分支)相比的差異
$ git diff --cached (或--staged)提交暫存區(qū)(提交任務措左,stage)和版本庫中文件的差異

參考鏈接Showing which files have changed between two revisions
Git學習筆記(三) Git暫存區(qū)

回滾

git log //查看提交記錄
git log --pretty=oneline //one line to show log
git checkout 085bbxx //回滾

推送到遠程

git remote add origin https://your_username@bitbucket.org/your_username/name_of_remote_repository.git //第一次
git push origin master

別名

git config --global alias.c 'commit -m'
git config --global alias.c 'commit -m'
git config --global alias.co 'checkout'
git config --global alias.cob 'checkout -b'
git config --global alias.br 'branch'
git config --global alias.m 'merge'
git config --global alias.a 'add .'
git config --global alias.s 'status'
git config --global alias.dbr 'branch -d'

實質(zhì)上依痊,通過--global配置的,均在主目錄下有一個.gitconfig配置文件怎披,可以通過修改來更改刪除查看alias
參考鏈接配置別名

其他方法
1) 創(chuàng)建一個文件 ~/.gitconfig
2)在文件中寫入如下
[alias]
st = status
ci = commit
co = checkout
br = branch
unstage = reset HEAD --
last = log -1 HEAD
參考鏈接 git alias 設(shè)置

版本回退(mac操作錯誤)
在Git中胸嘁,用HEAD表示當前版本,上一個版本就是HEAD凉逛,上上一個版本就是HEAD^
回退到上一個版本

git reset --hard HEAD^

穿梭到某個版本

git reset --hard VersionID

查看之前紀錄

git reflog

刪除分支

git branch -d [branch-name]

不同

#  顯示暫存區(qū)和工作區(qū)的差異
$ git diff
# 顯示暫存區(qū)和上一個commit的差異
$ git diff --cached [file]

增加一個新的遠程倉庫(本地操作遠程)

# 增加一個新的遠程倉庫性宏,并命名
$ git remote add [shortname] [url]

遠程倉庫改名

git remote rename <原主機名> <新主機名>

查找.ssh文件

/Users/liwei/.ssh

生成.ssh

$ ssh-keygen -t rsa -C "youremail@example.com"

本地連接遠程空倉庫

$ git remote add origin git@github.com:michaelliao/learngit.git //關(guān)聯(lián)
$ git push -u origin master //我們第一次推送master分支時,加上了-u參數(shù)状飞,Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支毫胜,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令诬辈。

查看遠程庫的信息

$ git remote

新建遠程分支

#方法:直接提交到新分支
git push origin '新分支名'
#完整的命令應如下:
git push origin '本地分支名':'遠程分支名'

#本地與遠程關(guān)聯(lián)酵使,這樣以后直接輸入git push即可
git push origin '遠程分支名'

參考鏈接How do you create a remote Git branch?

有關(guān)遠程分支關(guān)聯(lián)疑問

git branch --set-upstream my_branch origin/my_branch

鏈接Why do I need to do --set-upstream all the time?

刪除遠程分支

git push origin :dev //刪除遠程dev分支

常用操作

git代碼庫回滾-刪除遠程倉庫分支

遠程分支
git checkout -b [分支名] [遠程名]/[分支名]。如果你有 1.6.2 以上版本的 Git焙糟,還可以用 --track
選項簡化:
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.Switched to a new branch 'serverfix'

要為本地分支設(shè)定不同于遠程分支的名字口渔,只需在第一個版本的命令里換個名字:

$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.Switched to a new branch 'sf'

git協(xié)作流程
Git 協(xié)作流程

github release
release

目前還不清楚的問題:
git rest與git checkout log區(qū)別
git diff更多使用說明
git pull 和git fetch區(qū)別,如何一次獲得所有倉庫的更新并合并

參考鏈接
15 分鐘學會使用 Git 和遠程代碼庫
Book
廖雪峰
常用 Git 命令清單
git命令大全

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市穿撮,隨后出現(xiàn)的幾起案子缺脉,更是在濱河造成了極大的恐慌,老刑警劉巖悦穿,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攻礼,死亡現(xiàn)場離奇詭異,居然都是意外死亡咧党,警方通過查閱死者的電腦和手機秘蛔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門翰萨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泰演,“玉大人,你說我怎么就攤上這事∏乱” “怎么了缺虐?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵蹂季,是天一觀的道長麻汰。 經(jīng)常有香客問我,道長叠赐,這世上最難降的妖魔是什么欲账? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮芭概,結(jié)果婚禮上赛不,老公的妹妹穿的比我還像新娘。我一直安慰自己罢洲,他們只是感情好踢故,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惹苗,像睡著了一般殿较。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桩蓉,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天淋纲,我揣著相機與錄音,去河邊找鬼院究。 笑死洽瞬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的儡首。 我是一名探鬼主播片任,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔬胯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起位他,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氛濒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鹅髓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舞竿,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年窿冯,在試婚紗的時候發(fā)現(xiàn)自己被綠了骗奖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖执桌,靈堂內(nèi)的尸體忽然破棺而出鄙皇,到底是詐尸還是另有隱情,我是刑警寧澤仰挣,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布伴逸,位于F島的核電站,受9級特大地震影響膘壶,放射性物質(zhì)發(fā)生泄漏错蝴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一颓芭、第九天 我趴在偏房一處隱蔽的房頂上張望顷锰。 院中可真熱鬧,春花似錦亡问、人聲如沸官紫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽万矾。三九已至,卻和暖如春慎框,著一層夾襖步出監(jiān)牢的瞬間良狈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工笨枯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留薪丁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓馅精,卻偏偏與公主長得像严嗜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洲敢,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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