设置git
1
2
| git config --global user.name "Rose"
git config --global user.email "[email protected]"
|
增加远程origin
1
| git remote add origin <>
|
提交
第一次提交
1
2
3
4
5
| cd <project>
git remote add origin “”
git add .
git commit -am "处女提交"
git push -u origin master
|
日常提交
1
2
3
4
5
| git add .
d:
cd <project>
git commit -am "test"
git push
|
提交到别人的分支
1
2
3
4
5
6
7
8
| git remote add up <开源项目地址>
git status
git add .
git commit -m git push origin branch
# 获取上游的变化
git pull up
git push origin master
|
或者
1
2
3
4
5
6
7
8
9
10
| git remote add up <开源项目地址>
git status
git add .
git commit -m git push origin branch
# 获取上游的变化
git fetch up
git rebase up/master
git push origin master
|
分支管理
-
推送特定分支
-
查看当前分支
-
列出远程分支
-
列出所有分支
-
创建分支
-
切换分支
1
2
| git checkout AndroidStudio
git checkout master
|
-
创建并切换到分支
1
| git checkout -b branchName
|
submodule
将已有目录修改为子仓库
1
2
3
4
5
| projectfolder=build/html
rm -rf $projectfolder
git commit -am "clean"
git rm --cached $projectfolder
git submodule add [email protected]:zeusro/awesome-kubernetes-notes-release.git $projectfolder
|
清理删除子仓库
1
2
3
4
| rm -rf $projectfolder
rm -rf gitmodules
git rm --cached $projectfolder
git commit -am "clean"
|
灾难处理
修复未提交文件中的错误(重置)
如果你现在的工作目录(work tree)里搞的一团乱麻, 但是你现在还没有把它们提交; 你可以通过下面的命令, 让工作目录回到上次提交时的状态(last committed state):
git reset --hard HEAD
回退所有内容到上一个版本
1
2
3
| ```
git reset HEAD^
```
|
回溯到特定的commitid
1
2
3
4
| 在.git/logs/head 里面找到我那个提交了用
```
git reset <commit id> --hard
```
|
紧急热修复
思路是找到上次的稳定版本,修改后推送到目标分支.这种修复方式是最快的
1
2
3
4
5
6
7
| ```
# git checkout HEAD^1
回滚到上一次release的commitID
git checkout <commit ID>
git commit -am "fix"
git push origin HEAD:master
```
|
撤销上一次提交
1
2
3
4
| (该操作非常凶险,所有这次提交的内容都会不见)
```
git revert HEAD
```
|
git log
1
2
3
4
5
6
7
8
9
10
11
| git log --stat -n 5 // 简单的列出了修改过的文件
git log -p -n 5 // 详细的列出修改过的文件,及提交文件的对比
git log --graph // ASCII 字符串表示的简单图形,形象地展示了每个提交所在的分支及其分化衍合情况
git log --all --decorate --graph
git log --pretty=oneline
// 只显示哈希值和提交说明
git log --pretty=oneline/short/full/fuller/format:""(格式等)
git log --name-only // 仅在提交信息后显示已修改的文件清单
git log --no-merges // 不显示merge的log
:格式化日志
git log --pretty=format:" %cd %h - %s" --since=3.days
|
参考链接:
Git 基础 - 查看提交历史
其他命令
1
2
| git checkout //后面不跟任何参数,则就是对工作区进行检查
git checkout --filename //从暂存区中恢复文件(确保filename与branch名称不同)
|
VS插件异常处理
-
无法将分支 master 发布到远程 origin,因为远程存储库中已存在具有同一名称的分支。发布此分支将导致远程存储库中的分支发生非快进更新。
1
| git push --set-upstream origin master
|
-
无法将本地分支master发布到远程存储库origin
1
2
| git config branch.master.remote origin
git config branch.master.merge refs/heads/master
|
git的错误处理
2边的文件都有修改
You have unmerged paths.
(fix conflicts and run “git commit”)
Move/rename/delete/copy/edit/whatever those files to get your code to the desired state, then git add the changes and git commit the conflict resolution.
1
| git reset 9b25cd5635b4986aa1f1d614381226f79d123f87 --hard
|
中途初始化git项目之后从远程仓库中拉取发生错误 The following untracked working tree files would be overwritten by merge
1
2
| git fetch origin
git reset --hard origin/master
|
git pull需要密码
1
| 把C:\Users\<用户>\.ssh里的id_rsa和id_rsa.pub文件复制到git安装目录下的.ssh目录里面即可
|
fatal: The current branch master has no upstream branch
1
2
3
| [branch "master"]
remote = origin
merge = refs/heads/master
|
mac ssh 出现 permission deny 的解决方案
1
2
| chmod 600 ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa
|
Your branch and ‘origin/master’ have diverged
1
2
3
4
| 注意,此操作会废了本地的提交
git fetch origin
git reset --hard origin/master
|
特别的技巧
修改.gitignore文件后,清理项目文件夹
1
2
3
4
| git rm -r --cached .
git add .
git commit -am "clean"
git push
|
清除垃圾前提示
强制清除垃圾
多个pushurl,一个pull地址
1
2
3
4
5
6
7
8
9
10
| git remote set-url --push --add origin <url>
git remote set-url --push --add origin <url>
效果如下:
[remote "origin"]
url = <url1>
pushurl = <url2>
pushurl = <url1>
fetch = +refs/heads/*:refs/remotes/origin/*
|
修改远程url
1
| git remote set-url origin <URL>
|
从历史中永远删除某个文件
从 https://rtyley.github.io/bfg-repo-cleaner/ 中下载 bfg-1.13.0.jar
1
2
3
| java -jar bfg.jar --strip-blobs-bigger-than 100M <git项目完整路径>
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push
|
push所有本地的分支到远程仓库中对应匹配的分支。
1
| git config --global push.default matching
|
只有当前分支会被push到你使用git pull获取的代码。
1
| git config --global push.default simple
|
更改origin url
1
| git remote set-url origin <URL>
|
代理
http 代理
1
2
3
4
5
6
7
8
9
| git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
git config --local http.proxy 'http://127.0.0.1:1080'
git config --local https.proxy 'http://127.0.0.1:1080'
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
|
ssh代理
1
2
3
4
5
| cat << EOF >> ~/.ssh/config
Host github.com
ProxyCommand ssh root@proxy nc %h %p
EOF
|
抹除所有提交历史,重新提交
1
2
3
4
5
6
7
8
9
| git checkout --orphan latest_branch
git add -A
git commit -am "重新提交"
git branch -D master
git branch -m master
git push -f origin master
**gitlab的注意事项**
|
-
gitlab的话,要先取消protected_branches中 master 的保护,然后再将本地的这个 master 提交到另外一个远程分支
1
| git push origin master:temp;
|
-
然后设置这个temp 分支为默认分支,然后再提交到master远程分支
1
| git push origin master:master;
|
-
删除 temp 远程分支,设置 master 为默认分支
1
2
| : 删除远程master分支
git push origin :temp
|
设置发布用公钥
1
| 把本地用户的 ~/.ssh/id_rsa.pub 的内容追加到 Git 服务器仓库所属用户的 ~/.ssh/authorized_keys 文件的末尾即可。文件不存在的话用`ssh-keygen`生成
|
管理大文件
Git Large File Storage,原理是历史里面存放文件的指针,文件放在远程仓库,提高整个拉取,推送效率。
1
2
3
4
| git lfs install
brew install git-lfs
git lfs track "*.psd"
git add .gitattributes
|
如果大文件以及存在于历史中,则需要输入另外的命令
1
| git lfs migrate import --include="*.psd"
|
从别的地方重新拉取仓库之后,被track的文件已指针的形式存在,如果需要还原文件,得输入2个命令
1
2
| git lfs install
git lfs pull
|
获得命令帮助
服务器可能需要安装 nc (yum install -y nc
)命令
参考链接:
- ssh 连接提示 Permission denied (publickey) 怎么破
- Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)
- SSH Permission denied (publickey)解决办法
- 关于Gitlab若干权限问题
- git删除master分支后重建
- git: Your branch and ‘origin/master’ have diverged - how to throw away local commits?