码迷,mamicode.com
首页 > 其他好文 > 详细

Git的使用

时间:2017-12-01 19:35:10      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:作品   logs   lca   keygen   链接   git pull   版本   查看文本   关闭窗口   

Git的使用

配置Git-SSH

  1. 在Windows下打开Git Bash
  2. 输入ssh-keygen -t rsa -C "注册邮箱"
  3. 输入start ~/.ssh/id_rsa.pub 也可直直接在C/用户主目录/.ssh/中找到id_rsa.pub文件。
  4. 记事本打开id_rsa.pub文件,里面的内容就是ssh key。
  5. 登陆Git,打开"SSH Keys"页面,把上一步中文件夹中的所有内容复制,点击Add即可。 https://github.com/settings/keys

    创建版本库

  6. 创建一个新目录两种方式:
    1)直接电脑创建文件夹:在任意地方新建文件夹后,右键选择GitBush Here.
    2)Git命令创建如下所示:
    技术分享图片
    pwd:查看所在地址,如果想在其他位置创建就像执行,例如:cd D:就是在D盘。
  7. 通过 git init 命令把这个目录变成Git可以管理的仓库。
    技术分享图片
    瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件。
  8. 在文件夹中新建一个记事本随便命名。xx.txt
  9. git add xx.txt命令 告诉Git,把文件添加到版本库
  10. git commit -m "添加了一个记事本文件" 其中git commit命令是告诉Git,把文件提交到仓库,-m后面输入的是本次提交的说明,可以输入任何内容
    git commit命令执行成功后会告诉你,1个文件被改动(xx.txt文件),插入了两行内容(xx.txt有两行内容)。

    版本退回

  11. git log 命令显示从最近到最远的提交日志,如果感觉显示的信息过多可以输入git log --pretty=oneline 这样只会显示版本号和提交说明。如图所示:
    技术分享图片
  12. 如果我们要回退到上一个版本,命令就是
    git reset --hard HEAD^
    在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
  13. 如果我们对上面的操作后悔,在窗口还没有关闭的情况下我们可以向上找到我们想回到的版本的commit id也就是3628164...882e1e0。我们要输入的命令如下:
    git reset --hard 3628164。 版本号不需要写全前几位即可。
    cat xx.txt 查看文本内容。
  14. 如果已经关闭窗口或者已经重启电脑,我们可以执行以下命令:
    git reflog 查看历史命令如下所示:
    技术分享图片
    我们就可已通过git reset --hard commit id来找回想回到的版本

    工作区和暂存区

  15. 我们现在xx.txt中添加点内容
  16. 在工作区新建一个记事本xxx.txt,并添加一点内容
  17. 使用git status命令。
  18. 文件夹名会是红色,并且会告诉我们xx文件夹被修改了,xxx文件夹 Untracked还没被添加。
  19. 使用两次git add
  20. git status再次查看 ,文件夹名会变成绿色。
  21. 整体操作如图所示:
    技术分享图片
  22. 这个操作会让我们的两个文件夹存放在暂存区,我们还需要执行一步,把文件提交到分支如下:
  23. git commit -m "更待xx文件夹,新添加xxx文件夹"
  24. 我们再执行git status 会显示nothing。表示我们没有在对工作区做修改。如图所示:
    技术分享图片
  25. 整体流程图:
    技术分享图片

    管理修改

  26. 只能先git add之后的才能经过git commit提交到分支上。
  27. 只要对某个文件进行修改,修改后都要git add一下在提交。
  28. git diff HAED -- xx.txt 命令:可以查看工作区和版本库里面的最新版本的区别。

    撤销修改

  29. 共有三种情况:
    1)修改了内容,但是没有添加到暂存区也就是没有执行git add命令。
    可以直接使用git checkout -- xx.txt。文件就被还原到修改前的内容。
    2)修改了内容并且执行了git add但是没有提交,也就是没有执行git commit命令。
    可以使用git reset HEAD xx.txt 把文件从暂存区的修改退回到工作区,也就是执行git add命令之前。
    在使用git checkout -- xx.txt。文件就被还原到修改前的内容。
    3)修改了内容并且执行了git commit命令也就是提交了。
    我们可以使用回退版本库,git reflog查看历史提交操作。找到之前的版本使用git reset --hard commitid 。就回到了上次提交的版本了。
    (!!!!!这个操作的前提是还没有将本地的版本库提交到远程库上)

    删除文件

  30. git rm xx.txt删除文件
  31. git commit 提交到分支

    添加远程库

  32. 选中将要远程的文件夹右键,点击Git Bash Here。
  33. 输入Git init
  34. 输入git add 项目文件夹名
  35. 输入git commit -m ""
  36. 登陆Git官网Git
  37. New repository,起一个项目名字,其他默认设置。点击Create即可。如图所示:
    技术分享图片
  38. 目前GitHub上的这个仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。如图所示:
    技术分享图片
  39. 接下来我们与本地仓库关联,我们可以直接从上图中圈出的地方复制,在命令版界面粘贴,也可以手写命令如下:
    git remote add origin git@github.com:自己的账号名/文件名(步骤5中起的).git
  40. 把本地库的所有内容推送到远程库上(如果用的复制直接在上一步就复制的是两步直接敲回车即可)手写如下:
    git push -u origin master
    这样我们就把我们的项目推送到GitHub上了,如图所示:
    技术分享图片
  41. 使用命令git push -u origin master第一次推送master分支的所有内容;
  42. 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

    从远程库克隆

  43. 新建一个文件夹,右键GitBashHere
  44. 在GitHub官网找到要克隆的项目,在项目的界面点击克隆或下载,复制其ssh key。如图所示:
    技术分享图片
  45. 输入git clone 粘贴刚刚复制的内容也可以手写
  46. 如果成功克隆如图所示:
    技术分享图片
    (文件夹中也会出现项目)
  47. cd 项目名 ls 会显示其中所有的内容

    创建与合并分支

  48. git checkout -b fz 创建一个分支,然后切换到该分支。
    git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
    git branch fz
    git checkout fz
  49. git branch命令查看当前分支。
    git branch命令会列出所有分支,当前分支前面会标一个*号。
  50. 对xx.txt做个修改。
  51. git add xx.txt
  52. git commit -m "修改了xx.txt"
  53. fz分支的工作完成,我们切换回master分支:git checkout master
    注意:切换回master分支之后,我们查看xx.txt文件,刚刚对文件进行的修改不见了。因此,我们要把分支的工作成果合并到master分支上如下:
  54. git merge fz
    git merge命令用于合并指定分支到当前分支。合并后,再查看xx.txt的内容,就可以看到,和fz分支的最新提交是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向fz的当前提交,所以合并速度非常快。

  1. 合并完成后我们就可以删除fz分支了 git branch -d dev
  2. git branch 删除后再次查看branch,就只剩下master分支了
  3. 整体操作如图:
    技术分享图片

    解决冲突

  4. 创建并切换分支
  5. 对文件进行修改,添加,提交
  6. 切换到master分支
  7. 对文再次件进行修改,添加,提交
  8. 合并,在这里会出错!!
  9. 查看状态,也可以在文件夹中直接查看,文件中查看的情况如图Case diagram所示:
    技术分享图片
  10. 对文件再次进行修改,添加,提交
  11. 用带参数的git log也可以看到分支的合并情况:git log --graph --pretty=oneline --abbrev-commit
  12. 删除分支
  13. 整体操作图如下:
    技术分享图片

    分支管理

    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

--no-ff方式的git merge
技术分享图片

  1. 在实战开发时我们团队的分支就如图所示:
    技术分享图片

    Bug分支

    在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

  • 当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:
    并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
  1. 幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作: git stash
  2. 用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
    首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
  3. 修复bug
  4. 修复完成后,切换到master分支,并完成合并,最后删除issue-101分支。
  5. 切换到fz,在执行一次git stash
  6. git stash list查看我们之前的工作区存放的位置
  7. 恢复两种办法:
    a.用 git stash apply.但是恢复后,stash内容并不删除,你需要用git stash drop来删除
    b.git stash pop
  8. 你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
    git stash apply stash@{0}

    Feature分支

    软件开发中,总有无穷无尽的新的功能要不断添加进来。

添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

  • !!!这个分支我们需要强行删除
  • git branch -D feature-vulcan

    多人协作

  1. 推送分支
    a.推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
    git push origin master
    b.如果要推送其他分支,比如dev,就改成:
    git push origin dev

但是,并不是一定要把本地分支往远程推送

  • master分支是主分支,因此要时刻与远程同步;

  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

    更新远程代码到本地仓库

  1. 方法1
    $ git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master

$ git log -p master.. origin/master//比较本地的仓库和远程参考的区别

$git merge origin/master把远程下载下来的代码合并到本地仓库,远程的和本地的合并

  1. 方法2
    直接使用git pull命令
    ----------

命令归总

文件名:例如xx.txt

  1. 退回上一个版本库: git reset --hard HEAD^
  2. 退回上100个版本库: git reset --hard HEAD~100
  3. 退回指定版本库: git reset --hard commit_ID
  4. 查看提交历史: git log
  5. 查看历史命令: git reflog
  6. 查看文件内容: cat 文件名
  7. 查看状态: git status
  8. 提交: git commit -m "备注"
  9. 添加: git add 文件名
  10. 查看工作区与版本库的最新区别:git diff HEAD -- 文件名
  11. 撤回对工作区的修改:git checkout -- 文件名
  12. 撤回对暂存区的修改:git reset HEAD 文件名
  13. 从版本库中删除文件:git rm 文件名
  14. 恢复文件到最新版本:git checkout -- 文件名
  15. 关联远程库: git remote add origin git@server-name:path/repo-name.git
  16. 第一次推送分支: git push -u origin master
  17. 推送分支: git push origin master
  18. 查看分支: git branch
  19. 创建分支: git branch <name>
  20. 切换分支: git checkout <name>
  21. 创建+切换分支: git checkout -b <name>
  22. 合并某分支到当前分支:git merge <name>
  23. 删除分支: git branch -d <name>
  24. 查看分支合并情况:git log --graph --pretty=oneline --abbrev-commit
  25. 合并分支并禁Fast forward:$ git merge --no-ff -m "备注"
  26. 查看分支存放的位置:git stash list
  27. 恢复存放在stash的分支:

a. git stash apply但是恢复后,stash内容并不删除git stash drop 删除

b. git stash pop 恢复的同时把stash内容也删

  1. 恢复指定的stash:git stash apply stash@{0}
  2. 强制删除:git branch -D <name>

    Git学习分享

    陈嘉栋:https://github.com/chenjd/my-git

廖雪峰:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

技术分享图片
本作品由A_AiTing采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

Git的使用

标签:作品   logs   lca   keygen   链接   git pull   版本   查看文本   关闭窗口   

原文地址:http://www.cnblogs.com/A-aiting/p/7943965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!