zoukankan      html  css  js  c++  java
  • Git

    目录

    1.总览

    2.GIt基础

    3.Git在idea上的使用

     

    1.总览

    任何时候都能通过如下命令

    Ctrl+C   结束输错的命令
    Ctrl+A   跳到命令最前方
    Ctrl+E   跳到命令最后方
    查看版本   git --version 
    创建版本库
    新建文件夹,在此文件夹下执行初始化命令
    git init       初始化出一个版本库

    首次使用前的配置
    git config --global user.name"lvhouhou"
    git config --global user.email"邮箱"
    对于user.name和user.email来说,有3个地方可以设置
    1./etc/gitconfig(几乎不会使用),git config --system
    2.~/.gitconfig(很常用) git config --global
    3.针对于特定项目,.git/config文件中 git config --local
    优先级越来越高

    查看配置信息
    git config --list
    git config --user.name
    git config --user.email


    ssh-keygen   生成公钥和私钥,存在.ssh
    将公钥配置到GitHub
    一个GitHub可以配置多个SSH,自己可以多台电脑使用

    什么是SSH key:

    在使用GIT与远程的服务器进行连接的时候,需要生成一个SSH key,他用于在你的计算机和远程服务器(gitlab,github....)建立一个

    “安全的连接"(secure connection),这样你每次连接的时候,都不需要输入用户名密码,而且他比单纯的用户名密码机制更加的安全。



    从现有仓库克隆,克隆完整数据
    git clone git://github.com/zhanglong/zl.git


    查看日志

    查看提交历史 git log   只能查看当前版本 和 之前版本信息
    -p 展开显示每次提交内容差异
    -n 仅显示最近的n次更新
    --stat 仅显示简要的增删改行数统计
    git log --graph 以图形化的方式显示
    git reflog 可以查看所有的操作记录和版本信息

    远程协作
    git pull       从远程版本库拉取到本地
    git push       将本地版本库推送到远程版本库
    git pull origin 远程分支名
    git push origin 远程分支名


    版本回退
    回退到上一版本  git reset --hard HEAD^
     git reset --hard HEAD~1
    回退到特定版本  git reset --hard commit_id (版本号不需要写全 一部分就可以)
     
    从远程仓库拉取
    git pull==git fetch+git merge
    拉去后回尝试自动合并

    Git rebase
    rebase:变基,即改变分支的根基,与merge相似却又不同

    git rebase origin
    rebase 过程也会出现冲突,解决冲突后,使用git add添加,然后执行
    git rebase -- continue


    多人协作的工作模式通常是这样:
    用git push origin branch-name推送自己的修改;
    如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    如果合并有冲突,则解决冲突,并在本地提交;
    没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
    如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
    这就是多人协作的工作模式,一旦熟悉了,就非常简单。



    Untracked files 未追踪的文件(未添加add)
    命令帮助

    git config --help // 查看git config命令详细用法

    git help config // 功能同上

    查看文件状态(未添加还是未提交)
    git status  查看文件的情况 查看文件未添加还是未提交

    三种状态

    1. 所有文件都提交了 nothing to commit ,working tree clean

    2. 红色 说明有文件没有被添加

    3. 绿色 说明文件被添加了没有被提交

    撤销修改
    git checkout +被撤销的文件名字 
    连接码云
    1. 有码云账户

    2. 在电脑中生成公钥和秘钥

      桌面打开git 命令行 执行生成命令

      ssh-keygen -t rsa -C "xxxxx@xxxxx.com"  

      执行命令 一直回车

      打开用户文件夹可以看到秘钥文件夹 user/.ssh下id_rsa.pub为公钥

    3. 在码云账户中配置SSH公钥

    (从云端克隆和推送到云端)

    码云的基本使用

    1. 创建仓库

    2. 将仓库下载本地 克隆

      在要保存的文件夹内打开git,输入

      git clone +码云仓库地址。这样就完成了下载克隆
    3. 本地写代码

    4. 推送到仓库上

      1. 文件提交到本地仓库 add commit

      2. 将本地仓库推送到码云 git push 推送

    5. 更新本地项目git pull

    2.GIt基础

    git工作模式

    git基础

    文件的三种状态

    已修改(modified)

    已暂存(staged)

    已提交(commited)

     

    本地版本库与服务器版本库

     

     

    本地版本管理

    暂存区(stage,index)

    添加:

    ​ git add 将修改的文件存到暂存区 git add . 添加所有文件到暂存区 git add + 文件名 将一个文件添加到暂存区

    提交:

    git commit -m"提交标识信息” 将暂存区的文件提交到版本仓库提交更新,每次提交前git status查看是不是已经暂存了(好习惯)git commit -m"initial project version"

    Git的提交id(commit id )是一个摘要值,这个摘要值实际上是个sha1计算出来的git commit --amend -m "提交信息" 将上次的提交信息更改为这次的amend修复

    git commit -am '提交信息' 添加并提交(只能处理老文件,新建的文件不行)

    删除:

    git rm +文件 删除目录或文件(递归删除) (删除文件并将删除文件存到暂存区,从暂存区恢复使用: git reset HEAD +文件名 从暂存区恢复到工作区。

    git checkout -- 文件名 将工作区的删除动作丢弃掉rm +文件 删除文件(被删除的文件没有添加到暂存区,恢复时需先使用git add + 文件 添加到暂存区,再执行git reset HEAD +文件名 git checkout -- 文件名)

    合并冲突:

    git checkout --文件名 作用:丢弃对工作区的此文件的变更(恢复到最后一次提交到暂存区的状态)

    git reset HEAD 文件名 作用:将之前添加到暂存区的的内容移除到工作区

    stash暂存

    保存工作现场 git stash 查看所有保存现场 git stash list恢复现场 git stash apply (stash内容并不删除,需要通过git stash drop stash@{0}手动删除)

    git stash pop (恢复的同时也将stash内容删除)

    git stash apply stash@{0} 指定从哪个版本恢复

    Git标签

    标签有两种:轻量级标签(lightweight)与带有附注标签(annotated)

    轻量级标签是个指针,附注标签是个对象

    • 查看全部标签——git tag

    • 查看某个标签的详细信息——git show + 标签名

    • 创建一个轻量级标签——git tag v1.0.1

    • 创建一个带有附注的标签——git tag -a v1.0.2 -m'release version'

    • 将标签推送到远程 —— git push origin +标签名

    • 将标签推送到远程——git push origin +标签名

    • 将本地未推送的所有标签推送到远程——git push origin --tags

    • 删除远程标签——git push origin :refs/tags/标签名

    • 删除远程标签——git push origin --delete tag v5.0

    • 删除标签——git tag -d tag_name

    Git refspec
    Git远程操作
    • git remote add origin url (自己的Github仓库地址)(HTTPS方式或SSH公钥) 推送到仓库

    • git push -u origin master 关联远程分支

    查看远程仓库:

    • git remote show 显示与此项目相关联的所有的仓库

    • git remote show origin 显示远程仓库origin的详细信息

    git 2.0之前push默认将本地的推送到远程的已经存在的同名分支

    git 2.0之后push默认将本地的推送到git pull 的来源远程分支

    下图表示本地有1条提交,未推送到远程

     

     

    打开Git GUI 图形化界面 gitk

    git gui 暂存区和工作区的界面

    分支操作

    新建分支:
    • gitlab上新建远程分支

    • 本地新建分支 git branch +分支名

    • 创建并转向所创建的分支 git checkout -b +分支名

    查看分支:
    • 查看分支 git branch

    • git branch -a 查看本地和远程

    • git branch -r 查看远程分支

    注:名称前面加* 号的是当前的分支,远程分支会用红色表示出来

    查看分支是未显示新创建的远程分支时用git pull更新一下

    分支关联:
    • 远程新建了一个分支,本地没有该分支。

    可以利用 git checkout --track origin/branch_name ,这时本地会新建一个分支名叫 branch_name ,会自动跟踪远程的同名分支 branch_name。

    • 本地新建了一个分支 branch_name,但是远程没有。

    这时候 push 和 pull 指令就无法确定该跟踪谁,一般来说我们都会使其跟踪远程同名分支,所以可以利用 git push --set-upstream origin branch_name ,这样就可以自动在远程创建一个 branch_name 分支,然后本地分支会 track 该分支。后面再对该分支使用 push 和 pull 就自动同步。

    查看分支最后一次提交信息 :
    • git branch -v 查看本分支的最后一次提交

    • git branch -av 查看所有分支最后一次的提交

    删除分支:

    git branch -d +分支名 (d表示delete)不能在本分支下删除分支,要在其他分支下才能删除,当分支独有数据未合并时,需再输入git branch -D + 分支名切换分支

    • 删除本地分支

    git branch -d branch_name

    • 删除远程分支

    git branch -r -d origin/branch-name git push origin :branch-name 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

    切换分支:
    • git checkout +分支名

    • 创建并转向所创建的分支 git checkout -b +分支名

    分支合并 :
    • git merge branch_name 将branch_name合并到当前分支下

    分支合并冲突,两个分支修改了同一文件的同一部分内容,需要先解决冲突,然后提交 git add ./文件名 git commit 。

    更新和推送:

    推送到远程版本库 git push

    push操作的完整命令是:git push origin local_branch:remote_branch

    推送本地分支local_brancn到远程分支remote_branch

    推送本地分支 git push origin server_branch

    从远程拉取更新git pull

    pull操作的完整命令是:git pul origin local_branch:remote_branch

    git push 和git push origin HEAD
    • git push origin master

    表示,将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。

    如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

    git push origin :master等同于git push origin --delete master

    上面命令表示删除origin主机的master分支。如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

    git push origin

    上面命令表示,将当前分支推送到origin主机的对应分支。如果当前分支只有一个追踪分支,那么主机名都可以省略。

    git push

    如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push

    git push -u origin master

    上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

    不带任何参数的git push,默认只推送当前分支,这叫做simple方式。如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。

    最后,git push不会推送标签(tag),除非使用–tags选项。

    git push origin --tags

    将当前分支推送到远程的同名的简单方法,如下 -

    git push origin HEAD

    将当前分支推送到源存储库中的远程引用匹配主机。 这种形式方便推送当前分支,而不考虑其本地名称。如下 -

    git push origin HEAD:master

    比较差异

    1.diff用来比较本地的差异

    暂存区————工作区————版本库————远程版本库

    • 比较暂存区与工作区有哪些差别 ——git diff

    • 比较工作区与最新已提交(版本库)的差别——git diff HEAD

    • 比较暂存区和已提交(版本库)的差别——git diff --cached commit_id

    • 比较暂存区和最新的已提交(版本库)的差别——git diff --cached

     

    2. 对比两个分支差异

    • 远程的比较

    查看2 个分支的区别:master, dev

    1.查看 dev 有,而 master 中没有的:

    git log dev ^master 1

    2.查看 dev 中比 master 中多提交了哪些内容:

    git log master..dev1

    注意,列出来的是两个点后边(此处即dev)多提交的内容。同理,想知道 master 比 dev 多提交了什么:

    git log dev..master1

    3.不知道谁提交的多谁提交的少,单纯想知道有什么不一样:

    git log dev...master

    4.在上述情况下,再显示出每个提交是在哪个分支上:

    git log --left-right dev...master

    注意 commit 后面的箭头,根据我们在 –left-right dev…master 的顺序,左箭头 < 表示是 dev 的,右箭头 > 表示是 master的。

    截图中表示这三个提交都是在 master 分支上的

    总结:

    master 主分支(默认),稳定分支,项目发布与部署分支

    dev开发的稳定分支,不允许直接提交

    master指向提交

    HEAD—— 是个指针,指向的是当前分支的引用标识符,

    origin ——指远程分支

    origin/master——表示远程的master分支

    更新前先提交保存

    解决完冲突后要再commit才能推送。

    新建远程分支可能要给git pull 才能发现

    Fast forword快进(自动merge成功)

    git pull和git pull --rebase的使用

    使用下面的关系区别这两个操作:git pull = git fetch + git merge 拉取远程的更新并自动合并

    git fetch 拉取远程的更新

    git merge 和本地的合并

    git pull --rebase = git fetch + git rebase

    git merge和git rebase的区别。

    假设有3次提交A,B,C。

    在远程分支origin的基础上创建一个名为"mywork"的分支并提交了,同时有其他人在"origin"上做了一些修改并提交了。

    其实这个时候E不应该提交,因为提交后会发生冲突。如何解决这些冲突呢?有以下两种方法:

    1.git merge 合并,会将本地提交的和远程pull下来的形成一个新的版本,会形成菱形,让人很困惑。

    merge 操作遇到冲突的时候,当前merge不能继续进行下去。手动修改冲突内容后,add 修改,commit 就可以了。

    2.git rebase 合并冲突,会废弃自己之前的,当它不存在(图中用虚线表示),本地提交和pull下来的形成一个新的版本,版本路线还是直线,避免了菱形的产生,让大家易于理解。

    在rebase的过程中,有时也会有conflict,这时Git会停止rebase并让用户去解决冲突,解决完冲突后,用git add命令去更新这些内容,然后不用执行git-commit,直接执行git rebase --continue,这样git会继续apply余下的补丁。在任何时候,都可以用git rebase --abort参数来终止rebase的行动,并且mywork分支会回到rebase开始前的状态。

    git merge和git rebase 解决完冲突后的提交推送区别:

    git merge 解决完冲突后,add 修改,commit 就可以了

    git rebase 解决完冲突后,add,不用执行commit ,直接执行git rebase --continue则会继续apply余下的补丁,

    merge 和 rebase

    现在我们有这样的两个分支,test和master,提交如下:

           D---E test
        /
    A---B---C---F--- master

    在master执行git merge test,然后会得到如下结果:

           D--------E
        /        
    A---B---C---F----G---   test, master

    在master执行git rebase test,然后得到如下结果:

    A---B---D---E---C‘---F‘---   test, master

    merge操作会生成一个新的节点,之前的提交分开显示。 而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。

    3.Git在idea上的使用

    1.更换Git账户

    在idea中File-->Settings-->Appearance-->System Settings-->Passwords,选择不保存密码(Do not save),重启项目。再次提交会让输入账户和密码

  • 相关阅读:
    【嵌入式开发】写入开发板Linux系统-模型S3C6410
    大约cocos2d-X 3.x使用引擎版本自带的物理引擎Physics
    它们的定义PropertyPlaceHolder无法完成更换任务
    [Cocos2d-x]在Cocos2d-x 3.x如何通过版本号WebSocket连接server数据的传输
    Java 内存架构
    类似的微博推断客户关系sql声明
    Kienct与Arduino学习笔记(2) 深度图像与现实世界的深度图的坐标
    etl工具,kettle实现了周期
    Android中自定义checkbox样式
    ndroid网络(4):HttpClient必经之路----使用线程安全的单例模式HttpClient,及HttpClient和Application的融合
  • 原文地址:https://www.cnblogs.com/lvhouhou/p/11540989.html
Copyright © 2011-2022 走看看