总论:Git是一个强大的分布式版本控制工具,其最大的特点就是可以轻松的创建分支,细化到每一个bug的修复。从而保证了每一次的项目迭代,都不影响上一次已经发版的版本,有利于敏捷的开发方式。下面,我就总结一下常用的git命令:
一.创建
1.git init: 在某个文件夹路径下输入该命令,自动产生git版本控制文件夹
2.vi <文件名>: 在当前路径下创建一个文件
i: 编辑这个文件 esc:退出编辑状态 :wq :保存修改并回到命令行界面
pwd: 查看mac文件路径 cd:进入某个文件夹路径 cd .. 回到上一个文件夹路径
3.git add <文件名>: 添加文件到暂存区域,从而commit
4.git commit -m <"message">:提交这一次修改到本地版本库,并设置备注信息
5.git status: 查看工作区的状态
6.git diff: 查看修改内容
二.版本穿梭(版本回退)
1.git reset --hard commit_id: 穿梭到指定commit的版本
2.git log: git log --pretty=oneline:查看之前版本的信息
3.git reflog:查看本版本之后提交的版本信息
三.工作区
1.git checkout --<文件名>: 丢弃工作区中该文件的修改(前提是该文件已经在版本库了)
2.git reset HEAD <file>-->git checkout -- <file>: 当修改已经add进入暂存区,撤销本次操作
四.删除文件
1.git rm <file>: 删除文件(前提是该文件在工作区与版本库中是没有变化的)
2.git remote -v: 查看远程库信息
3.git remote add origin <远程库ssh>:关联一个远程仓库
4.git remote rm origin: 删除与远程仓库的链接
5.git push -u origin master: 第一次推送master分支到远程的master
git push master dev:dev 把本地的dev分支推送到远程的dev分支,没有就创建
6.git clone <远程库ssh>: 克隆远程仓库到本地(正常第一都会失败,第二次就成功了)
五.合并分支
1.git branch: 查看分支
2.git branch <分支名>: 创建分支
git branch -d <分支名> 删除分支
3.git checkout <分支名>: 切换分支
4.git checkout -b <name>: 创建并且切换分支
5.git merge <分支名a>: 合并分支a到当前所处的分支
6.git log --graph --pretty=oneline --abbrev-commit: 查看分支的合并情况
7.git log --graph: 查看分支合并图
有时候从版本库clone下来的显示只有master分支,则通过git branch -av就可以看到版本库所有的分支了,就可以
进行切换了。git checkout 分支名字,前提是你知道了服务器端的分支的名字。
六.bug分支
1.git stash: 保存当前的工作现场,方便下回切换回该分支后继续工作(一般用于紧急bug修复的场景下)
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137602359178794d96
6923e5c4134bc8bf98dfb03aea3000
2.git stash pop: 恢复保存的工作状态,并从“工作现场栈”中删除本次保存的工作现场数据
七.多人协作
1.git remote: 查看远程库的信息
2.git remote -v: 查看更加详细的远程库信息
3.git push origin <本地分支名>: 推送本地分支到远程
注意:直接的跨越分支推送(如把本地dev直接推送到远程的master)是不错在的,只有在本地先合并dev到master,再把本地的master推送到远程的master。
4.git checkout -b <本地分支名> origin/<远程分支名>:在本地创建和远程分支对应的分支(名字最好保持一致)
5.git branch --set-upstream-to=origin/dev dev: 指定本地的dev分支与远程dev分支进行连接。一般上面那个操作后需要做这一步操作,实现本地与远程的关联。
6.git pull origin dev:dev_zhangqi 从远程dev拉取数据代码与本地dev_zhangqi进行合并
7.git push origin dev:dev_zhangqi: 向远程dev推送数据本地的dev_zhangqi
八.标签操作
1.git tag <标签名>: 默认在Head上新建标签
2.git tag <标签名> commitId: 在对应的commitId上建标签
3.git tag: 查看所有标签
4.git show <标签名>: 查看某个标签的详细信息
5. git tag -a <标签名> -m "标签信息":指定标签信息(我也不知道怎么看到这些指定的信息)
6.git tag -d <标签名>:删除本地标签
7.git push origin:refs/tags/<标签名>:删除本地标签
8.git push origin <标签名>:推送一个本地标签
9.git push origin --tags: 推送所有未推送的本地标签
九.其他操作
1.git config --global color.ui true: 设置git命令行打开颜色提示功能
2.git config user.name: 查看git用户的用户名信息
3.git config user.email: 查看git用户的邮箱信息
4.git add -f <文件名>: 强制添加该文件到版本库
5.git check-ignore -V <文件名>: 检查该文件对应于.ignore中的某条忽略设置
6.git通过打patch的方式合并多个commit提交作为一个:
g format-patch -n:打n个patch,根据最新的提交进行,结果会出现
0001-fix-1001-Using-eventbus-in-view-to-modify-the-number.patch
0002-fix-1001-delete-eventbus-in-LessonEndView.patch
0003-fix-1001-delete-handler-in-LessonEndView-to-prevent-.patch
git reset --hard "commit id":回退到想要合并的几次提交前的那一次提交
g am -3 0001-fix-1001-Using-eventbus-in-view-to-modify-the-number.patch
g apply 0002-fix-1001-delete-eventbus-in-LessonEndView.patch
然后再回退
git reset --hard "commit id":回退到想要合并的几次提交前的那一次提交
然后只apply
g apply 0001-fix-1001-Using-eventbus-in-view-to-modify-the-number.patch
g apply 0002-fix-1001-delete-eventbus-in-LessonEndView.patch
然后commit ,再push.
7.合并分支,简化提示
git merge --squash xxx
git commit -m "修改了bug某某某"
8.修改某次commit的message
git rebase -i HEAD~n 将会出现n条你最新的提交,按最新提交时间入栈,最新的在栈底。
把你想要修改的commit的message前面的pick改为reword ,同时修改commit的信息,退出修改后完成
9.如何解决reset --hard之后的commit
git relog 列举出所有的最近Git修改,每一条修改的开头都会有一个版本号,
git reset 版本号将可以找回那一次的修改
10
提示“Enter passphrase for key /root/.ssh/id_rsa.pub”让输入私钥,可不论输与不输都不能直接登录
解决方法:
在本地执行:
eval `ssh-agent`
ssh-add
ssh-agent是用于管理密钥,ssh-add用于将密钥加入到ssh-agent中,SSH可以和ssh-agent通信获取密钥,这样就不需要用户手工输入密码了。
顺序执行以上两条命令后就可以用ssh免密登录远程机器了,但这个配置只对当前会话生效,会话关闭或机器重启后都需要重新执行这两条命令。将命令放到~/.bash_profile中,就可以免去每次输入的麻烦。