配置SSH
设置个人信息,git config --global user.name "2ge",git config --global user.email "444533452@qq.com"。
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:在电脑上运行$ ssh-keygen -t rsa -C "444533452@qq.com",生成公钥和私钥。在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,
创建一个新的仓库:在Repository name填入learngit,其他保持默认设置,
点击“Create repository”按钮,就成功地创建了一个新的Git仓库:目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:
$ git remote add origin https://github.com/long2ge/Spring-boot.git
请千万注意,把上面的michaelliao替换成你自己的GitHub账户名,
$ git remote add origin https://github.com/long2ge/Spring-boot.git
下一步,就可以把本地库的所有内容推送到远程库上:
$ git push -u origin master
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
git remote add origin https://github.com/long2ge/Spring-boot.git
小结:
要关联一个远程库,使用命令git remote add origin https://github.com/long2ge/Spring-boot.git。如果存在,先删除。git remote rm origin
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
注意:如果做了初始化,不可以直接push,需要先clone下来再push。
$ git remote add origin https://github.com/long2ge/Spring-boot.git,
git clone https://github.com/long2ge/Spring-boot.git 从服务器上将代码给拉下来
然后再推上去。如果没有初始化,则可以直接push
常见的git错误及解决方法
:warning: LF will be replaced by CRLF
$ rm -rf .git
$ git config --global core.autocrlf false
常用命令
两个版本间所有变更的文件列表
git diff --name-status HEAD~2 HEAD~3
git diff --name-status e209733 69767d0
.gitignore文件规则
/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
添加
git add somefile.txt 单个文件
git add *.txt txt文件
git add . 所有
提交
git commit -am "some msg" 所有
git commit -m "add msg to readme.txt" readme.txt 单个
git commit -C head -a --amend 增补提交,不会产生新的提交历史记录
撤销(还没有提交的修改)
git checkout head readme.txt todo.txt
git checkout head *.txt
git checkout head .
撤销提交
反转提交 git revert --no-commit head(相当于提交最近的一次提交的反操作)
把当前版本回退到上一个版本�,就可以使用git reset命令:
取消暂存 git reset head 或者 git reset head<filename>
$ git reset --hard HEAD^
$ git reset -- hard head^^
$ git reset --hard 3628164
标签
未当前分支最近一次提交创建标签 git tag 1.0(注意标签无法重命名)
git tag contacts_1.1(contact/1.1)contacts(为Contacts分支最近一次提交创建标签)
git tag 1.1 xxxx (为某次历史提交创建标签)
git tag 显示标签列表
git checkout 1.0 (检出标签 查看标签断面的很方便的方法,但是不能提交)
git branch b1.1 1.1 (git checkout -b b1.0 1.0) 由标签创建分支
git tag -d 1.0 删除标签
查看状态
git status 当前状态
git log 历史记录
gitk 查看当前分支历史记录
gitk <branchname> 查看某分支历史记录
gitk -all 查看所有分支
git branch -v 每个分支最后的提交
导出版本库
git archive --format=zip head> xx.zip
git archive --format=zip --prefix=xx1.0/head> xx.zip
导出两个版本之间修改过的文件
git archive -o ../12.zip 69767d0 $(git diff --name-only e209733 69767d0)
初始化
git clone <url> 克隆版本库(克隆之后会自动添加4个config,remote.origin.fetch,remote.origin.url,branch.master.remote,branch.master.merge)
git remote add <别名><远程版本库的URL> 添加远程版本库的别名(添加别名后会自动添加2个config,remote.origin.fetch,remote.origin.url)
git init --bare 创建一个无本地分支的库 当需要一个公用的中央库时,非常适合把它建成bare库。
分支
git branch 列出本地分支
git branck -a 列出所有分支
git branck<branchname> 基于当前分支的末端创建新分支
git checkout<branchname> 检出分支
git branch emputy xxxxx(基于某次提交,分支或者标签创建新分支)用来查看某个历史断面很方便
合并分支
git merge<branchname> 合并并提交 (如果发生了冲突,就不会自动提交。如果冲突很多,不想立即解决它们,可以直接使用git checkout head . 撤销)
git merge --no-conmmit 合并但不提交(--no-conmmit不生效。。。)
压合合并
git merge --squash<branchname> 压合合并后直接提交
git merge --squash --no-commit<branchname> 当两个合作开发一个新功能时,需要在一个分支上提交多次,开发完成之后再压合成一次提交
git cherry-pick --no-commit xxxxx 拣选合并 但是合并的提交只要比当前高2个版本就会出现莫名的冲突
重命名分支
git branch -m <branchname><newname> 不会覆盖已存在的同名分支
git branch -M<branchname><newname> 会覆盖已存在的同名分支
删除分支
git branch -d new2 如果分支没有被合并会删除失败
git branch -D new2 即使分支没有被合并也照删不误
解决冲突
冲突很少的时候,直接编辑有冲突的文件然后提交即可
冲突比较复杂时git merge tool (生成BACKUP,BASE,LOCAL和REMOTE四个文件,然后自动调用冲突解决工具,比较。解决之后手动删除.orig文件(冲突解决之前的文件备份),提交)
远程
git branch -r 列出远程分支
git remote prune origin 删除远程库中已经不存在的分支
git fetch origin (远程库的默认名别) 获取远程库但不合并
git pull origin(远程库的默认别名) 获取并且合并到当前本地分支
需要配置(branch.master.remote,branch.master.merge)
git push origin master(远程库的master不能是当前分支) 推入远程库
网友评论