git
撤消操作
撤消git commit操作
使用git log查看 commit 日志,日志中包含本次commit的哈希值,找到需要回退的那次commit的哈希值,
使用git reset --hard commit_id 命令进行回退
撤消git add 操作
如果是撤销所有的已经add的文件:
git reset HEAD .
如果是撤销某个文件或文件夹:
git reset HEAD -filename
撤消git push操作
方法:
git reset --hard <commit_id>
git push origin HEAD --force
其他:
根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:
git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
HEAD 最近一个提交
HEAD^ 上一次
修正最后一个commit消息
方法: git commit --amend 或 git commit --amend -m "要修改的提交信息"
撤消历史提交
方法: git revert
### git revert与git reset的区别
- git revert 是用一个新技术提交来消除一个历史提交所做的任何修改,同时本地代码会回滚到指定的历史版本,HEAD是一直向前的
- git reset 是直接删除指定的commit,HEAD是向后退到上一个版本
撤消本地修改
方法:git checkout -- filename 把工作目录里的文件修改到git之前记录的某个状态
撤消"本地修改之后再恢复"
方法:先git reflog 查看项目历史再git reset 或 git checkout
- git reset --hard <指定版本号> 代码库修改到某一次提交的状态
- git checkout <版本号> -- <文件名> 修改某一次提交的某个文件
- git cherry-pick <版本号> 重新提交某一次历史提交
利用分支保存自己的代码
- 1.git branch feature 创建新分支并指向最近一次的提交,但还check out在master分支上
- 2.git reset --hard origin/master 把master分支倒回origin/master,但此时commit还在feature分支里
- 3.git checkout feature 查看工作成果
在本地创建test分支并指向远程test分支
git checkout -b test origin/test
切换分支
git checkout `<branch>`
删除分支
要删除当前分支要先切换到别的分支,因为当前分支正在使用
git branch -d `<branch>`
合并分支 git rebase
git rebase用于把一个分支的修改合并到当前分支
如果想要放弃当前rebase操作,用:
git rebase --abort
如果冲突已经解决,先add冲突文件,之后:
git rebase --continue
git ssh配置及使用
设置git的username和email(如果是第一次的话)
git config --global user.name "momo-0902"
git config --global user.email "329053928@qq.com"
检查是否有ssh key
cd ~/.ssh
ls
如果存在id_isa和id_isa.pub文件,证明已经存在ssh key,可跳过生成密钥这一步骤
生成密钥
ssh-keygen -t rsa -C "329053928@qq.com"
生成id_isa和id_isa.pub两个文件
将id_isa.pub文件中的密钥复制添加到github的ssh key设置里
将本地仓库.git文件夹下config文件里的url改成ssh的地址
可使用ssh -T git@github
成功后提示信息为
Hi MOMO-0902!(你的用户名) You've successfully authenticated, but GitHub does not provide shell access.
git add 时提示 LF will be replaced by CRLF
使用git add 添加文件时提示:
warning: LF will be replaced by CRLF in package-lock.json.
The file will have its original line endings in your working directory.
原因
indows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示
解决办法为执行
$ git config --global core.autocrlf false //禁用自动转换