导航:首页 > 源码编译 > 用git命令编译

用git命令编译

发布时间:2023-07-08 20:05:08

① git mv命令如何使用

git 命令 (gnu interactive tools)
功能说明:文字模式下的文件管理员。
语 法:git 命令
补充说明:git命令是用来管理文件的程序,它十分类似DOS下的Norton Commander,具有互动式操作界面。它的操作方法和Norton Commander几乎一样,略诉如下:
F1 :执行info指令,查询指令相关信息,会要求您输入欲查询的名称。
F2 :执行cat指令,列出文件内容。
F3 :执行gitview指令,观看文件内容。
F4 :执行vi指令,编辑文件内容。
F5 :执行cp指令,复制文件或目录,会要求您输入目标文件或目录。
F6 :执行mv指令,移动文件或目录,或是更改其名称,会要求您输入目标文件或目录。
F7 :执行mkdir指令,建立目录。
F8 :执行rm指令,删除文件或目录。
F9 :执行make指令,批处理执行指令或编译程序时,会要求您输入相关命令。
F10 :离开git文件管理员。

----------------- Git命令具体使用-------------------------------
Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版本控制工具可以对开发产生如此之多的影响,文章分为两部分:
第一部分,介绍Git的一些常用命令,其中穿插介绍Git的基本概念和原理
第二部分,重点介绍Git的使用技巧,最后会在Git Hub上创建一个开源项目开启你的Git实战之旅

Git是什么
Git 在Wikipedia上的定义:它是一个免费的、分布式的版本控制工具,或是一个强调了速度快的源代码管理工具。
Git 最初被Linus Torvalds开发出来用于管理linux内核的开发。每一个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力,不依赖于网络和中心服务器。
Git 的出现减轻了许多开发者和开源项目对于管理分支代码的压力,由于对分支的良好控制,更鼓励开发者对自己感兴趣的项目做出贡献。其实许多开源项目包括 Linux kernel、Samba、X.org Server、Ruby on Rails,都已经过渡到使用Git作为自己的版本控制工具。对于我们这些喜欢写代码的开发者嘛,有两点最大的好处,我们可以在任何地点(在上班的地铁 上)提交自己的代码和查看代码版本;我们可以开许许多多个分支来实践我们的想法,而合并这些分支的开销几乎可以忽略不计。

Git 1+1
现在进入本篇文章真正的主题,介绍一下Git的基本命令和操作,会从Git的版本库的初始化,基本操作和独有的常用命令三部分着手,让大家能够开始使用Git。
Git 通常有两种方式来进行初始化:
git clone: 这是较为简单的一种初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一份
例如:git clone git://github.com/someone/some_project.git some_project
上面的命令就是将'git://github.com/someone/some_project.git'这个URL地址的远程版本库完全克隆到本地some_project目录下面
git init和git remote:这种方式稍微复杂一些,当你本地创建了一个工作目录,你可以进入这个目录,使用'git init'命令进行初始化,Git以后就会对该目录下的文件进行版本控制,这时候如果你需要将它放到远程服务器上,可以在远程服务器上创建一个目录,并把 可访问的URL记录下来,此时你就可以利用'git remote add'命令来增加一个远程服务器端,
例如:git remote add origin git://github.com/someone/another_project.git
上面的命令就会增加URL地址为'git: //github.com/someone/another_project.git',名称为origin的远程服务器,以后提交代码的时候只需要使用 origin别名即可

Git 的基本命令
现在我们有了本地和远程的版本库,让我们来试着用用Git的基本命令:
git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本库的代码更新到本地的master主枝,该功能类似于SVN的update
git add:是 将当前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步,例如'git add app/model/user.rb'就会增加app/model/user.rb文件到Git的索引中,该功能类似于SVN的add
git rm:从当前的工作空间中和索引中删除文件,例如'git rm app/model/user.rb',该功能类似于SVN的rm、del
git commit:提交当前工作空间的修改内容,类似于SVN的commit命令,例如'git commit -m story #3, add user model',提交的时候必须用-m来输入一条提交信息,该功能类似于SVN的commit
git push:将本地commit的代码更新到远程版本库中,例如'git push origin'就会将本地的代码更新到名为orgin的远程版本库中
git log:查看历史日志,该功能类似于SVN的log
git revert:还原一个版本的修改,必须提供一个具体的Git版本号,例如'git revert ',Git的版本号都是生成的一个哈希值

