git 攻略

git 攻略

大纲

git命令通用选项

大多数git命令都适用的选项列表如下:

-v, --verbose         show hash and subject, give twice for upstream branch
-q, --quiet           suppress informational messages
-t, --track           set up tracking mode (see git-pull(1))
--set-upstream        change upstream info
-u, --set-upstream-to <upstream> change the upstream info
--unset-upstream      Unset the upstream info
--color[=<when>]      use colored output
-r, --remotes         act on remote-tracking branches
--contains <commit>   print only branches that contain the commit
--abbrev[=<n>]        use <n> digits to display SHA-1s

常用命令

git help

使用方式如下,其中command_name 具体使用的时候替换成要查询的命令名。

git help <command_name>

git help 命令的输出结构(以输入git help help为例):

NAME(命令名称)
    git-help - 显示git有关的帮助信息

SYNOPSIS(梗概)(相同的option选项会放在同一个[]中,许多命令提供了简写形式)
    git help [-a|--all] [-g|--guide] [-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]

DESCRIPTION(描述)
    help命令使用的一些描述(包括如何使用、使用注意事项以及如何能最高效的得到你想要的结果)

OPTION(选项)
    对具体的option选项(即SYNOPSIS中中括号展示出来的选项)具体的解释

CONFIGURATION VARIABLES
    关于该命令的可选配置(即该命令在.gitconfig文件中可以进行的一些配置操作)

首次使用,可以输入git help,该命令会展示一些使用git的总体帮助信息,展示如下:

git命令使用的不同场景:

创建一个git工作区 (万里长征的第一步)
   clone      克隆分支
   init       创建一个新的git仓库或者重新初始化一个已经存在的git仓库(放心,在一个已经存在的git仓库中执行git init命令是安全的,执行该命令的主要原因是为了快速挑选出新近添加的模版或者使用惊醒仓库移动)

针对当前分支的操作 (详情请看:git help everyday)
   add        将文件添加到git的索引中(方便提交)
   mv         将文件(目录等)进行移动或重命名
   reset      将当前分支的HEAD(最新提交)Reset到指定的commit
   rm         将文件从工作树和工作索引中移除

检查历史及状态的相关命令(详情请看: git help revisions)
   bisect     Find by binary search the change that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     查询、创建或删除分支
   checkout   切换分支或者恢复当前工作区的文件
   commit     将更改记录到仓库,及本地提交
   diff       比较不同提交(分支和工作目录)之间的差异等
   merge      将开发记录合并
   rebase     将本地提交放在提交记录的顶部(及记录栈栈顶)具体可查看git rebase 中的示例
   tag        创建、查询、删除或核对一个用GPG协议签名的Tag

collaborate (see also: git help workflows)
   fetch      拉取更新,不合并
   pull       拉取更新并合并
   push       推送更新到相关分支

git help -a  列出所有git命令(方便查看有哪些git命令)
git help -g  列出所有概念性的指导(很有用)

git add

git add支持以通配符形式的添加文件

git add .       添加当前目录所有改变(修改、删除、新增)的文件信息到索引库(常用)
git add -u .    添加当前目录所有修改、删除的文件信息到索引库,不处理untracked文件
git add -A .    添加当前目录所有修改、删除的文件信息导索引库,并将untracked文件添加到索引库
git add -i .    交互式添加当目录所有修改、删除、新增的文件信息到索引库

git add -i . 输入之后,会进入一个子命令系统,会列出当前工作目录所有tracked和untracked的文件信息,同时会在下方列出以下八个子命令:

  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp

这八个子命令都是见名知意的,使用方式都是输入相应子命令后,列出带序号的文件列表,选择要操作的文件序号(可多选),执行命令,显示命令结果,之后按回车键,返回子命令系统目录。

git push

首次使用git push命令(即直接输入git push),git 会提示设置set upstream,其实就是让你设置本地分支同远程分支见的对应关系,建立跟踪关系的方法:

  1. 建立分支时采用 —track,如:

    git branch --track local_branch origin/remote_branch_name
    执行之后,本地分支local_branch 和 远程分支remote_branch_name间就建立了跟踪关系
  2. 使用—set-upstream(相当于修改项目根目录.get文件夹下的config文件),如:

    git branch --set-upstream test_branch origin/test_branch
  3. push操作时使用—set-upstream,如:

    git push origin --set-upstream test_bransh:origin/test_branch

push命令具体分析:

git push -u origin local_branch:remote_branch 
    推送成功后,local_branch和remote_branch间就存在对应关系了;
git push --prune(中文意思裁剪)
    推送之后,如果本地分支不存在了,同名的远程分支也将被删除
git push -n 
    模拟推送,除了真正的将更新推送过去这件事不干外,其他push会发生的操作都进行了
