美文网首页
git命令的学习

git命令的学习

作者: 白璞1024 | 来源:发表于2017-10-21 21:31 被阅读0次

    第一部分是文档,为了日后查看方便放到了前边[可能敲错了,详见阮一峰老师的文章]
    http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
    第二部分是demo,一些基本的操作,懒得截图,可以按提示敲 为
    详情请见知乎专栏
    https://zhuanlan.zhihu.com/p/30044692?utm_source=wechat_session&utm_medium=social

    一、配置项

    1、新建代码库

    当前目录新建git库
    git init
    新建一个仓库,将其初始化为git代码库
    git init [project-name]
    下载一个项目和的他整个代码的历史
    git clone [url]

    2、配置

    显示当前的git配置值
    git config -list
    编辑配置文件
    git config -e [-global]
    设置提交代码的用户信息
    git config[-global] user.name "[name]"
    git config[-global] user.email "[email address]"

    3、添加/删除文件

    添加文件到暂存区
    git add [file1][file1]...
    添加指定目录到暂存区,包括子目录
    git add [dir]
    添加当前目录所有的文件到暂存区
    git add .
    添加每个变化前,都会要求确认,对于同一个文件的多处变化,可以实现分次提交
    git add -p
    删除工作区文件,并将这次删除放入暂存区
    git rm [file1] [file2]
    停止追踪制定文件,但是该文件会保留在工作区
    git rm --cached [file1]
    改名且放到暂存区
    git mv [file-original][file-rname]

    4、代码提交

    提交暂存区到仓库区
    git commoit -m [message]
    提交暂存区到指定仓库区
    git commit [file] [file2] -m [message]
    提交工作区自上次commit之后的变化,直接到仓库区
    git commit -a
    提交时显示所有的diff信息
    git commit -v
    使用一次新的commit替代上次提交如果代码没有任何变化,用来改写上一次commit的提交信息
    git commit --amend -m [message]
    重做上次commit并包括指定文件的新变化
    git commit --amend [file1][file2]

    5、 分支

    列出所有的本地分支
    git branch
    列出所有的远程分支
    git branch -r
    列出所有的本地分支和远程分支
    git branch -a
    新建一个分支,但依然停留在当前分支
    git branch [branch-name]
    新建一个分支,并切换到该分支
    git checkout -b [branch-name]
    新建一个分支,指向指定commit
    git branch [branch][commit]
    新建一个分支,指定的远程分支建立追踪关系
    git branch --track [branch][remote-branch]
    切换到指定分支,并更新工作区
    git checkout [branch-name]
    切换到上一个分支
    git checkout
    建立追踪关系,在现有分支与指定的远程分支之间
    git branch --set-upstream[branch][remote-branch]
    合并指定分支到当前分支
    git merge[branch]
    选择一个commit 合并进的当前分支
    git cherry-pick[commit]
    删除分支
    git branch -d [branch-name]
    删除远程分支
    git push-orinin --delete [branch-name]
    git branch -dr[remote/branch]

    6、标签

    列出所有的tag
    git tag
    新建一个tag在当前的commit
    git tag [tag]
    新建一个tag在指定的commit
    git tag [tag] [commit]
    删除本地的tag
    git tag -d [tag]
    查看tag信息
    git show [tag]
    提交指定的tag
    git push [remote][tag]
    提交所有的tag
    git push [remote] --tages

    新建一个分支,指向某个tag
    git checkout -b[branch][tag]

    7、查看信息

    显示有变更的文件
    git status
    显示当前的分支的版本历史
    git log
    显示commit历史以及每次commit发生变更的文件
    git log --stat
    搜索提交历史 根据关键词
    git log -S[keyword]
    显示某个commit之后所有的变动,每个commit占据一行
    git log [tag] HEAD --pretty=format:%s
    显示某个commit之后所有变动,其提交说明必须符合搜索条件
    git log[tag] HEAD --grep feature
    显示某个文件的版本历史包括文件改名
    git log --fllow [file]
    显示指定文件相关的每一次diff
    git whatchange[file]
    显示过去5次提交
    git log -5 --pretty --oneline
    显示所有的提交过的用户,按提交次数排序
    git shortlog -sn
    显示指定文件,是什么人在什么时间改过
    git blame [file]
    显示暂存区和工作区的差异
    git diff
    显示暂存区和上一个commit的差异
    git diff --cached[file]
    显示工作区和当前分支最新commit之间的差异
    git diff HEAD
    显两次提交的差异
    git diff [first-branch]...[second-branch]
    显示今天你写了多少行代码
    git diff --shortstat "@{ 0 day ago}"
    显示某次提交的元数据和内容变化
    git show [commit]
    显示某次提交发生变化的文件
    git show --name-only[commit]
    显示某次提交时候,某个文件的内容
    git show [commit][filename]
    显示当前分支的最近几次提交
    git reflog

    8、远程同步

    下载远程仓库所有的变动
    git fetch [remote]

    显示所有的远程仓库
    git remote -v
    显示某个远程仓库的信息
    git remote show [remote]
    增加一个新的远程仓库,并命名
    git remote add [shortname][url]
    取回远程长裤的变化,并与本地分支合并
    git pull [remote] [branch]
    上传本地指定分支到远程仓库
    git push [remte][branch]

    强行推送当前分支到远程仓库 即使有冲突
    git push [remote] --force
    推送所有的分支到远程仓库
    git push [remote] -all

    9、撤销

    恢复暂存区的指定文件到工作区
    git checkout[file]
    恢复某个commit的指定文件到暂存区和工作区
    git checkout [commit] [file]
    恢复暂存区的所有的文件到工作区
    git checkout
    重置暂存区与工作区 与上次commit保持一致,工作区不变

    git reset [file]
    重置暂存区与工作区 与上次commit保持一致
    git reset --hard
    重置当前分支的指针为指定的commit同时重置暂存区,但是工作区不变
    git reset [commit]
    重置当前分支的HEAD为指定的commit同时重置暂存区和工作区,与指定commit一致
    git reset --hard[commit]
    重置当前HEAD为指定commit但是保持暂存区和工作区不变
    git reset --keep[commit]
    新建一个commit用来撤销指定commit 后者的所有变化都将被前者抵消,且应用到当前分支
    git revert[commit]
    暂时将未提交的变化移除,稍后再移入
    git stash
    git stash pop

    二、demo

    0、准备工作

    1.下载git程序 ,按步完成安装,右键git bash进入
    2.测试git

    1. git help git//检车git的安装情况
    2. git config --global(可选) user.name "baipu"
    3. git config --global(可选) user.email "baipubelive@126.com"

    1、创建版本库

    1. cd 进入相关的目录下/在相关的目录下打开git bash

    2. pwd 查看当前目录的状态

    3. git init 将当前目录变成git可以管理的仓库(会多一个。git的问题件)

    4. 目录下新建一个文件,内容111 名字readme.txt(用于将来的添加文件)

    5. git add readme.txt (添加到暂存区)

    6. git commit -m "radme.txt提交"(引号部分是用来提交注释的,执行完这句话,理论上就提交成功了)

    7. git status 查看当前是否还有文件没有提交

    8. 将文件内容添加2222222、333333 对文件进行修改,然后差异提交

    9. git status 查看有哪些文件发生了修改

    10. git diff readme.txt 查看这个文件具体有哪些字段进行了修改

    11. git add readme.txt ;git commit -m "修改了一些字段"(重复上边提交的过程 )

    2、版本回退:

    1. 先对read文件进行修改,然后提交(下面就是回退这一步)

    2. git log 进行查看自己提交的日志
    3. git log --pretty=oneline 上边的方法打印出来的内容可能比较多,这种让所有的信息展示在一行上
    4. git reset --hard HEAD^ 这个就是回退到上一个版本(git reset --hard HEAD^100这个是往前回退到前100个版本中)
    5. git reflog 查看自己前几部的提交,包括撤销,这时候就能看到每一步的版本号下一步恢复那个版本的时候用
    6. git reset --hard --5ec3e3c 回退到版本号为5ec3e3c的
    7. cat readme.txt 查看文件的内容,发现这个已经是第1步的时候自己修改后的文件了

    3、工作区和暂存区

    工作区:电脑上看到的目录,git目录下的文件,或者以后需要新建的目录文件都属于工作区的范畴
    版本库:.git这个文件不属于工作区,是版本库,其中的版本库存放了很多的东西,最重要的就是stage暂存区,git为我们自动创建了第一个分支,master以及指向第一个分支的指正Head.

    git add就是把文件添加到暂存区,

    git commit 就是把暂存区的所有的内容提交到当前分支上

    测试:

    1. 修改readme.txt然后添加新的文件,test.txt

    1. git status 可以看到,两个文件你的修改都有提示 而且是红色的
    2. git add git status 添加到暂存区,然后查看状态 发现两个修改的文件提示为绿色的
    3. git commit -m "修改信息"
    4. git status 没有那两个文件了

    4、撤销文件修改和删除文件的操作

    1、撤销修改

    几种方法:

    1. 手动修改,然后add commit

    2. 按照以前的方法 git reset --hard HEAD^

    3. 新的方法
      1.git status 查看状态(上边有提示,git checkout --file可以丢掉工作区的修改)
      2.git checkout --readme.txt 把readme。txt的文件在工作区做的修改全部撤销,这里又有两种情况:

      1. readme.txt自动修改后,还没有放到暂存区,使用撤销修改就回到了和版本库一模一样的状态
      2. 已经放到暂存区了,接着又做了修改,撤销修改就回到了暂存区后的状态

      4.cat readme.txt
      5.git add readme.txt //放到暂存区

      1. 修改它

      7.cat readme.txt//发现已经改变了
      8.git checkout --readme.txt(这里的--十分关键,否则就没有效果了)

    2、删除文件

    1. git add b.txt
    2. git commit -m "添加了b文件"
    3. rm b.txt
    4. git status//这时候查看已经被删掉,有两个操作1、commit掉,2、checkout恢复了
    5. 没有commit之前的恢复操作 : git checkout --b.txt

    5、远程仓库

    需要有github的账号 git和github之间的传输是通过ssh加密的,需要设置

    1. 创建ssh key 看看目录下有没有.ssh的目录 .ssh目录下有没有id_rsa id_rsa_pub的文件如果有的话,直接跳过如下的命令
    2. ssh-keygen -t rea -C "baipubelive@126.com"
    3. id_rsa 是私钥,id_rsa.pub是公钥,可以放心的告诉任何人
    4. github的 settings ssh key界面上对应的addssh key填入任意的title 然后key文本中粘贴id_rsa.pub文件的内容

    添加远程库
    本地的项目和github的连接

    1. 在github上创建一个仓库 create a new repo 仓库名 创建

    2. git remote add origin https://github.com/github的名字/仓库名.git

    3. git push -u orinin master 把本地仓库的分支master内容推送到元仓库中区 参数上-u的存在意义不但会把本地推送,还要把本地和远程关联起来,以后就方便多了

    4. 然后本地提交 git push origin master

    远程克隆文件
    git cline https://github.com/github名字/仓库名

    6、创建和合并分支

    1、创建分支

    1.git checkout -b dev 创建并切换分支,相当于以下的两部

    1. git branch dev
    2. git checkout dev

    2.git branch 查看当前的分支,这时候会列出所有的分支,然后当前分支前会添加一个*,然后我们的
    3.git checkout dev 切换到目标分支上,比如我们要切换到dev的分支上
    4.这时候对readme.txt文件进行修改,然后添加 提交 git add . ;git commit -m "我又提交东西了"
    5.cat readme.txt 发现文件改变了
    6.git checkout master 切换到主分支
    7.cat readme.txt 发现文件又没有改变
    8.git merge dev 将dev分支上的信息整合到主分支上
    9.cat readme.txt 发现文件变成了改变后的状态
    10.git branch -d dev 删除了分支
    11.git branch 这时候查看分支,已经没有dev这个分支了

    总结创建分支的命令如下:

    • git branch 查看分支
    • git branch name 创建分支
    • git checkout name 切换分支
    • git checkout -b name创建+切换分支
    • git merge name 合并某个分支到当前分支
    • git branch -d name 删除分支

    2、如何解决冲突?

    如下demo:

    1. git checkout -b fenzhi 创建并转到分支上

    2. 修改文件readme.txt git add readme.txt git commit -m "this is wenjian"

    3. git checkout master切换回去

    4. 修改文件readme.txt git add readme.txt git commit -m "this is wenjian"

    5. git merge fenzhi 将两个分支合并

    6. git status 出现了conflict (content) :merge conflict in readme.txt这种提示,表示有分支冲突

    7. git status也可以看到提示冲突
      1.<<<<<<<<<<<<< HEAD //表示主分支的内容
      2.66666666666 //主分支提交的内容
      3.----------- //分隔符
      4.5555555555 //分支上提交的内容
      5.>>>>>>>>>>>>>fenzhi //分支的名字

    8. 你可以在文件里进行修改了,合并还是咋地,爱咋咋地

    9. git commit -m "合并完之后再次提交"

    10. git log这样你就看到了提交的各种历史记录

    3、分支管理策略

    合并分支 git一般来说是“fast forward”模式,这种模式删除分支,丢掉分支信息,我们用--no-ff这个来处理

    1. git checkout -b dev创建一个分支
    2. 修改文件,
    3. git add readme.txt (此时没有commit)
    4. git checkout master 这里切换到主分支上
    5. git merge --no-ff -m "merge with no-ff" dev 合并两个分支,注意这里用到了 --no-ff 参数,表示禁用fast forward模式
    6. git branch -d dev 删除分支 执行结果会返回delete branch dev (was edee06c)edee06c的意思就是版本号
    7. git branch //检查是否删除成功
    8. git log --graph --pretty=oneline --abbrev-commit这句话我还没有分清各个的意思
    9. 但是8点执行下的,还能看到edee06c这个版本号,被删分支的版本号还在
      分支策略:
      一般来说,master都是比较稳定的一个版本,需要发布的版本,一般情况下不允许在上边干活,在新建的分支上干活,然后分支代码稳定后就可以合并到master上来

    7、bug分支

    每个bug都可通过一个分支来修复,修复完成够,合并各个分支,然后将临时分支删除了
    业务场景如下:

    1. master是要发版的代码,然后dev是正在开发的代码(手动在dev的readme.txt中添加一行数据) 现在发现master上有个bug第一行需要添加一段代码,但是这个时候dev的代码还不能提交肿么办?
    2. 在dev的分支上 git stash 将目前的分支藏起来,这个时候git status就没有任何变化了,
    3. 然后新建一个分支 error 在error完成修改提交
    4. 回到主分支master上,进行合并,修复生产bug 删除error分支
    5. 回到dev的分支上,代码还是藏了开发代码后修复bug之前的代码
    6. git stash list 查看所有隐藏的代码
    7. 要恢复代码有两种方式 git stash apply /git stash pop
    8. 取出来后需要删除stash储存的东西 git stash drop

    8、多人协作:

    相关文章

      网友评论

          本文标题: git命令的学习

          本文链接:https://www.haomeiwen.com/subject/wmswuxtx.html