上面的命令几乎都是每个版本控制工具所公有的,下面就开始尝试一下Git独有的一些命令:
git branch:对分支的增、删、查等操作,例如'git branch new_branch'会从当前的工作版本创建一个叫做new_branch的新分支,'git branch -D new_branch'就会强制删除叫做new_branch的分支,'git branch'就会列出本地所有的分支
git checkout:Git的checkout有两个作用,其一是在不同的branch之间进行切换,例如'git checkout new_branch'就会切换到new_branch的分支上去;另一个功能是还原代码的作用,例如'git checkout app/model/user.rb'就会将user.rb文件从上一个已提交的版本中更新回来,未提交的内容全部会回滚
git rebase:用下面两幅图解释会比较清楚一些,rebase命令执行后,实际上是将分支点从C移到了G,这样分支也就具有了从C到G的功能

git reset:将当前的工作目录完全回滚到指定的版本号,假设如下图,我们有A-G五次提交的版本,其中C的版本号是 ,我们执行了'git reset '那么结果就只剩下了A-C三个提交的版本

git stash:将当前未提交的工作存入Git工作栈中,时机成熟的时候再应用回来,这里暂时提一下这个命令的用法,后面在技巧篇会重点讲解
git config:利用这个命令可以新增、更改Git的各种设置,例如'git config branch.master.remote origin'就将master的远程版本库设置为别名叫做origin版本库,后面在技巧篇会利用这个命令个性化设置你的Git,为你打造独一无二的 Git
git tag:可以将某个具体的版本打上一个标签,这样你就不需要记忆复杂的版本号哈希值了,例如你可以使用'git tag revert_version '来标记这个被你还原的版本,那么以后你想查看该版本时,就可以使用 revert_version标签名,而不是哈希值了
Git 之所以能够提供方便的本地分支等特性,是与它的文件存储机制有关的。Git存储版本控制信息时使用它自己定义的一套文件系统存储机制,在代码根目录下有一个.git文件夹,会有如下这样的目录结构:

有 几个比较重要的文件和目录需要解释一下:HEAD文件存放根节点的信息,其实目录结构就表示一个树型结构,Git采用这种树形结构来存储版本信息,那么 HEAD就表示根;refs目录存储了你在当前版本控制目录下的各种不同引用(引用指的是你本地和远程所用到的各个树分支的信息),它有heads、 remotes、stash、tags四个子目录,分别存储对不同的根、远程版本库、Git栈和标签的四种引用,你可以通过命令'git show-ref'更清晰地查看引用信息;logs目录根据不同的引用存储了日志信息。因此,Git只需要代码根目录下的这一个.git目录就可以记录完 整的版本控制信息,而不是像SVN那样根目录和子目录下都有.svn目录。那么下面就来看一下Git与SVN的区别吧

Git与SVN的不同
SVN(Subversion)是当前使用最多的版本控制工具。与它相比较,Git 最大的优势在于两点:易于本地增加分支和分布式的特性。
下面两幅图可以形象的展示Git与SVN的不同之处

------------