git push --delete remote_branch_name
    删除远程分支remote_branch_name(效果同git push origin :remote_branch_name)
git push --all 
    推送所有分支
git push --quiet
    推送之后不现实输出结果,除非发生了错误
git push --progress
    推送之后显示推送进度

push命令的一些便捷操作:

git push
    将当前的分支推送到关联的远程分支,没有的话git会予以提示;
git push origin
    同上,没有的话会报错
git push origin :
    将当前的分支推送到匹配的远程分支
git push origin master
    将master分支推送到远程的master分支,如果远程没有,则会创建相同名称的远程分支
git push origin HEAD
    将当前分支推送到相同名车个的远程分支

git merge

git merge 操作需要操作着熟悉vim编辑器,由于自己使用的较少,顾不做描述,建议采用GUI环境来进行Merge操作(通常就是解决冲突)

待我熟悉了vim,我会不全的。

git pull

首次使用git pull命里该,效果同首次使用git push命令相同。在默认的git pull选项中,该命令相当于执行以下命令组:

git fetch remote
git merge FETCH_HEAD

使用git pull —rebase时,相当于执行以下命令组:

git fetch remote
git rebase

git pull具体分析

pull命令本身只有三个option选项(-q, -v, —[no-]recurese-submodules),但由于pull命令是fetch和merge两个命令的组合,使用pull命令时要注意fetch命令和merge命令的一些注意事项。

git rebase

俗称变基操作,举个栗子来说明(来源于git文档)

Assume the following history exists and the current branch is "topic":

                     A---B---C topic
                    /
               D---E---F---G master

From this point, the result of either of the following commands:

    git rebase master
    git rebase master topic

would be:

              A'--B'--C' topic
              /
  D---E---F---G master

我的理解就是,将并行两个commit记录(采用新的commit来)串行处理。

rebase过程中如果存在冲突,先解决冲突,然后采用git add .将更改的文件添加到索引库,在继续rebase操作(无需提交),具体命令如下:

git rebase master
git rebase master topic(或者采用git pull --rebase)

if(conflicts occures) {
    First, resolve the conflicts;(实际上就是一些merge操作)
    Then, git add .(添加merge修改的文件)
    Finally, git rebase --continue
}
变基操作完成。

rebase过程中如果想放弃变基操作,可采用如下命令:

git rebase --abort
    该命令会放弃变基,让操纵的回到之前的状态

还有其他选项,会在使用过程中陆续添加

git log

显示提交记录,其选项较多,大多是美化log输出、设置log输出格式、设置log输出范围等

git log --follow <filePath>
    显示特定文件的历史更改记录
git log -g
    显示所有的记录(包括丢失的),用来做数据恢复很方便,等同于命令git reflog
git log <revirsion range>
    显示已定范围的log
git log --merges
    显示所有的merge记录

git branch

展示、创建或删除分支

git branch
    列出所有本地分支
git branch -a 
    列出所有远程分支和本地分支
git branch -r
    列出所有远程分支
git branch -d local_branch_name
    删除本地分支(对local_branch_name分支的合并状态有要求,必须完全合并)
git branch -f branch_name
    创建分支branch_name,如果branch_name存在,则重置(不使用-f的区别就是如果branch_name存在则重用branch_name分支
git branch -D(shortcut for --delete --force)
    删除本地分支(对local_branch_name分支的合并状态无要求,相当于强删)
git branch -m old_branch_name new_branch_name
    重命名old_branch_name为new_branch_name(对old_branch_name分支的merge状态有要求)
git branch -M old_branch_name new_branch_name
    重命名old_branch_name为new_branch_name(对old_branch_name强行重命名)
git branch --color=[always, never, auto] color_branch_name
    高亮显示color_branch_name这个分支

常见问题

中文文件名在git中显示乱码

原因是因为git中文默认以\xxx八进制形式展现,会对对0x80以上的字符进行quote,只要将core.quotepath设置为false即可解决问题

git config --global core.quotepath false

恢复已删除的的分支、会见或丢失的commit

前提是存在恢复的可能性,以下情况不能恢复:

丢失的分支或commit信息没有被git gc清除,一般情况下,gc对那些无用的object会保留很长时间后才清除的。

恢复方法,具体步骤如下:

  1. 执行git reflog(或git log -g)命令,查看所有历史操作信息,得到要恢复的commit的commit id
  2. 执行git branch recover_branch_name commit id命令,创建一个恢复分支;
  3. 将恢复分支合并到当前工作分支,打完收工。

忽略已经跟踪的文件

假设已经跟踪的文件为git.txt,执行以下代码即可

git rm --cached
git update-index --assume-unchanged git.txt
git update-index --no-assume-unchanged git.txt

常用工作流程

重要概念

常用git IDE推荐

SourceTree

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值