你好Git请多多指教

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文件(浏览:github.com/github/giti…提供了各种配置文件)
  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 clone指令时太慢或者失败
    • 利用shadowsocks,设置socks5代理:git config --global http.proxy 'socks5://127.0.0.1:1080';git config --global https.proxy 'socks5://127.0.0.1:1080'
    • 只拉取最近的一个revision:git clone --depth=1 https://github.com/author/test.git;查看历史版本:git fetch --unshallow
  • pull 和 fetch
    • git pull:从远程拉取最新版本到本地,自动合并(git gull origin master)
    • git fetch:从远程获取最新版本到本地,不会自动合并(git fetch origin master)
    • 使用git fetch更加安全,可以在merge之前看清楚再合并:git log -p(修改详情) master origin/master;git log origin/master --oneline;git merge origin/master
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值