git从配置到工作中的使用(详细)
一、配置git账户
配置账户信息
git config --global user.name "XXX"
git config --global user.email "XXX"
查看账户信息
git config user.name
git config user.email
二、建立git仓库
项目所在的目录不能有中文
git init
项目根目录下新建.gitignore,配置不需要git管理的文件夹
/node_modules
/dist
三、提交到本地仓库
1. 单个文件增加到缓存区
git add readme.txt
2. 添加当前更改的所有文件到暂存区
git add .
3. 提交到本地仓库
git commit -m "Describing the content"
四、远程仓库
1. 创建SSH Key
ssh-keygen -t rsa -C "XXX@qq.com"
需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可
然后在C盘用户目录下(根据git上提示信息),可以找到 id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人
2. 设置 SSH Key
登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,在Key文本框里粘贴 id_rsa.pub(公匙)文件的内容,并保存
3. 添加远程仓库
git remote add origin https://github.com/xxx/xxx.git
4. 创建远程分支
git push -u origin master
加上-u,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
之后可直接通过简化命令更新远程分支:
git push
5. 使用token
2021年8月13号,git将密码换成了token,使用密码登录已经上传不了代码
- 生成token
选择GitHub个人主页的Setting
选择Developer setting
选择Personal access tokens,选择Generate new token
设置token有效期,访问权限等。要使用token从命令行访问仓库,选择repo,从命令行删除仓库,选择delete_repo
选择Generate token,生成token(将token拷贝下来,token只生成一次)
把token添加到远程仓库链接中,这样就避免同一个仓库每次提交都要输入token
git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git
<your_token>:token
USERNAME:用户名
REPO:仓库名称
例如:
git remote set-url origin https://XXX@github.com/cwjbjy/react-ssr.git
五、修改commit
修改最后一次commit信息,新的commit原位替换旧的commit
git commit --amend
使用场景:想修改commit备注信息,或者将几个新的改动合并到最近的一次提交
六、合并多个commit
为了避免太多的commit造成版本控制的混乱,可将多个commit合成一个commit
git rebase -i f1f92b
以此commit为基础,在这之后的commit都需要合并
pick 的意思是要会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit ,也可写成 s
通过编辑模式将新的commit合并到前一个commit,修改第二条 commit 改为 squash 或 s
或
pick ... ...
s ... ...
s ... ...
s ... ...
然后按Esc,再输入 :wq 保存并退出
然后修改commit message信息,再输入 :wq 保存并退出,合并成功
如果过程有错误,可以使用 git rebase --abort 来撤销修改,回到没有开始操作合并之前的状态
七、查看修改记录
如果使用vscode的开发的话,可以安装 Git History 与 GitLens-Git supercharged两个插件。这样关于查看修改记录git了解即可,使用vscode开发工具去看git历史记录更方便
1. 掌握仓库当前的状态
git status
2. 查看文件修改前后的不同之处
git diff readme.txt
3. 查看最近提交日志
git log
4. 查看最近的4个commit
git log -n4
八、撤销修改
1. reset
回退到上一个commit提交
git reset --hard HEAD^
上上个版本就是HEAD^^
退回到某一个commit提交
git reset --hard 1094a
hard后面跟的是commit id不必输全,四五位就行
2. reset --soft
回退已提交的commit,并将commit的修改内容放回暂存区
git reset --soft HEAD^
在reset --soft指定commit号时,会将该commit到最近一次commit的所有修改内容全部恢复
例如:a->b->c
git reset --soft a
此时的HEAD到了a,而b、c的修改内容都回到了暂存区
3. revert
回退某个commit提交
情景:比如commit了三个版本(一,二,三),此时想撤销版本二,并且不想影响版本三的提交,可以用git revert命令回退版本二,生成新的版本四,这个版本四会保留版本三的东西,但撤销了版本二的东西
针对普通的commit
git revert -n 版本号
当想回退merge合并时,需添加-m 1参数,即保留master主分支
git revert -n aa20f8 -m 1
然后通过git add . 与 git revert --continue的方式,重新提交去掉这个commit的提交
4. 远程仓库回退
git push origin HEAD --force
九、增加到暂存区
如果在一个分支上改了代码,又想拉远程代码,又不想多创建一个commit,可以将代码先缓存起来
git stash
然后把远程代码拉下来后,将暂存区的代码还原
git stash pop
十、移除文件
情景:在开发中常常通过配置.gittignore文件来忽略不需要上传的代码,比如unpackage文件夹。但是由于之前没有设置的原因,这些文件已经被纳入了版本管理中,这是修改.gittignore是无效的。
解决办法:
git rm --cached -r unpackage
然后配置.gittignore
/unpackage/
十一、从远程拉到本地
git clone https://github.com/cwjbjy/react-management.git
十二、合并
1. git rebase
提交记录会非常清晰,没有分叉
2. git merge
不同于 git rebase 的是,git merge 在不是 fast-forward(快速合并)的情况下,会产生一条额外的合并记录,类似 Merge branch 'xxx' into 'xxx' 的一条提交信息
另外,在解决冲突的时候,用 merge 只需要解决一次冲突即可,简单粗暴,而用 rebase 的时候 ,需要依次解决每次的冲突,才可以提交
3. git cherry-pick
(1)合并不连续提交
合并 id 为 395 4e47 两个commit
git cherry-pick 395 4e47
(2)合并连续提交
git cherry-pick 395b^..4e47
(3)取消cherry-pick
git cherry-pick --abort
十三、从远程更新到本地
1. git pull
将本地库更新至远程库的最新状态
等价于:
git fetch + git merge
拉取远程dev分支
git pull origin dev
2. git fetch
与 git pull 不同的是 git fetch 操作仅仅只会拉取远程的更改,不会自动进行 merge 操作。对你当前的代码没有影响
使用 git fetch拉取代码步骤:
git fetch //将与本地库所关联的远程库的commit id 更新至最新
git diff origin/xx //对比差异
git merge //将远程库的代码合并到本地
十四、分支
1. 创建并切换分支
创建dev分支,然后切换到dev分支
git checkout -b dev
2. 切换分支
git checkout dev
3. 查看本地所有分支
git branch
4. 查看远程所有分支
git branch -r
5. 查看分支与远程的关联关系
git branch -vv
6. 删除分支
(1)删除本地分支
$ git branch -D dev
(2)删除远程分支
git push origin --delete dev
7. 拉取远程分支并创建本地分支
先更新本地库
git pull
拉取远程分支并创建本地分支
git checkout -b 本地分支名x origin/远程分支名x
- 重新命名分支
git branch -m
十五、tag
(1)打tag
git tag -a v0.0.0 -m "tag的描述"
(2)推送tag
git push origin v0.0.0
(3)本地删除tag
git tag -d v0.0.0
(4)远端删除
git push origin :refs/tags/v0.0.0
十六、强制推送和更新
(1)强制推送
git push -f
(2)强制更新到本地
git fetch --all //将远程主机的最新内容拉到本地
git reset --hard origin/master //强制更新覆盖本地
git pull
十七、误操作git导致代码丢失
(1)获取所有历史操作日志
git reflog
(2)恢复到某个操作id
git cherry-pick [reflog-id]
十八、查找哪次代码提交引入了错误
原理:将代码提交的历史,按照两分法不断缩小定位。
(1)查看历史提交
git log --pretty=online
(2)启动查错
第一个参数是最近一次的提交,第二个参数要搜索的commit id
git bisect start [终点][起点]
git bisect start HEAD 4d83cf
(3)没有问题,继续查找
如果二分位的commit Id 并没有影响出错,则继续查找(说明二分位之后的commit id没有造成bug)
git bisect good
(4)有问题,继续查找
如果有问题,说明二分位和终点之间有错误提交
git bisect bad
(5)不断重复步骤三、步骤四,直到查找到具体的commit id
(6)退出查找
git bisect reset
十九、结尾
git在工作中还是很重要的,希望这篇文章对大家有所帮助
码字不易,点赞支持!!!
转载自:https://juejin.cn/post/7134952261075075103