xiaochengzi6 / Blog

个人博客
GNU Lesser General Public License v2.1
0 stars 0 forks source link

git 分支操作 #48

Open xiaochengzi6 opened 2 years ago

xiaochengzi6 commented 2 years ago

配置了SSH公私钥,出现了以下问题,每次都要输入密码,因而就查了一下解决办法。git每次操做远程分支(git pull,git push等)时提示enter passphrase for key '~/.ssh/id_rsa'git 问题出现的原因是在生成 key 的时设置了密码所以需要在每次提交和拉取的时候都要输入密码,所以使用$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] 就可以重置原来密码

比如: ssh-keygen -p -P 123456 -N '' -f ~/.ssh/id_rsa

git 分支操作

如果不小心commit了一个不应该commit的修改,但是还没有push,想撤销那个commit。

步骤:

a) git log:获取commit id;

b) git reset --hard commit_id:即:git reset --hard d1a65e9ac9a7c4396206f0072b7fbc9138a26c1f

撤销缓存区保存的文件记录 也就是将文件 从 git add 命令后取消 具体参考

创建分支: git checkout -b <name>git branch <name> + git checkout <name>

切换分支:git switch <name>git checkout <name>

合并分支git merge <name>git rebase

会在当前分支下合并 <name> 分支

使用 git rebase合并分支能够让分支的提交历史看起来更加线性、清晰。比如当前在 bugFix分支 那么可以和主分支main 去合并git merge main 这个时候的 bugFix 分支就会被合并到 mian 分支上(git merge 合并过程相反),从历史提交记录上看是一个线性开发过程

移动 HEADgit checkout <name>git checkout HEAD^git checkout HEAD~<number>

后两个都是相对于 HEAD分支上移动

移动分支到另一个分支: git branch -f <value> <target>

<value>: 表示要移动的分支名 <target>: 表示准备移动到分支的位置

撤销变更(本地、远端)git reset HEAD~1git revert HEAD~1

这两者的主要差距就是前者撤销不会有记录,后者可以看到有撤回的记录

修改提交内容

提交复制git cherry-pick <提交号>

将一些其他分支的提交复制到当前分支上,这里的提交号数量无限制

限制性条件:需要知道提交号也就是 commit时候的 hash 才行

在不知道 提交hash的时候选择使用 git rebase -i <提交记录>

-i 命令可以打开一个 UI 界面 在 UI 界面中操作修改

1、删除

2、合并

3、复制

1、处理最后一次提交错误的 commit 记录

使用 git commit --amend 修改最后一次提交的记录,提供一个 -m 的参数就能直接在后缀一个字符串就能完成提交。

git commit --amend -m "修改后的提交内容"

2、处理提交漏掉的文件

使用 git commit --amend --no-edit 对漏交文件提交后 commit 内容还是上一次的

git add text.js
git commit --amend --no-edit

或者使用 git reset <commitHash>此时主要是撤回这次提交记录但修改的内容还存在,使用 git reset --hard

3、出现 git push错误failed to push some refs to 的问题原因是:远端库和本地库存在差异没有同步 解决办法:

解决的方法有很多,出现这个问题的原因也有很多,针对不同的问题再去选择处理方案比较好

  1. 本地提交了 commit 然后 push 之后发现有文件需要补充到上次的提交中,弄好后 push 出现这个问题,只能回退 commit 重新提交 commit 再 push

  2. 忽略本地库,让远端库和本地库保持一致 git pull --rebase origin master

git stash list 罗列 stash 存储的东西

git stash pop 弹出最近一次的保存

git stash drop stash@{1} 删除第二次存储的值

修改远端commit

特别的

1、git reset HEADgit reset HEAD^的区别?

2、git reset --hard HEADgit reset HEAD的区别?

xiaochengzi6 commented 1 year ago

git reset head 后的恢复操作