Git notice
( Author:freesheep720 )
-
Git官网下载地址:https://link.zhihu.com/?target=https%3A//git-scm.com/downloads
-
输入用户名和邮箱:$ git config --global user.name “Your Name” // 输入用户名
$ git config --global user.email “email@example.com” // 输入邮箱 -
创建版本库:$ mkdir // 创建一个空目录(windows尽量别用中文目录)
$ cd // 进入该目录
$ git init // 初始化Git仓库
$ git add // 添加文件到仓库(删除文件用 $ git rm )
$ git commit -m // 提交文件到仓库 -
查看工作区状态:$ git status // 查看工作区状态
$ git diff //查看修改内容(diff 即 different) -
版本回退:$ git reset --hard commit_id // 回退版本,commit_id上一个版本写法HEAD^,
上上个版本写法为HEAD^^,太多写法为
HEAD~n
$ git log // 查看提交历史
$ git reflog // 查看历史命令 -
撤销修改:$ git checkout – file // 撤销文件在工作区的所有修改
$ git reset --HEAD // 撤销文件在暂存区的修改放回工作区 -
设置秘钥:$ ssh-keygen -t rsa -C “youremail@example.com” // 执行后生成.ssh目录,
里面有私钥id_rsa和公
钥id_rsa.pub两个文件 -
添加远程仓库:$ git --version // 查看Git版本
$ git config --global init.defaultBranch main // git在2.28.0上,重新设置git
默认分支master为main
$ git init // 工作空间创建.git文件夹(默认隐藏了该文件夹) 初始化
$ git add // 添加文件到暂存区
$ git commit -m //添加文件到仓库
$ git remote add origin gitlab当前仓库IP直接复制 .git // 关联远程仓库,执
行后可不必执行后面
两步(origin为远程库
默认命名)
$ git remote add origin http://xxxxxxxxx.git // 本地仓库和远程github关联
$ git pull --rebase origin main // 远程有readme.md,拉一下 (可跳过)
$ git push -u origin main // 推送main分支所有内容,后面更新推送
可去掉 -u ,main换成其他分支名称即
可(旧版main为master) -
删除远程库:$ git remote -v // 查看远程库信息
$ git remote rm // 根据名字删除远程库绑定 -
克隆仓库: $ git clone gitlab当前仓库IP直接复制 .git // 从gitlab克隆到本地
-
创建与合并分支:$ git branch <分支name> // 创建分支
$ git checkout 或者 git switch // 切换分支(Switch为新
写法)
$ git checkout -b 或者git switch -c // 创建+切换分支
(Switch为新写法法切换)
$ git branch // 查看分支
$ git merge // 合并某分支到当前分支
$ git branch -d // 删除分支 -
禁用Fast forward:$ git merge --no-ff -m <分支name> // --no-ff参数,表示
禁用Fast forward,禁用后合并要创建一个
新的commit,所以加上-m参数,把commit描述写进去
$ git log --graph --pretty=oneline --abbrev-commit // 查看分支历史 -
BUG分支:$ git stash // 保存当前工作现场
$ git stash list // 查看之前所保存的工作现场stash内容存储位置
$ git stash apply // 恢复但不删除stash内容,删除stash需要使用命令:
$ git stash drop 完成删除
$ git stash pop // 恢复且删除stash内容
$ git cherry-pick // 把bug提交的修改“复制”到当前分支 -
feature分支:$ git branch -D // 强行删除,-d 删除
-
抓取分支:$ git checkout -b origin/ // 多人协作其他人必须创建远程
origin的分支到本地
$ git pull // 把最新的提交从origin/抓下来(抓取失败需先执行下一条指令
指定链接再重新抓取)
$ git branch git branch --set-upstream-to origin/ // 指定本地分支与远程origin/分支的链接 -
Rebase变基:$ git log --graph --pretty=oneline --abbrev-commit // 查看历史分支
$ git rebase // 把本地未push的分叉提交历史整理成直线 -
tag标签:$ git tag <标签name> // 创建一个新标签为对指定分
支创建标签,可略
$ git tag //查看所有标签
$ git tag -a -m // 创建带有说明的标签,
用-a指定标签名,-m指定说明文字
$ git show // 查看文字说明
$ git push origin // 推送某个标签到远程
$ git push origin --tags // 一次性推送全部尚未推送到远程的本地标签
$ git tag -d // 删除本地创建的标签
$ git push origin :refs/tags/ // 从远程删除标签,如果没推送到远程
可不必 -
搭建Git服务器:
搭建Git服务器需要准备一台运行Linux的机器,建议用Ubuntu或Debian,假设已经有sudo权限的用户账号,开始安装:
(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