使用Git過程中經常會遇到的問題


git pull如何強制覆蓋本地文件

error: Untracked working tree file 'public/images/icon.gif' would be overwritten by merge.

使用git reset命令
重要提示:如果您有任何本地更改,將會丟失。無論是否有--hard選項,任何未被推送的本地提交都將丟失。

# 從遠程下載最新的,而不嘗試合並或rebase任何東西
git fetch -all

# 將主分支重置為您剛剛獲取的內容
git reset --hard origin/<branch_name>

在重置之前可以通過從master創建一個分支來維護當前的本地提交:

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)將會丟失。確保存儲和提交任何你需要的東西。

Git如何同時刪除本地分支和遠程分支

刪除分支使用--delete(-d)選項,命令如下:

git push --delete <remote_name> <branch_name>
git branch -d <branch_name>

# 只刪除本地分支
git branch -d branch_name
git branch -D branch_name

其中:

  • <remote_name>遠程分支名稱一般是origin,比如:origin/dev
  • -d選項的全寫是--delete,當前分支必須從上游分支完全合並才能刪除
  • -D選項的全寫是--delete --force,強制刪除,無論當前分支的合並狀態如何

另外根據Git版本的不同,還可以選用下面的命令

# Git v1.7.0以上版本
git push <remote_name> --delete <branch_name>
# 上面的命令可簡寫
git push <remote_name> :<branch_name>

# Git v2.8.0以上版本可以用 -d`
git push <remote_name> --d <branch_name>

Git如何撤銷最近一次提交

Git撤銷本地的最后一次提交

如果你只是在本地進行提交commit,還沒有推送push到遠程,可以使用git reset HEAD~

  • git reset --soft HEAD~ 保留提交之后的本地文件修改
  • git reset --hard HEAD~ 不保留提交之后的本地文件修改
  • git reset --soft HEAD~1git reset --soft HEAD~ 等效
# 弄錯了一次錯誤提交
git commit -m '錯誤提交'

# 撤銷本地提交
git reset HEAD~

# 修改文件后繼續提交
git add ...
git commit -c ORIG_HEAD

使用git reset HEAD~命令會使工作樹(磁盤上文件的狀態)保持不變,但會撤銷本地提交,並使您提交的更改保持未保存狀態(這些更改將顯示為“未提交的更改”,您需要在提交之前再次添加它們)。

另外還需要注意,如果你想保留上次提交之后本地的文件修改,使用--soft

Git撤銷最近一次遠程提交

如果你已經把提交推送到遠程,只能本地回滾然后再次提交。

回滾到上一次的命令使用git revert HEAD,對文件重新修改后提交到遠程即可。

如何修改提交信息和文件

修改本地提交信息(未推送到遠程)

如果你在本地進行了一次提交commit,這個提交還未推送到遠程,但是這次提交你忘了寫message或者少提交了文件。

一方面可以使用上面介紹的方法撤銷這次提交,修改之后再提交一次。
另一方面你可以使用git commit --amend -m '新的提交信息'提交一次。

修改遠程提交信息

如果想要修改的提交信息已經被推送到遠程,可以使用git push -f強制提交覆蓋:

git push <remote> <branch> --force
# Or
git push <remote> <branch> -f

另外也可以使用git rebase命令,該命令可以修改所有的提交信息(即使不是最后一次提交)。

# X 表示落后於HEAD的提交次數,如果不填默認為1,即上一次提交
git rebase -i HEAD~X

Git如何在提交之前撤銷git add

如果你不小心把某個配置文件進行git add,可以使用git reset進行撤銷。

  • git reset <file>
  • git reset HEAD <file>
  • git rm --cached <added_file_to_undo>
# git add錯了一個配置文件
git add db.conf

# 撤銷上一次git add
git reset db.conf

Git如何重命令本地分支

使用git branch -m 即可,其中-m表示move(mv):

# 重命名本地分支
git branch -m <oldname> <newname>

# 如果重命名的是當前分支
git branch -m <newname>

如何在Git中添加一個空文件夾

在Git中添加空文件夾並不會被提交,如果要提交一個空文件夾該怎么做呢?

可以在空文件夾中創建一個.gitignorefile文件或者.gitkeep文件,並提交即可。

如何在Git中從遠程分支克隆到本地

如果只是克隆Git項目,默認本地是master分支,可以使用git checkout克隆其他遠程分支:

# 克隆git項目
git clone <Git_Project>

# 克隆遠程分支到本地
git checkout <branch_name>

# 拉取遠程分支,創建本地分支並切換到新分支
git checkout -b <local_branch> origin/<remote_branch>

# 只克隆遠程分支
git checkout origin/<remote_branch>

Git如何將本地分支推送到遠程

在Git 1.7.0版本以后,可以像下面一樣操作:

# 在本地新建分支
git checkout -b <branch>
# 將本地分支推送到遠程
git push -u origin <branch>

如何在Git中丟棄掉當前工作分支下所有untracked的文件

untracked的文件即沒有git add的文件,可以按照下面的步驟進行操作,該操作一定要確保這些文件確實不再需要:

# 先檢查當前的Untracked文件列表
git status

# 丟棄所有 untracked 文件
git checkout -- .

# 只丟棄特定的 untracked 文件 
git checkout - path/to/file

# 另外 git clean 命令也可以用於清理
git clean -df

Git如何從遠程拉取並強制覆蓋本地文件

當我們本地修改了很多測試代碼時,需要全部丟棄掉這些修改,或者需要更新到最新的遠程分支。

# 從遠程拉取所有修改
git fetch --all

# 強制重置到遠程分支
git reset --hard origin/<branch_name>

當我們本地因為亂七八糟的修改導致無法提交、合並或者沖突,但是又不關心本地的修改時,可用下面的萬能命令:

git reset --hard
git pull

Git提交代碼時發生沖突不能合入

這種沖突發生在Web端對分支進行了操作,但是本地端沒有git pull同步代碼就修改提交,導致兩部分代碼沖突。按照下面的步驟來,比如當前分支uusama,推送到遠程合並時出現沖突。

按照下面的步驟來,比如當前分支uusama,推送到遠程合並時出現沖突。

# Step1. 在本地倉庫中, 更新並合並代碼
git fetch origin
git rebase origin/uusama
# Step2. 依據提示分別打開沖突的文件, 逐一修改沖突代碼
# Step3. 所有沖突都修改完畢后, 提交修改的代碼
git add -u
git rebase --continue
# Step4. 提交代碼到遠程分支 uusama
git push origin HEAD:refs/for/uusama

其中使用HEAD:refs/for/uusama表示代碼需要CODE review才可以合入。如果不用CODE review,可直接使用git push origin uusama

Git兩個分支之間出現沖突如何解決

比如當前有一個共有的開發分支dev(基准分支),個人分支uusama兩個分支出現沖突。

# 拉取分支需要解決沖突的分支
git checkout uusama
# 從基准分支合並
git merge --no-ff origin/dev
git add .
git commit -m "合並分支解決沖突"
# 提交代碼到遠程分支 uusama
git push origin HEAD:refs/for/uusama


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM