Git的使用

来源:互联网 发布:access 找不到数据库 编辑:程序博客网 时间:2024/06/10 21:33

#

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

创建版本库

  1. 创建一个新目录两种方式:
    1)直接电脑创建文件夹:在任意地方新建文件夹后,右键选择GitBush Here.
    2)Git命令创建如下所示:

    pwd:查看所在地址,如果想在其他位置创建就像执行,例如:cd D:就是在D盘。
  2. 通过 git init 命令把这个目录变成Git可以管理的仓库。

    瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件。
  3. 在文件夹中新建一个记事本随便命名。xx.txt
  4. git add xx.txt命令 告诉Git,把文件添加到版本库
  5. git commit -m "添加了一个记事本文件" 其中git commit命令是告诉Git,把文件提交到仓库,-m后面输入的是本次提交的说明,可以输入任何内容
    git commit命令执行成功后会告诉你,1个文件被改动(xx.txt文件),插入了两行内容(xx.txt有两行内容)。

版本退回

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

    我们就可已通过git reset --hard commit id来找回想回到的版本

工作区和暂存区

  1. 我们现在xx.txt中添加点内容
  2. 在工作区新建一个记事本xxx.txt,并添加一点内容
  3. 使用git status命令。
  4. 文件夹名会是红色,并且会告诉我们xx文件夹被修改了,xxx文件夹 Untracked还没被添加。
  5. 使用两次git add
  6. git status再次查看 ,文件夹名会变成绿色。
  7. 整体操作如图所示:
  8. 这个操作会让我们的两个文件夹存放在暂存区,我们还需要执行一步,把文件提交到分支如下:
  9. git commit -m "更待xx文件夹,新添加xxx文件夹"
  10. 我们再执行git status 会显示nothing。表示我们没有在对工作区做修改。如图所示:
  11. 整体流程图:

管理修改

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

撤销修改

  1. 共有三种情况:
    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 。就回到了上次提交的版本了。
    (!!!!!这个操作的前提是还没有将本地的版本库提交到远程库上)

删除文件

  1. git rm xx.txt删除文件
  2. git commit 提交到分支

添加远程库

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

从远程库克隆

  1. 新建一个文件夹,右键GitBashHere
  2. 在GitHub官网找到要克隆的项目,在项目的界面点击克隆或下载,复制其ssh key。如图所示:
  3. 输入git clone 粘贴刚刚复制的内容也可以手写
  4. 如果成功克隆如图所示:

    (文件夹中也会出现项目)
  5. cd 项目名 ls 会显示其中所有的内容

创建与合并分支

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

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向fz的当前提交,所以合并速度非常快。
8. 合并完成后我们就可以删除fz分支了 git branch -d dev
9. git branch 删除后再次查看branch,就只剩下master分支了
10. 整体操作如图:

解决冲突

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

分支管理

通常,合并分支时,如果可能,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}

多人协作

  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把远程下载下来的代码合并到本地仓库,远程的和本地的合并

  2. 方法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内容也删
28. 恢复指定的stash:git stash apply stash@{0}
29. 强制删除:git branch -D <name>

Git学习分享

陈嘉栋:https://github.com/chenjd/my-git
廖雪峰:Git教程

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

原创粉丝点击