git基础操作及进阶
基础操作流程
查看修改:git status
add:
git add . (提交全部)
git add xxx.md (提交单个文件)
commit:git commit -m '备注信息'
pull:git pull origin master(对应分支名)
push:git push origin master(对应分支名)
各项操作
- 初始化配置
- 克隆
- master: git clone git地址
- 指定分支: git clone -b dev(分支名) git地址
- 在已有分支基础上,切换远程分支到本地:git checkout -b dev(分支名) origin/dev(分支名)
- add
- git add . | git add file.txt
- 撤销全部:git reset HEAD
-
reset 参数
- --fixed: 默认,不删除工作空间改动代码,撤销commit,撤销add
- --soft: 不删除工作空间改动代码,撤销commit,不撤销add
- --hard: 删除工作空间改动代码,撤销commit,不撤销add
-
- 撤销指定文件的add: git reset HEAD file.txt
- commit
-
git commit -m "message"
-
git commit -a -m "message" (不建议)
- 将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区
-
git commit --amend => 追加提交 | 修改提交信息
- 在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中
- stash(缓存)
-
写入缓存区:git stash
-
查看现有缓存:git stash list
-
恢复缓存区修改:git stash pop
-
删除缓存:git stash drop
-
删除全部缓存:git stash clear
-
同步线上分支: git fetch -p
-
在工作区修改,但并未提交到暂存区(即并没有add)
-
$ git checkout . | $ git checkout xxx.txt
- pull
- git pull origin master --allow-unrelated-histories
- --allow-unrelated-histories , 把两段不相干的 分支进行强行合并
- git pull origin master
- push
- git push -u origin master
- 将本地的master分支推送到origin主机(指定origin为默认主机),后面就可以不加任何参数使用git push了
- git push master -f
- 强制推送覆盖远程代码
分支操作
- 分支合并
- 切换且新建分支:git checkout -b ls(分支名)
- 切换到要合并的分支:git checkout dev(要合并的分支名)
- 合并:
- git merge branch(分支名)
- git merge branch(分支名) --no-ff(会把对应的日志提交到gitLog)
- git merge branch(分支名) -m 'msg'
- 取消merge
- 未add时,取消合并,git merge --abort
- 已add时,
- git reflog
- git reset --hard commit id
- push: git push origin dev(对应分支名)
- 分支处理
- 查看所有分支:git branch -a
- 查看当前分支: git branch
- 删除某个本地分支: git branch -d dev(分支名)
- 切换分支:git checkout dev(分支名)
- 切换当前分支前使用分支:gei checkout -
回滚版本
- git reset --hard 版本ID
- 回滚后提交到远程分支:git push -f origin dev
查看版本号
- 历史版本ID:git log --pretty=oneline
- 获得当前版本ID全部:git rev-parse HEAD
- 获得当前版本ID短的:git rev-parse --short HEAD
公钥权限
1. git clone ssh地址 :Please make sure you have the correct access rights and the repository exists
生成 SSH 公钥 -> 添加在github Setting -> SSH and GPG keys
查看公钥: 即ssh(cd ~/.ssh -> ls)
- 已经存在:id_rsa.pub
a. 查看id_rsa.pub内容:cat ~/.ssh/id_rsa.pub
b. 或者进入ssh目录(手动复制):ll -d ~/.ssh
- 不存在:id_rsa.pub
- 生成密钥:
- ssh-keygen -t rsa -C "xxx@qq.com" -> enter
- 最后得到了两个文件:id_rsa和id_rsa.pub
- 查看id_rsa.pub内容:cat ~/.ssh/id_rsa.pub
github操作
- 本地的代码关联github
- git init
- git add .
- git commit -m '...'
- git remote add origin git@github.com:....git
- git push --set-upstream origin master
- 取消本地目录下关联的远程库
git remote remove origin
git add .git commit -m 'xxx'
git push origin mastergit
pull origin master
如果还不可以:查看是否还有为提交的代码
other
使用url连接外部包
"dependencies": {
"自定义包名": "git+http://....git#master(分支名)"
}
每次提交都需要用户名和密码
查看clone 地址:git remote -v
由 https 方式 -> 换成ssh方式: git remote rm origin
ssh方式地址:git remote add origin git地址
err
1. push
1. err: failed to push some refs to 'git@github.com:....git'
- README.md 不存在
- git pull –rebase origin master
- git push -u origin master
- or
- git push -u origin master -f
2. err: hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
- 存在冲突文件,解决冲突即可
3. Push master to origin/master was rejected by remote
设了保护,才推送不上去,记得在保护分支上把开发者推送勾上
github:
1:
git pull
git pull origin master
git pull origin master –allow-unrelated-histories
2:
git pull origin master –allow-unrelated-histories
git push -u origin master -f
2. 关联github
err: remote origin already exists
需先删除先删除远程 Git 仓库:git remote rm origin
3. pull
1. err: Your local changes would be overwritten by merge. Commit, stash or revert them to proceed;
1. 检查是否有未提交,提交处理
2. 则是加入缓存 git stash
2. Git Pull Failed: Could not read from remote repository
重新配置秘钥
4. commit
1. err: LF will be replaced by CRLF in src/components/my/collectLists.js.
The file will have its original line endings in your working directory.
格式问题:(可忽略)
解决:git config –global core.autocrlf false // 禁用自动转换
5. github webstorm下 err
err:Could not read from remote repository
setting -> git -> ssh executable -> native