Git的小技巧,持续更新中
1. 删除远程分支
方法1
git push origin --delete [branch_name]
方法2
git push origin : [branch_name]
2. 删除本地分支
git branch -D [branch_name]
3. 项目源代码迁移到另一个gitlab的方法(保留原来的提交记录)
git remote rename origin old-origin //把旧远端仓库改个名字,当前的一般默认origin
git remote add origin http://10.0.0.XXX/management/myTest.git //新的git地址是自动生成的
git push -u origin --all //同步推送远端仓库
git push -u origin --tags //同步推送远端仓库
git config --global --list //查看配置
4. Git 别名(即Git命令的简写设置)
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
5. Git合并多个commit
git rebase -i commit_id(start) commit_id(end)
这里需要注意,commit_id->(start,end],是前开后闭的。
编辑commit内容,将pick修改为squash,将commit进行合并。
Commands 说明,以下单字符命令为简写命令。
p, pick: 保留该 commit。
r, reword: 保留该 commit,可以修改 commit 的注释。
e, eidt: 保留该 commit,但停下来修改该 commit (不仅仅是注释),可以用来解决 merge 冲突。
s, squash: 将该 commit 和 前面一个 commit 合并。
f, fixup: 将该 commit 和 前面一个 commit 合并,但不保留该提交的注释信息。
x, exec: 执行 shell 命令。
d, drop: 丢弃该 commit。
合并后修改commit注释,直接编辑即可。
参考自:https://zhuanlan.zhihu.com/p/437636081
6. Git修改最近提交的 commit 信息
$ git commit --amend --message="modify message by xxtest" --author="xxxxx <xxxxx@163.com>"
# 仅修改 message 信息
$ git commit --amend --message="modify message by xxtest"
# 仅修改 author 信息
$ git commit --amend --author="xxxxx <xxxxx@163.com>"
7. 删除本地和远程的tag
- 删除本地tag
git tag -d tag-name
- 删除远程tag
git push origin :refs/tags/tag-name
8. 删除tag,branch的缓存
如果pod tag后,删除tag再添加同名的tag,pod会使用tag缓存。
破解办法
pod cache clean 你的库名字
9. git忽略已经加入版本控制的文件
对于一些已经加入到git版本控制的临时代码(如target下编译的class文件,根本不需要git追踪),如果每次提交都要手动去除,还是很麻烦的。那么如何清除这些已经加入到版本控制的代码呢?
如果是忽略文件的话 git rm --cached 文件名
如果是忽略文件夹的话 git rm -r --cached 文件夹名
10. git cherry-pick 多个commit操作
- 单个commit合并
git cherry-pick commit_id
- 多个连续commit合并
git cherry-pick commit_id..commit_idn
或者
git cherry-pick commit_id commit_idx commit_idy
11. Git 找回删除文件的方法
- git checkout
git checkout filePaht/Directory
需要注意的是,使用 checkout 命令会覆盖掉本地的修改,所以在使用前需要将本地的修改进行备份或者提交到版本库。
这个命令的含义是将该文件从暂存区恢复到工作区,也就是取消对该文件的暂存。如果我们刚刚将该文件删除时没有执行 commit 命令,则该文件是在暂存区被删除的。使用 reset 命令可以将该文件从暂存区恢复到工作区。
需要注意的是,使用 reset 命令不会删除文件,只是将文件从暂存区移动回工作区。如果需要将文件完全删除,则可以使用 rm 命令将其删除,然后再使用 commit 命令提交删除操作。
2. git reset
git reset HEAD filePaht/Directory
这个命令的含义是将该文件从暂存区恢复到工作区,也就是取消对该文件的暂存。如果我们刚刚将该文件删除时没有执行 commit 命令,则该文件是在暂存区被删除的。使用 reset 命令可以将该文件从暂存区恢复到工作区。
需要注意的是,使用 reset 命令不会删除文件,只是将文件从暂存区移动回工作区。如果需要将文件完全删除,则可以使用 rm 命令将其删除,然后再使用 commit 命令提交删除操作。
12. 同步远端分支到本地
遇到的问题:
git fetch/ pull 拉取远端分支失败。提示如下错误。
cannot lock ref 'refs/remotes/origin/bugfix/bug': 'refs/remotes/origin/bugfix' 已存在,无法创建 'refs/remotes/origin/bugfix/bug'
来自 gitlab.xxx-inc.com:xxx/xxxx
! [新分支] bugfix/bug -> origin/bugfix/bug (不能更新本地引用)
解决方案:
git remote prune origin
prune /pruːn/
v.修剪,修整;删除,削减
n.李子干,西梅干;<非正式>讨厌的人,乏味的人;(树枝、灌木丛等的)修剪,修整
参考自:
https://editor.csdn.net/md/?articleId=134030957
https://blog.csdn.net/wangqingpei557/article/details/53147086
13. 查看提交修改的文件列表
a. 查看最后一次提交记录的修改文件信息
git show --raw
b. 查看指定commit id对应修改的文件列表
git show --raw commit_id
git show --raw 2f80f1c8bb2cb8e91d22ad38480b681c194f6518
c.查看所有提交记录的修改文件信息
git log --stat
git log --name-only
14. 查看所有分支的列表
git branch -a
这将显示所有本地分支和远程分支的列表。本地分支以“*”标记,并且远程分支以“remotes/”前缀标识。
15. 使用以下命令查看分支的全部提交历史
git log
这将显示所选分支的所有提交历史。每个提交都会显示提交作者、提交日期、提交消息等信息。
git log --oneline
使用–oneline
选项可以显示每个提交的简短一行信息。
git log --graph
用–graph
选项可以显示提交历史的分支图形。
但是这个弊端就是:它只能查看与当前分支有关的提交和合并,比如我们有2个分支master和dev,当前分支是master,我们输入git log只能查询到关于master主分支的所有提交,根本看不到dev分支的任何蛛丝马迹,这太不方便了。
git log --graph --all
如果要再简化观看流程,可以再加上–oneline属性,一个commit只显示一行。所以最终的形式为:
git log --graph --all --oneline
16. 未完待续……
参考自: