Git 操作备忘

Git 操作备忘

特别推荐:https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1

git批量移除文件

  • git rm *.suo 移除一类文件;

设置Git的user name和email:

$ git config —global user.name “norman.zheng”
$ git config —global user.email “norman.zheng@vipshop.com”

生成SSH

  • 查看是否已经有SSH密钥了:cd ~/.ssh用此命令进入后ls查看,如果有则备份删除。
  • 生成命令
$ ssh-keygen -t rsa -C “norman.zheng@vipshop.com”
  • 然后按三个回车,密码设置为空。最后生成了两个文件id_rsaid_rsa.pub
    vi命令编辑模式查看公钥,并复制.pub文件,粘贴到gitlab里即可

添加密钥到ssh

  • ssh-add 文件名
    需要之前输入密码。
  • 在github上添加ssh密钥,这要添加的是“id_rsa.pub”里面的公钥。

变基

  • git rebase 会将当前分支的提交复制到指定的分支之上。
  • 变基与合并有一个重大的区别:Git 不会尝试确定要保留或不保留哪些文件。我们执行 rebase 的分支总是含有我们想要保留的最新近的修改!这样我们不会遇到任何合并冲突,而且可以保留一个漂亮的、线性的 Git 历史记录。

交互式变基。在我们正在 rebase -i HEAD~xx 的提交上,我们可以执行以下 6 个动作:

  • reword:修改提交信息;
  • edit:修改此提交;
  • squash:将提交融合到前一个提交中;
  • fixup:将提交融合到前一个提交中,不保留该提交的日志消息;
  • exec:在每个提交上运行我们想要 rebase 的命令;
  • drop:移除该提交。

软重置git reset --soft HEAD~xx保留变动,回滚到某个commit

还原(Reverting)另一种撤销修改的方法是执行 git revert。通过对特定的提交执行还原操作,我们会创建一个包含已还原修改的新提交。git revert xxxx撤销commitId的变动。并直接生成一个新的commitID(merge后的)

拣选(Cherry-picking)当一个特定分支包含我们的活动分支需要的某个提交时,我们对那个提交执行 cherry-pick!对一个提交执行 cherry-pick 时,我们会在活动分支上创建一个新的提交,其中包含由拣选出来的提交所引入的修改。

通过在这个远程分支上执行 git fetch,我们就可在本地获取这些修改。这不会以任何方式影响你的本地分支:fetch 只是单纯地下载新的数据而已。

尽管 git fetch 可用于获取某个分支的远程信息,但我们也可以执行 git pull。git pull 实际上是两个命令合成了一个:git fetch 和 git merge。当我们从来源拉取修改时,我们首先是像 git fetch 那样取回所有数据,然后最新的修改会自动合并到本地分支中。

git reflog 是一个非常有用的命令,可以展示已经执行过的所有动作的日志。包括合并、重置、还原,基本上包含你对你的分支所做的任何修改。

git patch生成

$ git format-patch HEAD^       #生成最近的1次commit的patch
$ git format-patch HEAD^^      #生成最近的2次commit的patch
$ git format-patch HEAD^^^     #生成最近的3次commit的patch
$ git format-patch HEAD^^^^    #生成最近的4次commit的patch
$ git format-patch <r1>..<r2>  #生成两个commit间的修改的patch(生成的patch不包含r1. <r1>和<r2>都是具体的commit号)
$ git format-patch -1 <r1>     #生成单个commit的patch
$ git format-patch <r1>        #生成某commit以来的修改patch(不包含该commit)
$ git format-patch --root <r1> #生成从根到r1提交的所有patch

应用patch

  • git am会直接将patch的所有信息打上去,而且不用重新git add和git commit,author也是patch的author而不是打patch的人。
  • git apply是另外一种打patch的命令,其与git am的区别是:git apply并不会将commit message等打上去,打完patch后需要重新git add和git commit。
检查patch的情况
$ git apply --stat 0001-limit-log-function.patch  # 查看patch的情况
$ git apply --check 0001-limit-log-function.patch # 检查patch是否能够打上,如果没有任何输出,则说明无冲突,可以打上
打patch场景之一使用git diff生成的patch
$ git apply xxx.patch
打patch场景之二使用git format-patch生成的patch
$ git am 0001-limit-log-function.patch           # 将名字为0001-limit-log-function.patch的patch打上
$ git am --signoff 0001-limit-log-function.patch # 添加-s或者--signoff,还可以把自己的名字添加为signed off by信息,作用是注明打patch的人是谁,因为有时打patch的人并不是patch的作者
$ git am ~/patch-set/*.patch                     # 将路径~/patch-set/*.patch 按照先后顺序打上
$ git am --abort                                 # 当git am失败时,用以将已经在am过程中打上的patch废弃掉(比如有三个patch,打到第三个patch时有冲突,那么这条命令会把打上的前两个patch丢弃掉,返回没有打patch的状态)
$ git am --resolved                              # 当git am失败,解决完冲突后,这条命令会接着打patch
posted @ 2020-05-08 10:50  懒懒初阳  阅读(188)  评论(0编辑  收藏  举报