对 于易于本地增加分支,图中Git本地和服务器端结构都很灵活,所有版本都存储在一个目录中,你只需要进行分支的切换即可达到在某个分支工作的效果。而 SVN则完全不同,如果你需要在本地试验一些自己的代码,只能本地维护多个不同的拷贝,每个拷贝对应一个SVN服务器地址。举一个实际的例子,以前我所在 的小组使用SVN作为版本控制工具,当我正在试图增强一个模块,工作做到一半,由于会改变原模块的行为导致代码服务器上许多测试的失败,所以并没有提交代 码。这时候上级对我说,现在有一个很紧急的Bug需要处理, 必须在两个小时内完成。我只好将本地的所有修改diff,并输出成为一个patch文 件,然后回滚有关当前任务的所有代码,再开始修改Bug的任务,等到修改好后,在将patch应用回来。前前后后要完成多个繁琐的步骤,这还不计中间代码 发生冲突所要进行的工作量。可是如果使用Git, 我们只需要开一个分支或者转回到主分支上,就可以随时开始Bug修改的任务,完成之后,只要切换到原来的分支就可以优雅的继续以前的任务。只要你愿意,每 一个新的任务都可以开一个分支,完成后,再将它合并到主分支上,轻松而优雅。
分布式对于Git而言,你可以本地提交代码,所以在上面的图 中,Git有利于将一个大任务分解,进行本地的多次提交,而SVN只能在本地进行大量的一次性更改,导致将来合并到主干上造成巨大的风险。Git的代码日 志是在本地的,可以随时查看。SVN的日志在服务器上的,每次查看日志需要先从服务器上下载下来。我工作的小组,代码服务器在美国,每次查看小组几年前所 做的工作时,日志下载就需要十分钟,这不能不说是一个痛苦。后来我们迁移到Git上,利用Git日志在本地的特性,我用Ruby编写了一个Rake脚本, 可以查看某个具体任务的所有代码历史,每次只需要几秒钟,大大方便我的工作。当然分布式并不是说用了Git就不需要一个代码中心服务器,如果你工作在一个 团队里,还是需要一个服务器来保存所有的代码的。

总结
本篇介绍了Git的基本概念、一些常用命令和原理,大家可以尝试动手体会一下,下一篇会重点介绍Git命令的使用技巧,Git附带的工具,最后会在Git Hub上创建一个开源项目,敬请期待

② 自己可以编译安卓源码

用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:

sudo apt-get install git git config –global user.email “[email protected]” git config –global user.name “test”

其中[email protected]为你自己的邮箱.

简要说明

android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.

源码下载

由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)

repo工具下载及安装

通过执行以下命令实现repo工具的下载和安装

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:

我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:


这里写图片描述

执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.

