美文网首页
Git学习笔记

Git学习笔记

作者: 逍遥AMI | 来源:发表于2018-02-08 18:13 被阅读0次

Git是一个分布式的版本管理工具,虽然在工作中并没有用到它,但是自己还是忍不住去了解它,去学会使用它。这是我作为一个新手的入门学习笔记

安装Git

Linux上安装Git

  • 试着输入git,看看系统有没有安装Git,若没有会提示你如何安装(没有实践)

在Mac OS X上安装Git

  • 第一种是安装homebrew,然后通过homebrew安装Git,具体方法可以参考homebrew的文档。
  • 第二种是直接从App Story安装Xcode,Xcode集成了Git,你需要运行Xcode,选择菜单"Xcode"->"Preferences",在弹出窗口找到"Downloads",选择"Command Line Tools",点"Install"就可以完成安装了。

在Windows上安装Git

  • 从Git官网直接下载安装程序,然后按默认选项安装即可
  • 安装完成后,在开始菜单里找到"Git"->"Git Bash",打开一个类似命令行的窗口说明Git安装成功了

安装完成后还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

Git使用

linux命令:
创建一个目录:$ mkdir directoryName
进入目录:$ cd directoryName
查看当前所在路径:$ pwd
查看目录(包括隐藏):$ ls -ah
查看文件:$ cat file.txt
删除文件:$ rm file.txt

创建版本库
$ git init:将当前目录变成Git可以管理的仓库

添加文件到版本库
$ git add fileName.txtgit add命令告诉Git,将文件添加到仓库

提交文件到仓库
$ git commit -m "description"git commit命令告诉Git,把文件提交到仓库,-m后面输入的是本次提交的说明,可以输入任意内容,commit可以一次提交很多文件,所以你可以多次add不同的文件

查看仓库当前的状态
$ git status:修改文件后, git status命令可以让我们时刻掌握仓库当前的状态

查看文件的变化
$ git diffgit diff就是查看difference,显示的格式正是Unix通用的diff格式
$ git diff HEAD -- fileName.txt:查看工作区和版本库里面最新版本的区别

查看历史记录
$ git log:查看历史记录;--pretty=oneline参数减少输出信息,HEAD表示当前版本

