使用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~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
使用Git过程中经常会遇到的问题的更多相关文章
- 学习Git过程中常用命令的总结
复制远程库git clone git@github.com:Hconly/learngit.git在GitHub上,可以任意Fork开源仓库:自己拥有Fork后的仓库的读写权限:可以推送pull re ...
- 开发与测试整体过程中的Git分支merge流程
开发与测试整体过程中的Git分支merge流程 Git分支merge之开发流程 首先在Gitlab上有个仓库存储着原始的项目代码,其中包含一个叫master的分支.然后可能按功能进行分配,由不同的开发 ...
- Git使用过程中出现项目文件无法签入Source Control的情况
在VS中使用Git进行项目source control的过程中,有些文件不在source control之下,右键点击时,也找不到Undo, Commit命令 无法把他们签入进Source Contr ...
- git submodule 使用过程中遇到的问题
git submodule 使用过程中遇到的问题 资源文件 原.gitmodules文件的内容如下: [submodule "Submodules/FFmpegWrapper"] ...
- [Git]07 如何在提交过程中忽略某些文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表.通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等.我们可以创建一个名为 .gitignor ...
- git rebase 过程中遇到冲突该怎么解决?
在执行git rebase 过程中经常遇到问题,此时有点慌,一般如何解决呢? 1.先将本地的冲突手动解决 2.执行下面命令 git add . git rebase --contine //继续re ...
- git提交过程中遇到的 index.lock 问题导致无法提交的解决方法
在提交代码的过程中,可能会遇到下面的问题: fatal: Unable to create 'C:/programLists/zzw-q1/.git/index.lock': File exists. ...
- 记一次删除Git记录中的大文件的过程
app/test/target/ #查看大文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/ ...
- git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
每次git提交,都会有一个parent指针,指向上一次的commit , 如果合并,master就和hotfix河道一起,就直接删除hotfix就OK 此时,虽然操作一样,大底层实现不一样 ...
随机推荐
- Effective C++ 读书笔记(13-32)
条款一十三:以对象管理资源 1.把资源放进对象内,我们便可依赖C++的“析构函数自动调用机制“确保资源被释放. 2.auto_ptr是个”类指针对象“,也就是所谓”智能指针“,其析构函数自动对其所指对 ...
- ElasticSearch本地调测环境构建
ElasicSearch版本:6.0.0:https://github.com/elastic/elasticsearch.git 1:安装JVM(JVM1.8以上) 2:安装gradle(3.3以上 ...
- springboot集成rabbitmq(实战)
RabbitMQ简介RabbitMQ使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现(AMQP的主要特征是面向消息.队列.路由.可靠性.安全).支持多种客户端,如:Python.Ru ...
- 杨老师课堂_VBA学习教程之根据部门列创建工作表
课件下载 : 方式1:本节课件下载地址:链接: https://pan.baidu.com/s/1rf5pRmZ95fjVbz70KYi6Aw 密码: q9yk 方式2:或点击此处下载 效果预览图: ...
- 数组、ArrayList、List、LinkedList的区别
一.数组 数组在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. 1.一维数组 声明一个数组: ]; 初始化一个数组: ] { , , , , }; //定长 声明并初始化: ...
- RabbitMQ (二)工作队列
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37620057 本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与 ...
- 玩转SSH--Hibernate(三)---手动修改数据库,前台查询信息不同步更新问题解决方法
在用hibernate时遇到一个挺纠结的问题,就是我在手动修改数据库的信息后,前台页面查询到的信息还是之前的结果,一开始以为是缓存的问题,经过多次修改和在网上查询资料,最终发现可能是hibernate ...
- Kafka的CommitFailedException异常
一.含义 CommitFailedException异常:位移提交失败时候抛出的异常.通常该异常被抛出时还会携带这样的一段话: Commit cannot be completed since the ...
- Hibernate Annotation _List/Map
// Student.java 实体类 package com.tao.pojo; import java.util.List; public class Student { private int ...
- redis结合自定义注解实现基于方法的注解缓存,及托底缓存的实现
本次分享如何使用redis结合自定义注解实现基于方法的注解缓存,及托底缓存的实现思路 现在的互联网公司大多数都是以Redis作为缓存,使用缓存的优点就不赘述了,写这篇文章的目的就是想帮助同学们如 ...