Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Git 常用指令 & 技巧 #22

Open
gauseen opened this issue Apr 30, 2020 · 0 comments
Open

Git 常用指令 & 技巧 #22

gauseen opened this issue Apr 30, 2020 · 0 comments
Assignees
Labels

Comments

@gauseen
Copy link
Owner

gauseen commented Apr 30, 2020

Git 常用指令 & 技巧

远程仓库

# 查看远程仓库地址
git remote -v

# 添加远程仓库地址
git remote add origin [url]

# 删除远程仓库地址
git remote rm origin

# 重置远程仓库地址
git remote set-url origin [url]

分支操作

# 切换至dev分支
git checkout dev

# 创建一个新分支
git checkout -b newBranch

# 拉取远程分支,并变基
git pull --rebase

# 拉取远程分支到本地并建立追踪关系
git checkout -b 本地分支名 origin/远程分支名

# 查看所有分支
git branch -a

# 同步远程分支列表到本地
git fetch --prune

# 删除本地分支
git branch -d branchName

# 删除远程分支
git push origin -d branchName

# 合并本地 commit, squash 要合并的 commit
git rebase -i hash# 合并 B 分支到当前分支
git merge branchB

# 列出在远程合并的所有分支
git branch --merged

# 删除所有已合并的分支(除了 master|dev 分支)
git branch --merged | egrep -v "(^\*|master|dev)"

# 删除所有已合并的本地分支(除了 master|dev 分支)
git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d

commit message

# 重置提交备注信息
git commit --amend

git commit --amend -m "New commit message"

# 修改 commit message,X 是需要修改的数量
git rebase -i HEAD~X

tag 操作

# 查看所有 tag
git tag -l

# 新建一个 tag
git tag -a tagName -m "tag备注"

# 提交到远程 tag
git push origin v1.6

# 删除本地标签
git tag -d tagName

# 删除远程标签
git push origin -d [tag-name]

stash(缓存)操作

# 隐藏所有以追踪但未提交的文件
git stash

# 显示隐藏列表
git stash list

# 释放隐藏的最后一次记录
git stash pop

# 释放指定隐藏记录(stash@{1} 隐藏索引)
git stash pop stash@{1}

# 删除所有缓存的stash
git stash clear

对比操作

# 对比两个分支的不同,并导出到 diff.txt 文件中(覆盖 原来 diff.txt 文件内容)
git diff [branchA] [branchB] > diff.txt

# 对比两个分支的不同,并导出到 diff.txt 文件中(追加到 diff.txt 文件内容)
git diff [branchA] [branchB] >> diff.txt

cherry-pick commit 操作

# 它可以将某一个或者几个提交(commit)的更改,拉取复制到当前分支
git cherry-pick [commit]

代码回滚(撤销)

# 重置本地仓库、暂存区、工作区到指定 hash 处(只对已追踪文件生效)。【重写部分提交历史】
git reset --hard hash

# 将未追踪的文件从工作区中移除
git clean -f

# 撤销一个提交的同时,在当前提交历史里会创建一个新的提交,这是一个安全的方法。【不会重写提交历史】
git revert hash

# 注:git revert 可以当作撤销已经提交远程的更改,而 git reset 用来撤销没有提交远程的更改

# 回退工作区所有文件
git checkout .

# 回退单个文件
git checkout HEAD -- my-file.txt

Git 自定义

# 设置 git lg 别名
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

其他操作

# 删除 test.html 的追踪,但文件保留在本地
git rm --cached test.html

# 删除 test.html 的跟踪,且删除本地文件
git rm -f test.html

常见问题

# 错误信息
Git: fatal: Pathspec is in submodule

# 解决:
# 删除追踪关系
git rm -rf --cached dirName

# 添加追踪关系
git add dirName
# 修改 gitlab 用户名后,pull、push 报错,错误信息
fatal: Authentication failed for xxx

# 解决:
# 不保存用户名、密码
git config --system --unset credential.helper

# 输入一次,保存用户名、密码。保存位置:cat ~/.git-credentials
git config credential.helper store
# 本地仓库和远程有不同的开始点,也就是两个仓库没有共同的 commit ,就会出现无法提交

# 解决:
git pull origin branchName --allow-unrelated-histories
# gitlab commit 记录,不显示用户头像

git config --global user.email "[email protected]"

# 注:[email protected] 是 https://cn.gravatar.com/emails 中的 emial 账号
# git 默认忽略文件名字母大小写,造成修改文件名大小写无法同步到远程

# 关闭忽略大小写
git config core.ignorecase false

技巧

一、 免密提交代码到远程仓库

实现方式有 2 种:

  • 使用 ssh 方式连接远程仓库,可以免密登录(部分公司可能不支持 ssh)

  • 修改 http 连接配置,也可实现免密提交

# 单个项目保存用户名、密码(请确保该项目是 git 项目)
# 进入项目根目录
$ cd [project-rootDir]
$ cd .git/
$ vim config

# 做如下修改
[remote "origin"]
  url = http://yourUserName:[email protected]/wx-rebuild.git
...

# 保存并退出
:wq
# 全局保存用户名、密码
# 输入一次密码,全局保存
$ git config credential.helper store

注:
yourUserName: git 用户名
yourPassword: git 密码
@ 符号不要忘记!!!

二、vscode terminal git log 中文乱码 <E4><B6><BB><E7><9D><8C>

Mac OS: export LESSCHARSET=utf-8

Windows 用: set LESSCHARSET=utf-8

三、vscode terminal git commit -m "<中文乱码>"

如果安装了 zsh 可在 ~/.zshrc 中添加如下配置

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

欢迎关注只搞技术不搞广告文公众号:「学前端」

参考

@gauseen gauseen self-assigned this Apr 30, 2020
@gauseen gauseen added the git label Apr 30, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant