zoukankan      html  css  js  c++  java
  • 使用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
    
  • 相关阅读:
    influxdb 使用
    【刷题】如何查找最长链
    学习中的开源框架和系统
    常见错误总结
    开发者必备网站
    计算机基础知识以及常用业务场景
    (1)、hive框架搭建和架构简介
    hadoop安装和配置
    linux基础
    UML学习目录
  • 原文地址:https://www.cnblogs.com/youyoui/p/10406712.html
Copyright © 2011-2022 走看看