[TOC]
git pull
如何強(qiáng)制覆蓋本地文件
error: Untracked working tree file 'public/images/icon.gif' would be overwritten by merge.
使用git reset
命令
重要提示:如果您有任何本地更改考杉,將會(huì)丟失。無論是否有--hard選項(xiàng)咽袜,任何未被推送的本地提交都將丟失枕稀。
# 從遠(yuǎn)程下載最新的,而不嘗試合并或rebase任何東西
git fetch -all
# 將主分支重置為您剛剛獲取的內(nèi)容
git reset --hard origin/<branch_name>
在重置之前可以通過從master創(chuàng)建一個(gè)分支來維護(hù)當(dāng)前的本地提交:
git checkout master
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard origin/master
在此之后凹联,所有舊的提交都將保存在new-branch-to-save-current-commits中哆档。然而瓜浸,沒有提交的更改(即使staged)將會(huì)丟失。確保存儲(chǔ)和提交任何你需要的東西插佛。
Git如何同時(shí)刪除本地分支和遠(yuǎn)程分支
刪除分支使用--delete
(-d
)選項(xiàng)雇寇,命令如下:
git push --delete <remote_name> <branch_name>
git branch -d <branch_name>
# 只刪除本地分支
git branch -d branch_name
git branch -D branch_name
其中:
- <remote_name>遠(yuǎn)程分支名稱一般是origin蚌铜,比如:origin/dev
-
-d
選項(xiàng)的全寫是--delete
嫩海,當(dāng)前分支必須從上游分支完全合并才能刪除 -
-D
選項(xiàng)的全寫是--delete --force
,強(qiáng)制刪除造壮,無論當(dāng)前分支的合并狀態(tài)如何
另外根據(jù)Git版本的不同骂束,還可以選用下面的命令
# Git v1.7.0以上版本
git push <remote_name> --delete <branch_name>
# 上面的命令可簡(jiǎn)寫
git push <remote_name> :<branch_name>
# Git v2.8.0以上版本可以用 -d`
git push <remote_name> --d <branch_name>
Git如何撤銷最近一次提交
Git撤銷本地的最后一次提交
如果你只是在本地進(jìn)行提交commit
成箫,還沒有推送push
到遠(yuǎn)程蹬昌,可以使用git reset HEAD~
:
-
git reset --soft HEAD~
保留提交之后的本地文件修改 -
git reset --hard HEAD~
不保留提交之后的本地文件修改 -
git reset --soft HEAD~1
和git reset --soft HEAD~
等效
# 弄錯(cuò)了一次錯(cuò)誤提交
git commit -m '錯(cuò)誤提交'
# 撤銷本地提交
git reset HEAD~
# 修改文件后繼續(xù)提交
git add ...
git commit -c ORIG_HEAD
使用git reset HEAD~
命令會(huì)使工作樹(磁盤上文件的狀態(tài))保持不變,但會(huì)撤銷本地提交栖榨,并使您提交的更改保持未保存狀態(tài)(這些更改將顯示為“未提交的更改”明刷,您需要在提交之前再次添加它們)。
另外還需要注意愚争,如果你想保留上次提交之后本地的文件修改挤聘,使用--soft
Git撤銷最近一次遠(yuǎn)程提交
如果你已經(jīng)把提交推送到遠(yuǎn)程,只能本地回滾然后再次提交鞍陨。
回滾到上一次的命令使用git revert HEAD
从隆,對(duì)文件重新修改后提交到遠(yuǎn)程即可。
如何修改提交信息和文件
修改本地提交信息(未推送到遠(yuǎn)程)
如果你在本地進(jìn)行了一次提交commit砾脑,這個(gè)提交還未推送到遠(yuǎn)程艾杏,但是這次提交你忘了寫message或者少提交了文件。
一方面可以使用上面介紹的方法撤銷這次提交畅铭,修改之后再提交一次。
另一方面你可以使用git commit --amend -m '新的提交信息'
提交一次假残。
修改遠(yuǎn)程提交信息
如果想要修改的提交信息已經(jīng)被推送到遠(yuǎn)程炉擅,可以使用git push -f
強(qiáng)制提交覆蓋:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
另外也可以使用git rebase
命令,該命令可以修改所有的提交信息(即使不是最后一次提交)眶俩。
# X 表示落后于HEAD的提交次數(shù)快鱼,如果不填默認(rèn)為1,即上一次提交
git rebase -i HEAD~X
Git如何在提交之前撤銷git add
如果你不小心把某個(gè)配置文件進(jìn)行git add
线罕,可以使用git reset
進(jìn)行撤銷窃判。
git reset <file>
git reset HEAD <file>
git rm --cached <added_file_to_undo>
# git add錯(cuò)了一個(gè)配置文件
git add db.conf
# 撤銷上一次git add
git reset db.conf
Git如何重命令本地分支
使用git branch -m
即可,其中-m
表示move
(mv):
# 重命名本地分支
git branch -m <oldname> <newname>
# 如果重命名的是當(dāng)前分支
git branch -m <newname>
如何在Git中添加一個(gè)空文件夾
在Git中添加空文件夾并不會(huì)被提交窿凤,如果要提交一個(gè)空文件夾該怎么做呢跨蟹?
可以在空文件夾中創(chuàng)建一個(gè).gitignorefile
文件或者.gitkeep
文件窗轩,并提交即可。
如何在Git中從遠(yuǎn)程分支克隆到本地
如果只是克隆Git項(xiàng)目痢艺,默認(rèn)本地是master分支,可以使用git checkout
克隆其他遠(yuǎn)程分支:
# 克隆git項(xiàng)目
git clone <Git_Project>
# 克隆遠(yuǎn)程分支到本地
git checkout <branch_name>
# 拉取遠(yuǎn)程分支色建,創(chuàng)建本地分支并切換到新分支
git checkout -b <local_branch> origin/<remote_branch>
# 只克隆遠(yuǎn)程分支
git checkout origin/<remote_branch>
Git如何將本地分支推送到遠(yuǎn)程
在Git 1.7.0版本以后舌缤,可以像下面一樣操作:
# 在本地新建分支
git checkout -b <branch>
# 將本地分支推送到遠(yuǎn)程
git push -u origin <branch>
如何在Git中丟棄掉當(dāng)前工作分支下所有untracked的文件
untracked的文件即沒有git add
的文件,可以按照下面的步驟進(jìn)行操作陵吸,該操作一定要確保這些文件確實(shí)不再需要:
# 先檢查當(dāng)前的Untracked文件列表
git status
# 丟棄所有 untracked 文件
git checkout -- .
# 只丟棄特定的 untracked 文件
git checkout - path/to/file
# 另外 git clean 命令也可以用于清理
git clean -df
Git如何從遠(yuǎn)程拉取并強(qiáng)制覆蓋本地文件
當(dāng)我們本地修改了很多測(cè)試代碼時(shí)壮虫,需要全部丟棄掉這些修改,或者需要更新到最新的遠(yuǎn)程分支剩拢。
# 從遠(yuǎn)程拉取所有修改
git fetch --all
# 強(qiáng)制重置到遠(yuǎn)程分支
git reset --hard origin/<branch_name>
當(dāng)我們本地因?yàn)閬y七八糟的修改導(dǎo)致無法提交饶唤、合并或者沖突,但是又不關(guān)心本地的修改時(shí),可用下面的萬能命令:
git reset --hard
git pull
Git提交代碼時(shí)發(fā)生沖突不能合入
這種沖突發(fā)生在Web端對(duì)分支進(jìn)行了操作魏保,但是本地端沒有git pull
同步代碼就修改提交谓罗,導(dǎo)致兩部分代碼沖突。按照下面的步驟來檩咱,比如當(dāng)前分支uusama
刻蚯,推送到遠(yuǎn)程合并時(shí)出現(xiàn)沖突。
按照下面的步驟來炊汹,比如當(dāng)前分支uusama
讨便,推送到遠(yuǎn)程合并時(shí)出現(xiàn)沖突。
# Step1. 在本地倉庫中, 更新并合并代碼
git fetch origin
git rebase origin/uusama
# Step2. 依據(jù)提示分別打開沖突的文件, 逐一修改沖突代碼
# Step3. 所有沖突都修改完畢后, 提交修改的代碼
git add -u
git rebase --continue
# Step4. 提交代碼到遠(yuǎn)程分支 uusama
git push origin HEAD:refs/for/uusama
其中使用HEAD:refs/for/uusama
表示代碼需要CODE review才可以合入伴找。如果不用CODE review废菱,可直接使用git push origin uusama
抖誉。
Git兩個(gè)分支之間出現(xiàn)沖突如何解決
比如當(dāng)前有一個(gè)共有的開發(fā)分支dev
(基準(zhǔn)分支)穆役,個(gè)人分支uusama
兩個(gè)分支出現(xiàn)沖突耿币。
# 拉取分支需要解決沖突的分支
git checkout uusama
# 從基準(zhǔn)分支合并
git merge --no-ff origin/dev
git add .
git commit -m "合并分支解決沖突"
# 提交代碼到遠(yuǎn)程分支 uusama
git push origin HEAD:refs/for/uusama