复习git知识

  1. mkdir learngit 创建文件
  2. cd learngit 进入文件
  3. pwd 显示当前目录
  4. git init 初始化一个Git仓库
  5. git add 添加文件,可反复使用,添加多个文件
  6. git commit -m <message 本次提交的说明> 提交文件,可一次性提交多个文件
    $ git add file1.txt
    $ git add file2.txt file3.txt
    $ git commit -m “add 3 files.”
  7. git status 查看工作区状态
  8. git diff 查看修改的内容
  9. git log 查看提交历史,以便确定要回退到哪个版本
  10. HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100
    Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
    git reset --hard HEAD^
  11. git reflog 查看命令历史,以便确定要回到未来的哪个版本
    $ git reset --hard 1094a
    HEAD is now at 83b0afe append GPL
  12. 工作区和暂存区

工作区: 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区
暂存区: 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
13. Git管理的是修改
每次修改,如果不用git add到暂存区,那就不会加入到commit中
14. git diff HEAD – readme.txt 命令可以查看工作区和版本库里面最新版本的区别
15. 撤销修改:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
16. 删除文件
rm test.txt 删除工作区的文件
git rm test.txt
git commit -m “remove test.txt” 从版本库删除该文件
git checkout –test.txt 用版本库中的版本替换工作区的版本,无论工作区是修改还是删除,都可以”一键还原”
注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!
17. 远程仓库
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C “youremail@example.com”
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

  1. 添加远程仓库
    登录GitHub,在右上角的+号下选择new repository
    填写Repository name, 点击“Create repository”按钮,就成功地创建了一个新的Git仓库
    在本地的learngit仓库下运行命令,关联本地与GitHub上的仓库
    $ git remote add origin git@github.com:lixiaona88/learngit.git
    把本地的所有内容推送到远程库上
    $ git push -u origin master
    Counting objects: 20, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (15/15), done.
    Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
    Total 20 (delta 5), reused 0 (delta 0)
    remote: Resolving deltas: 100% (5/5), done.
    To github.com:michaelliao/learngit.git
  • [new branch] master -> master
    Branch ‘master’ set up to track remote branch ‘master’ from ‘origin’.
    把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
    推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:

从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
19. 从远程库克隆
新建一个仓库gitskills
克隆到本地:
$ git clone git@github.com:lixiaona88/gitskills.git
20. 创建与合并分支
首先我们创建dev分支,然后切换到dev分支:
$ git checkout -b dev
Switched to a new branch ‘dev’
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch ‘dev’
然后用git branch命令查看当前分支:
$ git branch

  • dev
    master
    git branch命令会列出所有分支,当前分支前面会标一个*号
    然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行,提交
    $ git add readme.txt
    $ git commit -m “branch test”
    [dev b17d20e] branch test
    1 file changed, 1 insertion(+)
    现在,dev分支的工作完成,我们就可以切换回master分支:
    $ git checkout master
    Switched to branch ‘master’
    现在,我们把dev分支的工作成果合并到master分支上:
    $ git merge dev
    Updating d46f35e…b17d20e
    Fast-forward
    readme.txt | 1 +
    1 file changed, 1 insertion(+)
    git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的
    合并完成后,就可以放心地删除dev分支了:
    $ git branch -d dev
    Deleted branch dev (was b17d20e).
    删除后,查看branch,就只剩下master分支了:
    $ git branch
  • master
    查看分支: git branch
    创建分支: git branch
    切换分支: git checkout 或者 git switch
    创建 + 切换分支: git checkout -b 或者 git switch -c
    合并某分支到当前分支: git merge
    删除分支: git branch -d
  1. 解决冲突
    当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
    解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
    用git log --graph命令可以看到分支合并图
    $ git log --graph --pretty=oneline --abbrev-commit
  2. 分支管理策略
    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
    如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
    下面我们实战一下–no-ff方式的git merge:
    首先,仍然创建并切换dev分支:
    $ git branch -b dev
    Switched to a new branch ‘dev’
    修改readme.txt文件,并提交一个新的commit:
    $ git add readme.txt
    $ git commit -m “add merge”
    [dev f52c633] add merge
    1 file changed, 1 insertion(+)
    现在,我们切换回master:
    $ git switch master
    Switched to branch ‘master’
    准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward:
    $ git merge --no-ff -m “merge with no-ff” dev
    Merge made by the ‘recursive’ strategy.
    readme.txt | 1 +
    1 file changed, 1 insertion(+)
    因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
    合并后,我们用git log看看分支历史:
    $ git log --graph --pretty=oneline --abbrev-commit
  • e1e9c68 (HEAD -> master) merge with no-ff
    |\
    | * f52c633 (dev) add merge
    |/
  • cf810e4 conflict fixed
  1. Bug分支
    修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
    当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
    在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动
  2. Feature分支
    开发一个新feature,最好新建一个分支;
    如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
  3. 多人协作
    git remote 查看远程库的信息
    $ git remote
    origin
    git remote -v 显示远程库更详细的信息
    $ git remote -v
    origin git@github.com:michaelliao/learngit.git (fetch)
    origin git@github.com:michaelliao/learngit.git (push)
    上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
    git push origin master 推送分支
    git push origin dev 推送其他分支
    git pull 从远程抓取分支
    git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支
    git branch –set-upstream-to=origin/branch-name branch-name 简历本地分支和远程分支的关联
  4. git rebase
    rebase操作可以把本地未push的分叉提交历史整理成直线;
    rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
  5. 创建标签
    git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
    git tag 查看所有标签
    git show 查看标签信息
    git tag -a -m “标签说明信息”
    注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
  6. 操作标签
    git tag -d v1.0 删除标签
    git push origin v1.0() 推送某个标签到远程
    git push origin –tags 一次性推送全部尚未推送到远程的本地标签
    git tag -d v0.9 删除远程标签,先删除本地的标签
    git push origin :refs/tags/v0.9 再删除远程的标签
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值