git命令的学习

第一部分是文档,为了日后查看方便放到了前边[可能敲错了,详见阮一峰老师的文章]
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 "[email protected]"

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 "[email protected]"
  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命令的学习)