珍藏多年的 Git 问题和操作清单( 三 )


文章插图
 
git-merge
所以这时在合并前,通常我会先执行:
git checkout featuregit rebase dev这样就可以将 feature 重新拼接到更新了的 dev 之后,然后就可以合并了,最终得到一个干净舒服的提交线图 。
再次提醒:像之前提到的,rebase 是『危险行为』,建议你足够熟悉 git 时才这么做,否则的话是得不偿失啊 。
总结
使用 git pull --rebase 和 git merge --no-ff 其实和直接使用 git pull git merge 得到的代码应该是一样 。
使用 git pull --rebase 主要是为是将提交约线图平坦化,而 git merge --no-ff 则是刻意制造分叉 。
六、SSH
1. 查看是否生成了 SSH 公钥
$ cd ~/.ssh$ lsid_rsa id_rsa.pub known_hosts其中 id_rsa 是私钥,id_rsa.pub 是公钥 。
2. 如果没有那就开始生成,设置全局的user.name与user.email
git config --list // 查看是否设置了user.name与user.email,没有的话,去设置// 设置全局的user.name与user.emailgit config --global user.name "XX"git config --global user.email "XX"3. 输入 ssh-keygen 即可(或`ssh-keygen -t rsa -C "email"`)
$ ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/Users/schacon/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /Users/schacon/.ssh/id_rsa.Your public key has been saved in /Users/schacon/.ssh/id_rsa.pub.The key fingerprint is:4. 生成之后获取公钥内容,输入 cat ~/.ssh/id_rsa.pub 即可,复制 ssh-rsa 一直到 .local这一整段内容
$ cat ~/.ssh/id_rsa.pubssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSUGPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XAt3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/EnmZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbxNrRFi9wrf+M7Q== schacon@agadorlaptop.local5. 打开 GitLab 或者 GitHub,点击头像,找到设置页
6. 左侧找到 SSH keys 按钮并点击,输入刚刚复制的公钥即可
七、暂存
git stash 可用来暂存当前正在进行的工作,比如想 pull 最新代码又不想 commit,或者另为了修改一个紧急的 bug,先 stash,使返回到自己上一个 commit,,改完 bug 之后再 stash pop , 继续原来的工作;

  • 添加缓存栈: git stash ;
  • 查看缓存栈: git stash list ;
  • 推出缓存栈: git stash pop ;
  • 取出特定缓存内容: git stash Apply stash@{1} ;
八、文件名过长错误
Filename too long warning: Clone succeeded, but checkout failed.
git config --system core.longpaths true九、邮箱和用户名
查看
git config user.namegit config user.email修改
git config --global user.name "username"git config --global user.email "email"十、.gitignore 更新后生效:
git rm -r --cached .git add .git commit -m ".gitignore is now working”十一、同步Github fork 出来的分支
1、配置remote,指向原始仓库
git remote add upstream https://github.com/InterviewMap/InterviewMap.git2、上游仓库获取到分支,及相关的提交信息,它们将被保存在本地的 upstream/master 分支
git fetch upstream# remote: Counting objects: 75, done.# remote: Compressing objects: 100% (53/53), done.# remote: Total 62 (delta 27), reused 44 (delta 9)# Unpacking objects: 100% (62/62), done.# From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY# * [new branch] master -> upstream/master3、切换到本地的 master 分支
git checkout master# Switched to branch 'master'4、把 upstream/master 分支合并到本地的 master 分支,本地的 master 分支便跟上游仓库保持同步了,并且没有丢失本地的修改 。
git merge upstream/master# Updating a422352..5fdff0f# Fast-forward# README | 9 -------# README.md | 7 ++++++# 2 files changed, 7 insertions(+), 9 deletions(-)# delete mode 100644 README# create mode 100644 README.md5、上传到自己的远程仓库中
git push 原文:https://mp.weixin.qq.com/s?__biz=MzIwMDY0Nzk2Mw==&mid=2650320580&idx=1&sn=1a1f258eca7da3457aa9b79dde91d868&utm_source=tuicool&utm_medium=referral




推荐阅读