概述
团队内部合作:
跨团队合作:
init
在想要管理的目录下右键Git Bash Here,输入命令git init,则出现一个.git文件夹,其中保存了各种相关信息
add
// 将文件从当前工作区add到暂存区
git add 文件名
commit
// 将文件从暂存区commit到本地库,并且自定义更新提示
git commit -m "描述更新了哪些内容" 文件名
status
// 显示当前工作区内的文件各属于什么状态
git status
log
// 由近及远显示commit记录
// 当历史记录过多时,会默认分页显示:按空格到下一页,按b到前一页
// 每条历史记录对应一个唯一索引(hashcode)
git log
// 每条记录只显示一行,更加简洁
git log --oneline
// {}内的数字,代表回到这个版本需要走多少(hashcode只保留末尾几位)
git reflog
reset
// 前进或回退到指定索引版本
// hard相等于本地库的指针
git reset --hard 某条历史记录的索引
删除暂存区和本地库的文件
// 1.先删除工作区的文件
rm 文件名
// 2.将修改同步到暂存区(等价于删除暂存区的该文件)
git add 文件名
// 3.同理,将修改同步到本地库(等价于删除本地库的该文件)
git commit -m "删除文件" 文件名
找回已删除的文件
相当于回退到删除之前的版本(reset)
diff
// 对比某文件在工作区和暂存区的差异
// 逐行比较
git diff 文件名
// 不指定文件名,即对比所有文件
git diff
// 对比某文件在暂存区和指定索引版本的差异
git diff 索引号 文件名
branch
// 查看当前所有分支
git branch -v
// 创建新分支
git branch 新分支名
// 切换到指定分支
git checkout 分支名
// 合并指定分支到当前分支
// 通常创建一个新分支,在新分支上增添新功能并add,commit,最后再合入master
git merge 分支名
远程仓库地址别名
// 查看别名
git remote -v
// 设置别名:之后就可以使用别名替代远程库地址了
// 这里要用ssh地址不要用https地址,否则在push的时候会卡死
git remote add 别名 远程库的URL
// 删除别名
git remote rm 别名
push
// 第一次加上-u参数,之后就无需-u参数了
git push -u 远程仓库别名 本地想要推送的分支
clone
// 其他人可以从远程库上克隆下
// clone结束后,会自动完成init和起别名操作(默认origin)
git clone 远程库的URL
多人合作
主人可以在GitHub上邀请其他人进入团队:
在加入团队后,就被允许将自己的代码push到远程库
pull
git pull 远程库别名 想要拉取的远程库分支
// 如果为了保险,可以采取分开操作的方式:pull = fetch + merge
// 抓取远程仓库的某个分支到本地,但并不会修改本地的工作区
git fetch 远程仓库别名 远程仓库的某个分支
// 可以先查看远程库中的文件内容是否正确,再决定是否合并
git checkout 拉取下来的远程库分支
cat 文件名
// 将抓取下来的分支合并到本地(合并前记得切换回本地的分支)
git merge 远程库分支名
注意:
如果多人合作,A修改了f.txt的第一行,并push到远程库;B也修改相同位置,那么push会失败!
此时B只能先pull下来,解决了冲突(该删删该留留),再push上去;
在解决冲突时,commit不能指定文件名,否则提交失败
ssh免密操作
// 进入用户主目录
cd ~
// 生成ssh密钥:C要大写,邮箱是github注册的那个邮箱
ssh-keygen -t rsa -C 邮箱地址
// 三次回车确认后,在C盘-用户-Administrator-.ssh文件夹下包含id_rsa和id_rsa.pub文件
// 复制id_rsa.pub里的字符串到github-个人主页-右上角setting-SSH and GPG keys-New SSH key-key处,title随便取
// 在本地库对远程仓库的ssh地址取个别名,之后push操作时,就无需每次都登录账号密码