Git问题长期收录
参考资料:阮一峰:常用 Git 命令清单
- 查看某个文件夹下的所有更改
- 给以前的提交打tag
- git提交文件夹大小写的问题
- 查看某个文件的所有提交记录
- github提交头像变化的问题
- 提示 Your branch is ahead of 'origin/new' by 1 commit.
- 其他
- 如何切换远程分支
- 无法git pull的问题
- 关于git命令的简写
- 关于初始化一个仓库
- 基于当前分支创建新的分支,并且提交到远程
- 打tag
- 合并分支
- 删除远程分支和tag
- 关于新建本地分支(不提交远程
- 回退版本
- 添加SSH KEY
- 如何clone 一个gist
- 如何创建一个空白分支
- 放弃本地更改,强制同步线上最新代码
- 保持当前分支没提交的代码,然后切换分支
- 强制同步本地代码到线上(会强制覆盖)
- 更改git仓库地址
- 更改git邮箱配置
- 错误commit 如何取消
- rebase合并多个commit为一个
- rebase干净commit提交线
- 强制覆盖某个分支(完全舍弃某个分支代码,用另外一个分支)
1. 查看某个文件夹下的所有更改
# 查看所有的更改
git status
# 简写形式
gst
# 查看某个文件夹下的所有更改(查看actions文件夹下的所有更改)
git status actions
2. 给以前的提交打tag
# 补打标签(tag)
git tag -a v1.0 996a317
# 通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作
git push origin v1.0
# 7位的校验码可以通过git log或者github中的对应commit提交记录中的full SHA中的头7位
#(就是页面上显示的7位)
补打标签参考资料:git tag — 标签相关操作
3. git提交文件夹大小写的问题
将文件夹大小写改变之后提交后发现github中出现了奇怪的大小写不同的同名文件夹
git config core.ignorecase false
参考资料:如何配置Git支持大小写敏感和修改文件名中大小写字母呢? 参考资料:git设置大小写敏感问题
可是即使这么操作了,github上还是同时存在大小写的问题,暂时不知道怎么解决
解决
先将重名的文件夹移到别的地方,然后提交,相当于删除了对应文件夹,然后再移回来,再提交git
4. 查看某个文件的所有提交记录
git blame [filename]
5. github提交头像变化的问题
改下本地git配置
git config --global user.name "username"
git config --global user.email “[email protected]”
6. 提示 Your branch is ahead of 'origin/new' by 1 commit.
意思是你当前的master分支比远程master分支超前1个提交
解决方法(暂缺):
7. 其他
# git remote命令列出所有远程主机
git remote
origin
上面命令表示,当前只有一台远程主机,叫做origin 克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定
get fetch
git pull
git pull origin new
# 上面命令表示,取回origin/new分支,再与当前分支合并
# 实质上,这等同于先做git fetch,再做git merge
一旦远程主机的版本库有了更新,需要将这些更新取回本地,这时就要用到git fetch命令
git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并
git push
git push origin new
# 上面命令表示,将本地的new分支推送到origin主机的new分支
# 如果后者不存在,则会被新建
- git push命令用于将本地分支的更新,推送到远程主
9. 无法git pull的问题
报错:fatal: refusing to merge unrelated histories 解决方案:
git pull origin master --allow-unrelated-histories参考资料:git无法pull仓库refusing to merge unrelated histories
10. 关于git命令的简写
| 简写 | 原命令 | 解释 |
|---|---|---|
| gst | git status | 略 |
| gd | git diff | |
| gl | git pull | |
| gcol | git checkout | |
| gl | git pull | |
| gp | git push |
参考资料:Git命令行操作简写
11. 关于初始化一个仓库
1. 使用别人的脚手架,删除.git 文件
2. 进入目标目录,执行以下命名
git init
git add .
git commit -m "init"
git remote add origin https://github.com/ckinmind/xxx-xxxx.git
git push -u origin master
13. 打tag
// 带信息的tag
git tag -a v1.1 -m "this is message"
git push origin --tags
// 轻量级tag
git tag 1.3.0
14. 合并分支
git merge dev // 当前分支合并dev分支
15. 删除远程分支和tag
git push origin --delete <branchName> // 删除远程分支
git push origin --delete tag <tagname> // 删除远程tag
删除本地分支和tag
git branch -D <branchName> // 删除本地分支
git tag -d <tagname> // 删除本地tag
16. 关于新建本地分支(不提交远程)
新建一个本地分支,修改文件之后,直接切换分支,会发现刚才的更改会直接作用到所有分支上,正确的做法是修改新建的本地分支之后先
git add .然后再切换别的分支,这时候更改不会污染到别的分支上
17. 回退版本
首先
git log, 复制想要回退的commit id, 然后执行git revert <commit id>, 注意这个回退是新增一次commit 取消掉那个提交的更改记录
18. 添加SSH KEY
## 1. 生成key
ssh-keygen -t rsa -b 4096 -C "[email protected]"
## 2. 一路回车(不要密码)
## 3. 将SSH KEY添加到ssh-agent
eval "$(ssh-agent -s)"
ssh-add -K ~/.ssh/id_rsa
## 4. 复制KEY然后添加到Github中
pbcopy < ~/.ssh/id_rsa.pub ## 复制
参考资料:Generating a new SSH key and adding it to the ssh-agent
19. 如何clone 一个gist
git clone [email protected]:5834862.git
clone gist貌似只能通过ssh方式,需要现在本地添加ssh key,复制ssh地址之后还要去掉@后面的gist
20. 如何创建一个空白分支
git checkout --orphan doc
git rm -rf .
git commit -am "new branch for documentation"
参考:在GIT中创建一个空分支
21. 放弃本地更改,强制同步线上最新代码
git fetch --all
git reset --hard origin/master
git fetch 只是下载远程的库的内容不做任何的合并 git reset 把HEAD指向刚刚下载的最新的版本
22. 保持当前分支没提交的代码,然后切换分支
git stash
git checkout [另一个分支]
....
git checkout [原分支]
git stash pop // 释放更改
这种做法的好处是如果当前分支的更改的代码你不暂时不想提交,又要切分支去,这时候可以使用这种方法,切回来的时候使用
git stash pop就又保持之前的样子,而git add .会提交变动到暂存区,而前面的方法不会
23. 强制同步本地代码到线上(会强制覆盖)
git push -u origin master -f
但本地版本和线上版本不一样的时候,或者,我线上创建了一个项目,并且有初始化几个文件,然后我本地另外创建了项目,这时候我想关联这两个项目,用git remote add origin 项目git地址,然后本地提交正常提交时会遇到报错,这个时候直接强制更新好了,可能会将线上的文件覆盖
24. 更改git仓库地址
git remote set-url origin 新的git地址http或者ssh
git仓库迁移遇到这种情况
25. 更改git邮箱配置
# 查看git配置,看看当前的邮箱配置是什么
git config -l
# 将git邮箱设置为新的邮箱
git config --global user.email [email protected]
26. 错误commit 如何取消
1. 未push
git commit -m "commit message"
$ git reset HEAD~
2. 已经push
27. rebase合并多个commit为一个
# 查看commitId
git log --online
# 合并几次commit提交
git rebase -i HEAD~2
# 最后再提交
28. rebase干净commit提交线
# gi pull之后需要合并远程,合并完成后执行rebase
git rebase
# 查看提交线
git log --graph
# 提交
git push origin master
29. 强制覆盖某个分支(完全舍弃某个分支代码,用另外一个分支)
# 比如当前在master分支,master分支的代码不要了,想完全用develop的代码覆盖过来
git reset --hard origin/develop
# 直接强推,master分支的代码就被develop强制全覆盖了
git push --force