下载安装
Git下载地址https://git-scm.com/downloads 安装一般选择default editor, 传输模式选择openssl
配置git 用户名及邮箱
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
证书生成及配置
ssh 公钥认证是ssh认证的方式之一。通过公钥认证可实现ssh免密码登陆,git的ssh方式也是通过公钥进行认证的。
使用 ssh-keygen 时,请先进入到 ~/.ssh 目录,不存在的话,请先创建。并且保证 ~/.ssh 以及所有父目录的权限不能大于 711
对于公钥和私钥文件也是: 当前用户一定要有执行权限,其他用户最多只能有执行权限。
不指定文件名和密钥类型的时候,默认生成的两个文件是:
id_rsa id_rsa.pub 第一个是私钥文件,第二个是公钥文件
---------------------题外话----------------------------------------------------------------------
要达到A机器ssh登录B机器无需输入密码;
先在A机器 ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub,将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_dsa.pub >> ~/.ssh/authorized_keys;要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。
设置authorized_keys权限 设置.ssh目录权限
$ chmod 600 authorized_keys
$ chmod 700 -R .ssh
加密方式选 rsa|dsa均可以,默认dsa。可以通过 -f 选项指定生成文件的文件名,不指定会询问 filename to save the key。 后面会询问是否需要输入密码。输入密码之后,以后每次都要输入密码。请根据你的安全需要决定是否需要密码,如果不需要,直接回车。
-C选项是公钥文件中的备注
客户添加秘钥
1、把专用密钥添加到 ssh-agent 的高速缓存中:
ssh-add ~/.ssh/id_dsa
2、从ssh-agent中删除密钥:
ssh-add -d ~/.ssh/id_xxx.pub
3、查看ssh-agent中的密钥:
ssh-add -l
------------------------------------------------------------------------------
SSH 公钥设置 (配置Github或码云。。。。)
https://gitee.com/help/articles/4191#article-header0
验证GIT登录
TortoiseGit安装配置使用
查看分支:git branch
创建分支:git branch <name>
删除分支:git branch -d <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
[fengdj@hs-192-168-54-161 clone]$ git merge dev
Updating 1e6f2ce..a722c1b
Fast-forward
test.txt | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
拉取服务器的代码的出现了冲突,记录下以供后续参考:
1.用git pull来更新代码的时候,遇到了下面的问题:error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.php Please, commit your changes or stash them before you can merge. Aborting
或
error: Your local changes to the following files would be overwritten by merge:
03yxxxstemLIB/libxxxober/libxxxber.dll
Please commit your changes or stash them before you merge.
通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。
git stash
git pull
git stash popgit stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git pull:拉取服务器上的代码;
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
初始化一个Git仓库,使用git init命令。或者clone一个仓库。
1. 使用git init命令
- 进入某个空的文件夹下,打开
Git Bash
命令窗口输入git init
- 执行完上面的命令,当前目录下会自动生成
.git
隐藏文件夹,该隐藏文件夹就是git
版本库 - 也可以在当前目录下的指定子目录创建版本库 git init subDir
- 裸仓库(bare仓库):所谓的裸仓库,就是没有工作区的仓库,直接将核心内容放置于指定目录 git init --bare
2. git clone -b +分支 + 地址
$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.
添加文件到Git仓库,分两步:
使用命令git add <file>,注意,可反复多次使用,添加多个文件;
使用命令git commit -m <message>,完成。
git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,
readme.txt被修改过了,但还没有准备提交的修改。
git diff readme.txt
提交修改和提交新文件是一样的两步,第一步是git add:
$ git add readme.txt
$ git commit -m "add distributed"
版本回退
上一个版本就是HEAD^,上上一个版本就是HEAD^^,
当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
git reset --hard HEAD^
git reset --hard 71f63 恢复到指定版本
Git提供了一个 命令git reflog用来记录你的每一次命令
git log 此命令可以查看commit提交历史记录,等同于git reflog | grep commit
git reflog 除了可看commit记录还有reset记录
现在假定是凌晨3点,你不但写了一些胡话,还git add到暂存区了:
$ git add readme.txt
在commit之前,你发现了这个问题。用git status查看一下,修改只是添加到了暂存区,还没有提交:
用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset --hard
指的是恢复到某一个库版本。
git reset HEAD <file>...
指的是拉最近一次提交到版本库的文件恢复暂存区某一个文件。git reset f0a1684
<file>. 指定库版本拉文件到暂存区,然后再git checkout -- <file>
命令来把 暂存区文件拉到工作区(有时候工作区的修改可能不尽如人意,需要
git checkout
将暂存区内容还原到工作区。)
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
删除暂存区指定文件:
git
rm
--cached readme.txt //
将暂存区中的内容删除,工作区中对应的文件并不会受到影响。
git
rm
readme.txt
//不但将暂存区中的内容删除,并且工作区中对应的文件也会被删除。上面两个命令如果要删除多个文件使用空格分隔文件名称即可。
清空暂存区,其实就是删除.git目录下的index文件
确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
----
---------
---------------------------需要注意的---------------------------------------------------------------------
git commit操作的是本地库,git push操作的是远程库。
git commit是将本地修改过的文件提交到本地库中。
git push是将本地库中的最新信息发送给远程库。
--------------------------------------------------------------------------------------------
--------------------
----
GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git
请千万注意,把上面的michaelliao替换成你自己的GitHub账户名
下一步,就可以把本地库的所有内容推送到远程库上:将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
$ git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,
Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,
在以后的推送或者拉取时就可以简化命令。
$ git push origin master 如果当前分支只有一个追踪分支,那么主机名都可以省略。//git push 默认只推送当前分支,这叫做simple方式。
git可以团队开发,难免会出现开发错误,可能要明确责任是由谁造成的。
加入在根目录下有index.html,那么可以使用如下命令:
[Shell] 纯文本查看 复制代码
1
$ git blame index.html
git blame -L 2,5 index.html