版本回退
$ git reset --hard HEAD^·:当前版本回退到上一个版本
$ git reset --hard commit_id:指定回到未来的某个版本(版本号没必要写全,前几位就可以了,Git会自动去找
Git提供了一个命令git reflog用来记录你的每一次命令

工作区和暂存区介绍
工作区(Working Directory):就是你在电脑里能看到的目录;工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库(Repository。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支

丢弃更改
$ git checkout -- file:可以丢弃工作区的修改,让这个文件回到最近一次git commitgit add时的状态
$ git reset HEAD file:可以把暂存区的修改撤销掉(unstage),重新放回工作区,当我们用HEAD时,表示最新的版本

删除文件
$ git rm fileName.txt+git commit:会从版本库中删除该文件

和远程仓库通过SSH传输

  • 创建SSH Key
    • 查看用户主目录下,是否有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。
    • 如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:$ ssh-keygen -t rsa -C "youremail@example.com",需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可(id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,id_rsa.pub是公钥)
  • 绑定SSH Keys
    • 登陆GitHub,打开“Account settings>SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
  • 添加远程库
    • 登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库
    • 这个learngit仓库还是空的,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库
      • 根据GitHub的提示,在本地的learngit仓库下运行命令:$ git remote add origin git@github.com:michaelliao/learngit.git添加后,远程库的名字就是origin
      • 把本地库的所有内容推送到远程库上:$ git push -u origin master(把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
      • 之后本地提交,通过命令:$ git push origin master

克隆远程库
$ git clone git@github.com:test/gitskills.git:克隆一个本地库

GitHub还给出了其它地址;Git支持多种协议,默认的git://使用SSH);从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

$ git remote:查看远程库的信息
$ git remote -v:显示更详细的信息,显示了可以抓取和推送的origin的地址
$ git remote rm origin:删除已有的GitHub远程库

创建与合并分支
$ git checkout -b branchName:创建并切换分支,相当于以下两条命令:$ git branch dev$ git checkout dev
$ git branch:查看当前分支,列出所有分支,当前分支前面会标一个*号
$ git merge branchName:合并指定分支到当前分支
$ git branch -d branchName:删除指定分支
$ git log --graph --pretty=oneline --abbrev-commit:查看分支的合并情况

通常合并分支时,Git会用Fast forward模式,这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息;--no-ff参数,表示禁用Fast forward:$ git merge --no-ff -m "merge with no-ff" branchName

工作现场
$ git stash:把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash list:查看工作现场
$ git stash apply:恢复工作现场,恢复后,stash内容并不删除,需要用git stash drop来删除
$ git stash pop:恢复的同时把stash内容也删了
$ git stash apply stash@{0}:用git stash list查看,然后恢复指定的stash

推送分支
$ git push origin master:把该分支上的所有本地提交推送到远程库。推送时,指定本地分支,Git会把该分支推送到远程库对应的远程分支上
$ git branch --set-upstream dev origin/dev:指定本地dev分支与远程origin/dev分支的链接

多人协作的工作模式:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

创建标签
$ git tag <name>:可以打一个新标签,默认标签是打在最新提交的commit上的,需要切换到需要打标签的分支上(创建带有说明的标签:用-a指定标签名,-m指定说明文字;还可以通过-s用私钥签名一个标签)
$ git tag:查看所有标签
$ git tag vcommitId:在指定commit上打标签
$ git show <tagname>:查看标签信息
$ git tag -d vcommitId:删除标签
$ git push origin <tagname>:推送某个标签到远程
$ git push origin --tags:一次性推送全部尚未推送到远程的本地标签
$ git push origin :refs/tags/vcommitId:删除远程标签,得先从本地删除

忽略特殊文件

  1. Git工作区的根目录下创建一个特殊的.gitignore文件(浏览:https://github.com/github/gitignore提供了各种配置文件)
  2. 把要忽略的文件名填进去,Git就会自动忽略这些文件
  3. 把.gitignore也提交到Git

添加被.gitignore忽略文件
$ git add -f App.class:可以用-f强制添加到Git
$ git check-ignore -v App.class:检查是否被忽略

配置别名
$ git config --global alias.st status:告诉Git,以后st就表示status
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit":一个打印日志的别名

搭建Git服务器

  1. 安装git:$ sudo apt-get install git
  2. 创建一个git用户,用来运行git服务:$ sudo adduser git
  3. 创建证书登录:收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
  4. 初始化Git仓库:先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:$ sudo git init --bare sample.git;Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:$ sudo chown -R git:git sample.git
  5. 禁用shell登录:出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
    git:x:1001:1001:,,,:/home/git:/bin/bash改为:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell,这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
  6. 克隆远程仓库:通过git clone命令克隆远程仓库了,在各自的电脑上运行:
    $ git clone git@server:/srv/sample.git

Git使用补充

git checkout .:本地所有修改的,没有的提交的,都返回到原来的状态
git批量删除文件和批量提交

  • 批量删除
    • 方法一:(如果是删除当前文件夹下所有文件,方法一将删除该空文件夹一并删除,不会保留文件夹)操作:(cd到你要删除的目录下或者 * 可用“”文件夹名“”代替) -r 代表 recursively(递归)$ git rm * -r,$ git commit -m "clear"
    • 方法二:手动在文件管理器中删除批量文件,然后执行命令:(如果是删除当前文件夹下所有文件,方法二仍会保留该空文件夹)$ git add .$ git commit -m "clear",最后同步到远程仓库,执行:$ git push
  • 批量提交(命令有版本的区别,查看当前版本:$ git --version)
    • git add -A
    • git add .
    • git add -r
    • git add -ignore-removal .

相关文章

  • 学习笔记| git深入浅出 Part1_快速操作指南

    Git专题 学习笔记| git深入浅出 Part1_快速操作指南 学习笔记| git深入浅出 Part2_Git...

  • git 入门

    git 入门学习笔记----3个入门命令:git init、git add、git commit -v 学习场景(...

  • git记录

    Git Magic图解gitgit 学习笔记git游戏(学习)1、消除文档路径中文乱码git config --g...

  • Git学习笔记--常用命令整理

    超实用Git学习笔记 Git全局配置git config --global user.name "用户名"git ...

  • Git常用命令与学习总结

    安装Git Git的下载地址:Git官网下载地址 学习网址 git 学习笔记- Book 在线练习地址 基础常用指...

  • git学习笔记(二)—— git的简单操作

    这是本系列学习笔记的第二篇git 学习笔记(一)—— 初识 git 前言 本篇文章将简要的介绍 Git 的一般操作...

  • 关于crlf

    Git学习笔记:Git设置CRLF(行尾换行符) git config --global core.autocrl...

  • GIT

    Git学习笔记 Git 与 Github对接: cd到当前文档 git init初始化git git add -A...

  • Git学习笔记

    git学习笔记 声明 本文是本人学习Git过程中所做的笔记,以便日后查阅,文中多有错漏之处,不建议用作学习材料,文...

  • Git学习笔记

    git 学习笔记 注册个人信息 git config --global user.name(你的用户名) git ...

网友评论

      本文标题:Git学习笔记

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