错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通过使用kernel-qemu-armv7内核 解决模拟器等待黑屏问题.而-partition-size 1024 则是解决警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.

    结束吧

    到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.

    ③ 怎么才能在windows使用git命令

    在windows使用git命令方法如下(以win7为例):

    1、msysgit 是 Windows 版的 Git可以网络搜索Git下载。
    2、安装完成后,开始菜单里找到“Git”->“Git Bash”打开Git。
    3、注册用户信息:首先配置你的用户信息的Git命令。
    $ git config --global user.name "Your Name"
    $ git config --global user.email "[email protected]"
    4、配置完成后使用 $ git config --list查看配置的用户信息、
    5、创建版本库$ cd d: 和cd MyGit进入新建的Git目录(什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录)
    6、$ mkdir project # 创建项目目录 ,$ cd project # 进入到项目目录.
    7、git init # 初始化 git 仓库。此命令会在当前目录新建一个 .git 目录,用于存储 git 仓库的相关信息 ,把这个目录变成git可以管理的仓库.
    8、以上就是Git创建版本库操作方法

    ④ 几个常用的git命令

    1.安装Git

    ⑤ idea从gitlab拉项目到本地怎么编译

    随意打开一个项目,选择file,点击Settings。先选择亏码VersionControl,再点击Git,把安装的git位置找到,再点点击Test,配置git成功,任意打开一个项目后,点击File点击NeProjectfromVersionControl,点击Git,弹出对话框,URL:git地址,Directory:拉取代码到本地目录,将获取到的git地址复制到URL里面,再点击Test,点击Test将会弹出以下模态者晌框,输入申请的git账号、密码,点击LogIn,再点击Clone,就是拉取代码,再点击Clone,就是拉取代码,弹出以下框,点击NewWindow大功告成。
    按照上述步骤操作即可,需要注意的是,过程中可能会出现一些问题:比如弹出gitlab账号密码输入框,解决办法:自定义token名,勾选权限,生成token,该token作为密码输入,账号仍为gitlab登录名,登陆成功。
    代码是程序员用开发销嫌哪工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。

    ⑥ 45 个 Git 经典操作场景,专治不会合代码-

    git 对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree 这样牛X的客户端工具,使得合并代码变的很方便。但找工作面试和一些需彰显个人实力的场景,仍然需要我们掌握足够多的git命令。

    下边我们整理了45个日常用git合代码的经典操作场景,基本覆盖了工作中的需求。

    如果你用 git commit -a 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。你就可以用下面的命令显示当前 HEAD 上的最近一次的提交(commit):

    或者

    如果你的提交信息( commit message )写错了且这次提交(commit)还没有推(push), 你可以通过下面的方法来修改提交信息( commit message ):

    这会打开你的默认编辑器, 在这里你可以编辑信息. 另一方面, 你也可以用一条命令一次完成:

    如果你已经推(push)了这次提交(commit), 你可以修改这次提交(commit)然后强推( force push ), 但是不推荐这么做。

    如果这只是单个提交(commit),修改它:

    如果你需要修改所有 历史 , 参考 'git filter-branch'的指南页.

    通过下面的方法,从一个提交(commit)里移除一个文件:

    这将非常有用,当你有一个开放的补丁( open patch ),你往上面提交了一个不必要的文件,你需要强推( force push )去更新这个远程补丁。

    如果你需要删除推了的提交( pushed commits ),你可以使用下面的方法。可是,这会不可逆的改变你的 历史 ,也会搞乱那些已经从该仓库拉取(pulled)了的人的 历史 。简而言之,如果你不是很确定,千万不要这么做。

    如果你还没有推到远程, 把Git重置(reset)到你最后一次提交前的状态就可以了(同时保存暂存的变化):

    这只能在没有推送之前有用. 如果你已经推了, 唯一安全能做的是 git revert SHAofBadCommit , 那会创建一个新的提交(commit)用于撤消前一个提交的所有变化(changes);或者, 如果你推的这个分支是rebase-safe的 (例如:其它开发者不会从这个分支拉), 只需要使用 git push -f 。

    同样的警告:不到万不得已的时候不要这么做.

    或者做一个 交互式rebase 删除那些你想要删除的提交(commit)里所对应的行。

    注意, rebasing(见下面)和修正(amending)会用一个 新的提交(commit)代替旧的 , 所以如果之前你已经往远程仓库上推过一次修正前的提交(commit),那你现在就必须强推( force push ) ( -f )。注意 – 总是 确保你指明一个分支!

    一般来说, 要避免强推 . 最好是创建和推(push)一个新的提交(commit),而不是强推一个修正后的提交。后者会使那些与该分支或该分支的子分支工作的开发者,在源 历史 中产生冲突。

    如果你意外的做了 git reset --hard , 你通常能找回你的提交(commit), 因为Git对每件事都会有日志,且都会保存几天。

    你将会看到一个你过去提交(commit)的列表, 和一个重置的提交。选择你想要回到的提交(commit)的SHA,再重置一次:

    这样就完成了。

    一般来说, 如果你想暂存一个文件的一部分, 你可这样做:

    -p 简写。这会打开交互模式, 你将能够用 s 选项来分隔提交(commit);然而, 如果这个文件是新的, 会没有这个选择, 添加一个新文件时, 这样做:

    然后, 你需要用 e 选项来手动选择需要添加的行,执行 git diff --cached 将会显示哪些行暂存了哪些行只是保存在本地了。

    git add 会把整个文件加入到一个提交. git add -p 允许交互式的选择你想要提交的部分.

    多数情况下,你应该将所有的内容变为未暂存,然后再选择你想要的内容进行commit。但假定你就是想要这么做,这里你可以创建一个临时的commit来保存你已暂存的内容,然后暂存你的未暂存的内容并进行stash。然后reset最后一个commit将原本暂存的内容变为未暂存,最后stash pop回来。

    注意1: 这里使用 pop 仅仅是因为想尽可能保持幂等。注意2: 假如你不加上 --index 你会把暂存的文件标记为为存储。

    如果你只是想重置源(origin)和你本地(local)之间的一些提交(commit),你可以:

    重置某个特殊的文件, 你可以用文件名做为参数:

    如果你想丢弃工作拷贝中的一部分内容,而不是全部。

    签出(checkout)不需要的内容,保留需要的。

    另外一个方法是使用 stash , Stash所有要保留下的内容, 重置工作拷贝, 重新应用保留的部分。

    或者, stash 你不需要的部分, 然后stash drop。

    这是另外一种使用 git reflog 情况,找到在这次错误拉(pull) 之前HEAD的指向。

    重置分支到你所需的提交(desired commit):

    完成。

    先确认你没有推(push)你的内容到远程。

    git status 会显示你领先(ahead)源(origin)多少个提交:

    一种方法是:

    在main下创建一个新分支,不切换到新分支,仍在main下:

    把main分支重置到前一个提交:

    HEAD^ 是 HEAD^1 的简写,你可以通过指定要设置的 HEAD 来进一步重置。

    或者, 如果你不想使用 HEAD^ , 找到你想重置到的提交(commit)的hash( git log 能够完成), 然后重置到这个hash。使用 git push 同步内容到远程。

    例如, main分支想重置到的提交的hash为 a13b85e :

    签出(checkout)刚才新建的分支继续工作:

    假设你正在做一个原型方案(原文为working spike (see note)), 有成百的内容,每个都工作得很好。现在, 你提交到了一个分支,保存工作内容:

    当你想要把它放到一个分支里 (可能是 feature , 或者 develop ), 你关心是保持整个文件的完整,你想要一个大的提交分隔成比较小。

    假设你有:

    我去可以通过把内容拿到你的分支里,来解决这个问题:

    这会把这个文件内容从分支 solution 拿到分支 develop 里来:

    然后, 正常提交。

    假设你有一个 main 分支, 执行 git log , 你看到你做过两次提交:

    让我们用提交hash(commit hash)标记bug ( e3851e8 for #21, 5ea5173 for #14).

    首先, 我们把 main 分支重置到正确的提交( a13b85e ):

    现在, 我们对 bug #21 创建一个新的分支:

    接着, 我们用 _cherry-pick_ 把对 bug #21 的提交放入当前分支。这意味着我们将应用(apply)这个提交(commit),仅仅这一个提交(commit),直接在HEAD上面。

    这时候, 这里可能会产生冲突, 参见交互式 rebasing 章 冲突节 解决冲突.

    再者, 我们为bug #14 创建一个新的分支, 也基于 main 分支

    最后, 为 bug #14 执行 cherry-pick :

    一旦你在github 上面合并(merge)了一个 pull request , 你就可以删除你fork里被合并的分支。如果你不准备继续在这个分支里工作, 删除这个分支的本地拷贝会更干净,使你不会陷入工作分支和一堆陈旧分支的混乱之中。

    如果你定期推送到远程, 多数情况下应该是安全的,但有些时候还是可能删除了还没有推到远程的分支。让我们先创建一个分支和一个新的文件:

    添加文件并做一次提交

    现在我们切回到主(main)分支,‘不小心的’删除 my-branch 分支

    在这时候你应该想起了 reflog , 一个升级版的日志,它存储了仓库(repo)里面所有动作的 历史 。

    正如你所见,我们有一个来自删除分支的提交hash(commit hash),接下来看看是否能恢复删除了的分支。

    看! 我们把删除的文件找回来了。Git的 reflog 在rebasing出错的时候也是同样有用的。

    删除一个远程分支:

    你也可以:

    删除一个本地分支:

    首先, 从远程拉取(fetch) 所有分支:

    假设你想要从远程的 daves 分支签出到本地的 daves

    ( --track 是 git checkout -b [branch] [remotename]/[branch] 的简写)

    这样就得到了一个 daves 分支的本地拷贝, 任何推过(pushed)的更新,远程都能看到.

    你可以合并(merge)或rebase了一个错误的分支, 或者完成不了一个进行中的rebase/merge。Git 在进行危险操作的时候会把原始的HEAD保存在一个叫ORIG_HEAD的变量里, 所以要把分支恢复到rebase/merge前的状态是很容易的。

    不幸的是,如果你想把这些变化(changes)反应到远程分支上,你就必须得强推( force push )。是因你快进( Fast forward )了提交,改变了Git 历史 , 远程分支不会接受变化(changes),除非强推(force push)。

    这就是许多人使用 merge 工作流, 而不是 rebasing 工作流的主要原因之一, 开发者的强推(force push)会使大的团队陷入麻烦。使用时需要注意,一种安全使用 rebase 的方法是,不要把你的变化(changes)反映到远程分支上, 而是按下面的做:

    假设你的工作分支将会做对于 main 的pull-request。一般情况下你不关心提交(commit)的时间戳,只想组合 所有 提交(commit) 到一个单独的里面, 然后重置(reset)重提交(recommit)。确保主(main)分支是最新的和你的变化都已经提交了, 然后:

    如果你想要更多的控制, 想要保留时间戳, 你需要做交互式rebase (interactive rebase):

    如果没有相对的其它分支, 你将不得不相对自己的 HEAD 进行 rebase。例如:你想组合最近的两次提交(commit), 你将相对于 HEAD~2 进行rebase, 组合最近3次提交(commit), 相对于 HEAD~3 , 等等。

    在你执行了交互式 rebase的命令(interactive rebase command)后, 你将在你的编辑器里看到类似下面的内容:

    所有以 # 开头的行都是注释, 不会影响 rebase.

    然后,你可以用任何上面命令列表的命令替换 pick , 你也可以通过删除对应的行来删除一个提交(commit)。

    例如, 如果你想 单独保留最旧(first)的提交(commit),组合所有剩下的到第二个里面 , 你就应该编辑第二个提交(commit)后面的每个提交(commit) 前的单词为 f :

    如果你想组合这些提交(commit) 并重命名这个提交(commit) , 你应该在第二个提交(commit)旁边添加一个 r ,或者更简单的用 s 替代 f :

    你可以在接下来弹出的文本提示框里重命名提交(commit)。

    如果成功了, 你应该看到类似下面的内容:

    --no-commit 执行合并(merge)但不自动提交, 给用户在做提交前检查和修改的机会。 no-ff 会为特性分支(feature branch)的存在过留下证据, 保持项目 历史 一致。

    有时候,在将数据推向上游之前,你有几个正在进行的工作提交(commit)。这时候不希望把已经推(push)过的组合进来,因为其他人可能已经有提交(commit)引用它们了。

    这会产生一次交互式的rebase(interactive rebase), 只会列出没有推(push)的提交(commit), 在这个列表时进行reorder/fix/squash 都是安全的。

    检查一个分支上的所有提交(commit)是否都已经合并(merge)到了其它分支, 你应该在这些分支的head(或任何 commits)之间做一次diff:

    这会告诉你在一个分支里有而另一个分支没有的所有提交(commit), 和分支之间不共享的提交(commit)的列表。另一个做法可以是:

    如果你看到的是这样:

    这意味着你rebase的分支和当前分支在同一个提交(commit)上, 或者 领先(ahead) 当前分支。你可以尝试:

    如果你不能成功的完成rebase, 你可能必须要解决冲突。

    首先执行 git status 找出哪些文件有冲突:

    在这个例子里面, README.md 有冲突。打开这个文件找到类似下面的内容:

    你需要解决新提交的代码(示例里, 从中间 == 线到 new-commit 的地方)与 HEAD 之间不一样的地方.

    有时候这些合并非常复杂,你应该使用可视化的差异编辑器(visual diff editor):

    在你解决完所有冲突和测试过后, git add 变化了的(changed)文件, 然后用 git rebase --continue 继续rebase。

    如果在解决完所有的冲突过后,得到了与提交前一样的结果, 可以执行 git rebase --skip 。

    任何时候你想结束整个rebase 过程,回来rebase前的分支状态, 你可以做:

    暂存你工作目录下的所有改动

    你可以使用 -u 来排除一些文件

    假设你只想暂存某一个文件

    假设你想暂存多个文件

    这样你可以在 list 时看到它

    首先你可以查看你的 stash 记录

    然后你可以 apply 某个 stash

    此处, 'n'是 stash 在栈中的位置,最上层的 stash 会是0

    除此之外,也可以使用时间标记(假如你能记得的话)。

    你需要手动create一个 stash commit , 然后使用 git stash store 。

    如果已经克隆了:

    如果你想恢复一个已删除标签(tag), 可以按照下面的步骤: 首先, 需要找到无法访问的标签(unreachable tag):

    记下这个标签(tag)的hash,然后用Git的 update-ref

    这时你的标签(tag)应该已经恢复了。

    如果某人在 GitHub 上给你发了一个 pull request , 但是然后他删除了他自己的原始 fork, 你将没法克隆他们的提交(commit)或使用 git am 。在这种情况下, 最好手动的查看他们的提交(commit),并把它们拷贝到一个本地新分支,然后做提交。

    做完提交后, 再修改作者,参见变更作者。然后, 应用变化, 再发起一个新的 pull request 。

    在 OS X 和 Linux 下, 你的 Git的配置文件储存在 ~/.gitconfig 。我在 [alias] 部分添加了一些快捷别名(和一些我容易拼写错误的),如下:

    你可能有一个仓库需要授权,这时你可以缓存用户名和密码,而不用每次推/拉(push/pull)的时候都输入,Credential helper能帮你。

    你把事情搞砸了:你 重置(reset) 了一些东西, 或者你合并了错误的分支, 亦或你强推了后找不到你自己的提交(commit)了。有些时候, 你一直都做得很好, 但你想回到以前的某个状态。

    这就是 git reflog 的目的, reflog 记录对分支顶端(the tip of a branch)的任何改变, 即使那个顶端没有被任何分支或标签引用。基本上, 每次HEAD的改变, 一条新的记录就会增加到 reflog 。遗憾的是,这只对本地分支起作用,且它只跟踪动作 (例如,不会跟踪一个没有被记录的文件的任何改变)。

    上面的reflog展示了从main分支签出(checkout)到2.2 分支,然后再签回。那里,还有一个硬重置(hard reset)到一个较旧的提交。最新的动作出现在最上面以 HEAD@{0} 标识.

    如果事实证明你不小心回移(move back)了提交(commit), reflog 会包含你不小心回移前main上指向的提交(0254ea7)。

    然后使用 git reset 就可以把main改回到之前的commit,这提供了一个在 历史 被意外更改情况下的安全网。

    ⑦ git commit命令是做什么用的

    git commit主要是将暂存区里的改动给提交到本地的版本库。

    每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id,commit-id在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里。

    git commit-a-m"提交的描述信息"

    git commit命令的-a选项可只将所有被修改或者已删除的且已经被git管理的文档提交倒仓库中。如果只是修改或者删除了已被Git 管理的文档,是没必要使用git add命令的。

    git add.命令除了能够判断出当前目录(包括其子目录)所有被修改或者已删除的文档,还能判断用户所添加的新文档,并将其信息追加到索引中。

    git commit--amend对于已经修改提交过的注释,如果需要修改,可以借助 git commit --amend 来进行。

    (7)用git命令编译扩展阅读

    COMMIT(操作指令)

    COMMIT命令用于把事务所做的修改保存到数据库,它把上一个COMMIT或ROLLBACK命令之后的全部事务都保存到数据库。

    用途

    使用COMMIT提交当前事务,使事务中执行的变更永久化,所有事务的更改都将为其他事务可见,而且保证当崩溃发生时的可持续性。

    通过修改的表,查看事务期间所作的任何更改,但其他用户不能看到所做的更改。

    可以回滚ROLLBACK语句与事务过程中所做的任何更改。

    可以使用此语句手动提交疑问在分布式的事务上。

    可以使用此语句终止SET TRANSACTION语句的只读事务。

    参考资料

    COMMIT-网络

    阅读全文

    与用git命令编译相关的资料

    热点内容
    dvd光盘存储汉子算法 浏览:757
    苹果邮件无法连接服务器地址 浏览:962
    phpffmpeg转码 浏览:671
    长沙好玩的解压项目 浏览:144
    专属学情分析报告是什么app 浏览:564
    php工程部署 浏览:833
    android全屏透明 浏览:736
    阿里云服务器已开通怎么办 浏览:803
    光遇为什么登录时服务器已满 浏览:302
    PDF分析 浏览:484
    h3c光纤全工半全工设置命令 浏览:143
    公司法pdf下载 浏览:381
    linuxmarkdown 浏览:350
    华为手机怎么多选文件夹 浏览:683
    如何取消命令方块指令 浏览:349
    风翼app为什么进不去了 浏览:778
    im4java压缩图片 浏览:362
    数据查询网站源码 浏览:150
    伊克塞尔文档怎么进行加密 浏览:892
    app转账是什么 浏览:163