git操作过程中小结

311 阅读3分钟

Git使用vi或vim命令打开、关闭、保存文件

1、vi & vim 有两种工作模式:

(1) 命令模式:接受、执行 vi & vim 操作命令的模式,打开文件后的默认模式;

(2) 编辑模式:对打开的文件内容进行 增、删、改 操作的模式;

  #在编辑模式下按下 ESC 键,回退到命令模式。

2、创建、打开文件:$ vi 文件名

(1)使用 vi 加 文件路径(或文件名)的模式打开文件,如果文件存在则打开现有文件,如果文件不存在则新建文件,并在终端最下面一行显示打开的是一个新文件。

(2)键盘输入字母 “i”或“Insert”键进入最常用的插入编辑模式。

3、保存文件:

(1)在插入编辑模式下编辑文件。

(2)按下 “ESC” 键,退出编辑模式,切换到命令模式。

(3)在命令模式下键入"ZZ"或者":wq"保存修改并且退出 vi 。

(4)如果只想保存文件,则键入":w",回车后底行会提示写入操作结果,并保持停留在命令模式。

4、放弃所有文件修改:

(1)放弃所有文件修改:按下 "ESC" 键进入命令模式,键入 ":q!" 回车后放弃修改并退出vi。

(2)放弃所有文件修改,但不退出 vi ,即回退到文件打开后最后一次保存操作的状态,继续进行文件操作:按下 "ESC" 键进入命令模式,键入 ":e!" ,回车后回到命令模式。

git关联、删除、推送远程仓库

  1. git remote -v 查看当前关联的远程仓库
  2. git remote add second [url] 关联远程仓库
  3. git remote set-url origin [url] 修改远程仓库
  4. git push origin master 推送到远程仓库
  5. git remote remove origin 删除远程仓库

注意事项:以指定用户身份推送或拉取 git push origin master https://用户名@xxx/xxx.git

查看git的所有配置

git config --list

查看git配置的邮箱和用户名

git config user.email

git config user.name

只修改当前项目下的邮箱和用户名

git config user.email "***@**.com

git config user.name "你的用户名"

修改全局的邮箱和用户名

git config --global user.email "***@**.com

git config --global user.name "你的用户名"

查看.git文件所在目录

git rev-parse --git-dir

重置配置信息

git config --unset

重置刚刚提交的用户信息

git commit --amend --reset-author

温馨提示:项目配置git config < 全局配置 git config --global < 系统配置 git config --system

利用rebase指令合并多次提交

合并步骤

  1. 查看 log 记录,使用git rebase -i选择要合并的 commit
  2. 编辑要合并的版本信息,保存提交,多条合并会出现多次(可能会出现冲突)
  3. 修改注释信息后,保存提交,多条合并会出现多次
  4. 推送远程仓库或合并到主干分支

首先查看提交记录 git log

从HEAD版本开始往过去数3个版本
$ git rebase -i HEAD~3

# 合并指定版本号(不包含此版本)
$ git rebase -i [commitid]
# 从HEAD版本开始往过去数3个版本
$ git rebase -i HEAD~3

说明:
-   `-i(--interactive)`:弹出交互式的界面进行编辑合并
-   `[commitid]`:要合并多个版本之前的版本号,注意:`[commitid]` 本身不参与合并

指令解释(交互编辑时使用):
-   p, pick = use commit
-   r, reword = use commit, but edit the commit message
-   e, edit = use commit, but stop for amending
-   s, squash = use commit, but meld into previous commit
-   f, fixup = like "squash", but discard this commit's log message
-   x, exec = run command (the rest of the line) using shell
-   d, drop = remove commit

执行了rebase命令之后,会弹出一个窗,将pick改为squash或者s,之后保存并关闭文本编辑窗口即可

pick 3759b84 update clear-logs.sh
s 1693a6f update clear-logs.sh version
pick 8c8f3f4 update website
保存退出,Git会压缩提交历史,如果有冲突,需要修改,修改的时候要注意,保留最新的历史
不然我们的修改就丢弃了。修改以后要记得敲下面的命令:
git add .  
git rebase --continue
如果你想放弃这次压缩的话,执行以下命令:
git rebase --abort 

如果没有冲突,或者冲突已经解决,则会出现修改后的的窗口,输入:wq保存退出即可
最后提交到远程(注意不要覆盖别人的代码,因为这几个都是我自己提交的,另外合并好之后不要pull
否则不但没有合并,远程还会多出两次提交,执行以下命令强制推送到远程)
git push --force origin master ==> 简写 git push -f

利用rebase指令删除远程提交

删除最后一次提交

  • 第一步:回滚上一次提交 git reset --hard HEAD^
  • 第二步:强制提交本地代码 git push origin master -f

删除指定commit提交(非最后一次提交)

  • 第一步:强制提交本地代码,可以结合git提交记录一起看 git reflog 1662545357967.png
  • 第二步:rebase操作 git rebase -i 35f96e1 (把原本的 pick 单词修改为 drop 就表示该ID对应的 commit log 我们需要删除,然后保存退出即可) image.png
  • 第三步:提交至远程
git add .                   # 冲突时使用
git commit -m "new commit"  # 冲突时使用
git rebase --continue       # 冲突时使用
git push origin 分支 -f

修改提交说明

image.png

误提交大文件怎么办?

git rm --cached xx.png
git commit --amend
若历史版本,需要变基 git rebase -i <commit-id>

删除合并历史 命令

rm -rf .git/MERGE*

如何将B分支的一个commit合并到A分支:

  1. git checkout B
  2. //查看提交日志 git log
  3. 找出要合并的commit ID
  4. 切换到A分支上 git checkout A
  5. git cherry-pick commitID

git合并不同仓库的分支代码(两个仓库需要有一个提交节点代码是相同的)

原文链接:git合并不同仓库的分支代码 | 果实的技术分享 (shengshunyan.xyz)

  1. 第一步:在A项目添加你所需要合并的项目仓库 git remote add pony-B http://xxx.git
  2. 第二步:查看A项目的所有远程仓库git remote show
  3. 第三步:拉取B项目的仓库 git fetch pony-B
  4. 第四步:查看你所需要合并分支的提交记录git log pony-B/master(根据自己需要的分支) --oneline
  5. 第五步:根据第4步得出所需的提交commitId git cherry-pick f2fbbf8a
  6. 第六步:完成后可删除关联的B项目仓库 git remote remove pony-B

image.png

image.png

image.png

image.png