Git学习笔记

2018-02-08  本文已影响0人  逍遥AMI

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

安装Git

Linux上安装Git

在Mac OS X上安装Git

在Windows上安装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传输

克隆远程库
$ 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批量删除文件和批量提交

上一篇 下一篇

猜你喜欢

热点阅读