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),重启项目。再次提交会让输入账户和密码

  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/lvhouhou/p/11540989.html
Copyright © 2011-2022 走看看