使用Git过程中绕不过的几个问题

[TOC]

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容