使用Git過程中繞不過的幾個(gè)問題

[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~1git 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市十性,隨后出現(xiàn)的幾起案子塑悼,更是在濱河造成了極大的恐慌,老刑警劉巖霞势,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斑鸦,死亡現(xiàn)場(chǎng)離奇詭異巷屿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘱巾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門旬昭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闲擦,你說我怎么就攤上這事场梆。” “怎么了寞忿?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵顶岸,是天一觀的道長(zhǎng)叫编。 經(jīng)常有香客問我搓逾,道長(zhǎng)杯拐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任朗兵,我火速辦了婚禮顶滩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盐欺。我一直安慰自己仅醇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著甲抖,像睡著了一般心铃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柱衔,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天愉棱,我揣著相機(jī)與錄音奔滑,去河邊找鬼。 笑死朋其,一個(gè)胖子當(dāng)著我的面吹牛脆炎,可吹牛的內(nèi)容都是我干的氓辣。 我是一名探鬼主播钞啸,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼入蛆!你這毒婦竟也來了硕勿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤扼褪,失蹤者是張志新(化名)和其女友劉穎粱栖,沒想到半個(gè)月后闹究,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幔崖,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赏寇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年嗅定,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了用踩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碎乃,死狀恐怖惠奸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情证九,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布呀页,位于F島的核電站拥坛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏丸氛。R本人自食惡果不足惜著摔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一谍咆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摹察,春花似錦、人聲如沸黄娘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羔巢。三九已至,卻和暖如春竿秆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歉备。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工蕾羊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人龟再。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓利凑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親牌借。 傳聞我的和親對(duì)象是個(gè)殘疾皇子割按,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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