Git笔记三 —— Git遇到的问题及解决
总结记录git使用过程中遇到的问题
·
1.记住用户名密码
push的时候默认每次都需输入Gitee的密码,git config credential.helper store 可记住用户名密码,无需每次推送都输入了
或者在git仓库根目录下.git文件夹的config文件末尾增加如下内容
[credential]
helper = store
2. Git提交时忽略部分文件
在根目录下创建.gitignore文件,然后把要忽略的文件名填进去。 注意:新加.gitignore只能忽略那些原来没有被提交过的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
忽略文件的原则是:
1.忽略操作系统自动生成的文件,比如缩略图等;
2.忽略编译生成的中间文件、可执行文件等,比如Java编译产生的.class文件;
3.忽略敏感信息的配置文件,比如存放口令的配置文件。
GitHub上详细的针对数十种项目及语言的 .gitignore 文件列表
3.bug分支
dev进行到一半没办法提交,这时需要改bug,可以使用stash功能把当前工作现场“储藏”起来,等恢复后继续工作。
1. git stash
2. 在哪个分支上修复bug,就从哪个分支创建临时分支
git checkout master
git checkout -b issue
3. 修改后执行git add 和 git commit
4. 切换到master分支,并完成合并
git switch master
git merge --no-ff -m "merged bug fix issue" issue
5. 切换回dev分支
git switch dev
查看工作区和stash内容
$ git status
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
6. 恢复工作现场
- 恢复的同时把stash内容也删了
git stash pop
- 恢复后stash内容并不删除,需要用git stash drop来删除
git stash apply stash@{0}
如果在master分支上修复的bug,想要合并到当前dev分支
git cherry-pick <commit>
4. Feature分支
每添加一个新功能,最好新建一个feature分支,在上面开发,完成后合并,最后删除该feature分支。
1. git switch -c feature
2. 执行git add 和 git commit
3. 切回dev 准备合并 git switch dev
- feature-1 和 feature-2 都是基于 dev 同一节点的分支。feature-1先完成开发并合并到dev,feature-2还没开发完,但是想同步feature-1的代码。
git rebase origin/dev
5.关于撤销修改
- 提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
- 改乱了工作区某个文件的内容,想直接丢弃工作区的修改。
//把某文件在工作区的修改撤销,让这个文件回到最近一次git commit或git add时的状态
git checkout -- file
- 不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改。
第一步 git reset HEAD <file> 回到场景1
第二步 按场景1操作 git checkout -- file
- 已经提交了不合适的修改到版本库时,想要撤销本次提交,前提是没有推送到远程库。
回退到上一版本
git reset --hard HEAD^
- 本地代码还未commit就执行了git pull,撤销操作回退到上一版本
git reflog
git reset --hard <commit id>
- checkout用版本库里的版本替换工作区的版本,恢复工作区被修改或者被删除的文件
git checkout -- <file>
6.关于合并
- 只拉取某次提交到dev分支
git checkout dev
git cherry-pick <commit id>
- 从指定分支拉取指定文件
//只是简单的从A分支copy到B分支
git checkout [commit id|branchName] <file>
//将A分支上的文件追加补丁到B分支上的文件。提示输y或者n(接受或拒绝补丁内容)
git checkout --patch branchName <file>
- 合并某个分支上的多次提交
合并bug分支的76cada ~ 62ecb3 到dev分支:
git checkout bug
git checkout -b newbranch 62ecb3
git rebase --onto dev 76cada^
7. 整理commit提交信息
将同一个分支上的第一个提交:change 1 和 第二个提交:change 2 合并为一个提交
- 已经push到远程
- git 输入如下指令
//将两次提交的请求以文本的形式进行展示
git rebase -i HEAD~2
//或者 如果不指定end则默认当前分支HEAD所指向的commit
git rebase -i [startCommit] [endCommit]
提交信息如下:
指定说明:
- p-pick:保留该commit
- r-reword:保留该commit,但需要修改该commit的注释
- e-edit:保留该commit, 但要停下来修改该提交(不仅仅修改注释)
- s-squash:将该commit和前一个commit合并
- f-fixup:将该commit和前一个commit合并,但不保留该提交的注释
- x-exec:执行shell命令
- d-drop:我要丢弃该commit
- 输入i进入vim编辑模式,将第二行的pick改成s, 然后Esc进入命令模式,输入 ZZ (或者:wq)保存文件并退出vim
pick dc63080 显示运单号并复制
s ab3990a 安装包
执行结果如下:
-
继续输入i进入编辑模式,修改上图中的commit信息合并为一条,然后保存并退出vim
-
最后git push origin dev -f 强制推送
- 在本地未push到远程
- 点左下角的Git,显示本地的commit信息
- 在commit1信息上(startCommit)右键,选择Interactively Rebase from Here
- 点击commit2(endCommit),选择squash,点击startRebasing开始合并
- 编辑commit信息,Ctrl+Enter完成
Git常用指令总结
更多推荐
已为社区贡献2条内容
所有评论(0)