初次使用-配置
git-bash|bash:严格区分大小写
#设置账户
$ git config --global user.name "your name"
$ git config --global user.email "@mail.com"
#github.com 建仓
#github.com 添加ssh key 的方法
首先找到本地的ssh key,一般在C:/users/name/.ssh,找到后清空.ssh里的文件
然后登录github,在settings项的:SSH and GPG keys页面,点击 New SSH key
然后在本地用gitbash 执行下面的命令:
$ ssh-keygen -t rsa -C "name@mail.com" 完成后,.ssh 目录下会生成两个密钥文件,一个是私钥,一个是公钥(rsa.pub)
打开 rsa.pub 复制里面的内容,粘贴到github页面刚刚打开的 New SSH key :key 文本框里,title 自定义
$ ssh -T git@github.com 验证keygen结果
#报错:Permission denied (publickey)
解决方案:git账户添加公共ssh key
settings-->生成ssh key-->title:id_rsa.pub,
content: 执行 cat ~/.ssh/id_rsa.pub命令,复制输出内容到content 即可(需要本地已经生成id_rsa.pub文件,如无,
先执行 ssh-keygen -t rsa 命令,
再执行 cat ~/.ssh/id_rsa.pub 命令
最后 ssh -T git@github.com (确认结果)。
cd ~/.ssh
$ ls 查看是否有id_rsa(私钥)和id_rsa.pub(公钥)两个文件
md repos-->cd repos
git init 初始化
git add 1.txt/. 添加指定或者所有文件到预仓库
git commit -m "test" 将预仓文件,提进仓库
设置远程github库的地址: git remote add origin https|ssh_url
改变远程github库的地址: git remote set-url origin https|ssh_url
git remote -v 查看本地已连接至远程仓的url
- https://github.com/leeneo/aaa.git 这种是https_url产生的
- git@github.com:leeneo/aaa.git 这种是ssh_url产生的
- 如果向远程推送分支一直失败,可能是使用了https_url产生的,不妨改成ssh_url试试
#如果都不行,试试下面的方法:
1,首先,重新生成ssh_公钥,本地的和github端的都要重新生成,尽量不要使用代理,github ping不通的情况下,试着修改本地hosts文件,建立能直接访问到github真实iP的映射
2,更新本地 git bash 客户端
3,cd到本地仓,执行git remote -v
如果提示 unsafe repository,To add an exception for this directory, call 等等
那就执行 git config --global --add safe.directory F:/本地项目目录/aaa
然后再次执行 git remote -v ,查看origin url 是https 还是ssh,
如果是https 从github远程仓页面复制该仓的 ssh_url
然后使用 git remote set-url origin ssh_url ,修改成ssh形式的
最后执行 git remote -v ,查看是否修改成功,注意 origin 的名字不要拼错
4,执行 git push -u origin master 或者 git push origin master
初次推送远程使用:git push -u origin master
后续代码提交使用:git push origin master
#有时需要输入账户用户名,密码
有个命令可以将ssh协议转换为https协议:git config --global url."https://".insteadOf git://
这个命令不能反过来,如果要转换https到ssh,照上面的方式,使用remote set-url。
*git config --list 查看配置
*git bash 中的复制/粘贴:复制:ctrl+ins,粘贴:shift+ins
*git bash 的配置文件在:c:/users/admin/.gitconfig
[rejected]错误解决方法(当git仓中已有代码时,从其它本地分支推送就会报此错误):
1,git push origin -f 强推覆盖远程分支
2,git fetch =>git merge;这两句等价于git pull.
git pull:refusing to merge unrelated histories错误:
git pull origin aaa --allow-unrelated-histories
不同分支推送远程仓合并案例:
有本地两个分支aaa,bbb;关联到github上同一个仓:aaa.git.
aaa,bbb的分支名都叫<aaa>,aaa有一个本地文件a.txt(内容:aaa);bbb有一个本地文件b.txt(内容:bbb);
aaa先使用git push origin aaa 推送到远程仓。
bbb无法直接push,需要先pull,这里拉取远程仓的内容到本地有两种方式:
1,git pull origin aaa --allow-unrelated-histories
2,git fetch origin aaa=>git merge
结果:bbb:b.txt=>aaa bbb
bbb:git push origin aaa=>远程aaa:a.txt=>aaa bbb
aaa:修改a.txt=>ccc ddd
aaa:push origin aaa=>提示CONFLICT 冲突。
修改a.txt=>ccc ddd
aaa:git add a.txt=>git commit -m '1'
aaa:git push origin aaa=>成功=>远程aaa:a.xt=>ccc ddd
cmd-->bash等价于git bash;不过不能复制文本
从远程仓拉取数据
git pull origin master --allow-unrelated-histories=>等价于git fetch origin master->git merge(相对安全)
本地更新到远程仓
git push origin webs 更新到远程分支 webs
git pull origin webs 从远程webs拉取更新
git pull origin :aaa 本地新建分支(aaa)
git push origin --delete bname 删除远程分支(不能直接删除默认主分支,如果是默认分支,则需要在settings里先将默认分支改成别的分支)
git push origin :aaa 推送时不指定本地分支,则删除远程分支aaa,等价于 push --delete
git remote -v 查看远程仓
git remote rename old new 修改关联的远程仓
git remote remove origin 移除远程仓
git branch --set-upstream devtest origin/devtest 关联到远程分支
管理分支
建仓时 master是默认分支,建议在其他分支上开发,完成后合并回主分支
git branch 查看所有分支
git branch bn 列出或创建分支 bn
git checkout -b bn 创建并切换到分支 bn
git checkout bn 切换到分支bn
git branch -d c 删除分支 c
.gitignore(windows下建.gitignore.)
管理规则
/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
!/mtk/one.txt 不过滤文件
(
此为注释
/mtk #注释会被git忽略
!/mtk/one.txt
)只管理 one.txt
*一旦push之后,新加的过滤规则就无效了,所以要在push之前添加规则
vim模式
输入i或者insert键进入文本编辑模式
按esc回到命令模式,键入:wq 保存并退出;键入:w 保存不退出,:q 退出。
放弃修改并退出::q!
放弃修改不退出::e!
查看当前仓状态(commit/rebase/conflict...),相当有用
*git status
撤回提交/版本回退|git 删除commit
git log==>最新提交排在首位
commit 2b40594ba8a4cbd96780d9c5d672271cca923b5c (HEAD -> master, origin/master)
Author: leeneo@xingzhihen.com leeneo@xingzhihen.com
Date: Fri May 24 15:31:11 2019 +0800
1
commit 4f05c697a5aa0dcb47b02a4988fef14ca85932c4
Author: leeneo@xingzhihen.com leeneo@xingzhihen.com
Date: Fri May 24 15:26:44 2019 +0800
1
commit 01c918c96748ce6558fd1ef9ada722daa1b79d78
Author: leeneo@xingzhihen.com leeneo@xingzhihen.com
Date: Fri May 24 12:26:44 2019 +0800
1
假设摊销上一次提交:
git reset --hard 4f05c697a5aa0dcb47b02a4988fef14ca85932c4
git push origin HEAD --force
删除中间的某个commit,如删除 4f05c697a5aa0dcb47b02a4988fef14ca85932c4
git rebase -i 01c918c96748ce6558fd1ef9ada722daa1b79d78 --要删除的commit 前一个commit记录
pick 4f05c6==>drop 4f05c6 --pick 改成 drop
:wq --保存并退出
git push origin HEAD --force --远程更新到github
*注 此处 -i 01c918...的commit 记录号,是要删除的commit 前一个commit记录
*然后找到要删除的commit号,pick改成drop,退出并保存就行了,不会影响别的文件或记录
*如果该文件关联的commit有多条,要优先删除最近的commit,然后可以逐步追踪到create 该文件的commit
*vim模式 按<Insert> 进入编辑模式;:wq -- 保存并退出;:q -- 直接退出;esc 切换到命令模式
更新本地git bash
windows: git update-git-for-windows
Linux/Unix: git update
版权归原作者 leeneo_xingzhihen 所有, 如有侵权,请联系我们删除。