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~1
和git 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