1. 初始化git本地库
git init
2. 设置全局的git用户名和邮箱
git config --global user.name 'yourname'
git config --global user.email 'youremail@example.com'
若只针对一个项目Repository, 则不需要参数--global
3. ssh-keygen命令生成ssh密钥
cd "c:/Users/用户名/" # 对于windows系统用户, 进入到用户根目录下
cd ~ # 对于linux系统用户, 进入到用户根目录下
mkdir .ssh # 创建目录.ssh
cd .ssh # 进入.ssh目录下
ssh-keygen # 默认直接回车情况下, 创建私钥id_rsa和公钥id_rsa.pub两个文件, 且私钥密码为空
ssh-keygen -t rsa # -t表示指明生成ras的私钥和公钥
ssh-keygen -t rsa -C "我的SSH密钥" # -C表示添加密钥的注释
4. 检测ssh key通过
命令ssh -T git@xxx.com
, 其中, xxx.com是代码托管网站的网站
ssh -T git@gitlab.com
Welcome to GitLab, @zhuxiongxian!
5. 查看配置信息
git config --list # 查看本地仓库的git配置信息
git config -l # 同上, --list参数可简写为-l
git config --global -l # 查看全局的git配置信息, --global表示全局
6. git之https或http方式设置记住用户名和密码
https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速
全局设置记住密码(默认15分钟):
git config --global credential.helper cache
全局设置长期存储密码:
git config --global credential.helper store
本地设置长期存储密码, 在项目根目录下执行以下命令:
git config credential.helper store
或者在本地的工程文件夹的.git下打开config文件, 在文件project/.git/config
添加:
[credential]
helper = store
再输入一次用户名密码后就可以保存住了。
7. 更新代码/拉取代码
git pull
git pull origin <remote_branch>
git pull origin <remote_branch>:<local_branch>
8. 查看有内容变更的文件
git status
9. 提交代码/上传代码
git add .
git commit -m "推送的消息"
git push origin master # 推送本地代码到远程版本库上
git push -u origin master # 第一次推送本地代码到远程版本库上
git push origin master -f # 强行推送本地代码到远程版本库上, -f表示force, 强行或强制的意思
10. 合并冲突
git add .
git commit -m "update"
git pull
# 如果自动全并成功, 则直接push;
git push origin master
# 如果自动合并失败, 在手动解决冲突后, 还要add--commit--push
git add .
git commit -m "update"
git push origin master
11. 手动解决冲突并提交代码
git add .
git commit -m "update"
git pull
此时报错, 英文提示合并失败, 并告诉你冲突的文件是哪些, 这时需要你手动解决冲突, 找到英文提示合并冲突的文件, 找到以下行:
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
p.s.
<<<<<<< HEAD
与=======
表示本地版本库的冲突内容=======
与>>>>>>> feature1
表示远程版本库的冲突内容
手动解决完冲突后, 再执行提交代码操作:
git add .
git commit -m "update"
git push origin master
12. git检查本地的代码修改情况
git diff # 可以查看当前没有add 的内容修改(不在缓冲区的文件变化)
git diff --cached # 查看已经add但没有commit 的改动(在缓冲区的文件变化)
git diff HEAD # 是上面两条命令的合并
13. Git pull 强行覆盖本地文件
git fetch --all
git reset --hard origin/master
git pull
14. git tag 标签(版本)的操作
- 创建标签:
git tag 标签名
- 显示所有标签:
git tag
- 共享所有标签到远程库:
git push --tags
# p.s. 如果有人克隆或者在线同步你的git仓库的话, 标签也会一并同步了 - 删除本地标签:
git tag -d 标签名
- 删除远程标签:
git push origin :refs/tags/标签名
- 检出标签:
git checkout 标签名
- 查看相应标签的版本信息, 并连同显示标签的提交对象:
git show 标签名
- 推送标签:
git push origin 标签名
- 查看提交的历史日志:
git log
- 重命名标签:
git tag 新标签 旧标签
示例:
git tag # 显示所有的标签
git tag v0.1.0 # 本地创建新的标签(版本)
git push --tags # 将本地的所有版本(标签)推送到远程库上(即共享标签)
git push origin v0.1.0 # 只推送标签v0.1.0到远程库上
15. git branch 分支的操作
git branch # 显示所有分支
git checkout 分支名 # 检出分支/切换到分支
16. 查看修改了哪些文件
git status
17. 查看修改了哪些文件及内容
git diff
18. 查看源
git remote -v
19. 删除源
git remote rm origin
20. 添加源
若源https://github.com/xiongxianzhu/qingmi.git
, 示例如下:
git remote add origin https://github.com/xiongxianzhu/qingmi.git
21. 创建并切换分支
创建dev分支,然后切换到dev分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用git branch命令查看当前分支:
$ git branch
* dev
master
git branch
命令会列出所有分支,当前分支前面会标一个*号。
然后,我们就可以在dev分支上正常提交, 示例:
$ git add .
$ git commit -m 'update'
$ git push --set-upstream origin dev
Counting objects: 4, done.
Delta compression using up to 6 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 1.27 KiB | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
To git@gitlab.com:quwei/docs.git
* [new branch] dev -> dev
Branch dev set up to track remote branch dev from origin.
22. 合并分支
dev
分支的工作完成,我们就可以切换回master
分支:
$ git checkout master
Switched to branch 'master'
现在,我们把dev
分支的工作成果合并到master
分支上:
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git merge
命令用于合并指定分支到当前分支
23. 删除分支
若合并完成后,不需要dev分支, 就可以放心地删除dev分支了:
$ git branch -d dev
Deleted branch dev (was b17d20e).
删除后,查看branch,就只剩下master分支了:
$ git branch
* master
上面是删除本地分支, 若删除远程分支, 如下:
git push origin --delete dev
就可以把分支dev从远程库中删除了。
24. 把分支master内容更新到分支dev
git checkout dev
git merge master
25. 重命名分支
查看所有分支, 将本地分支dev
重命名为xx
, 删除远程分支, 将本地分支推送到远程库:
git branch
git branch -m dev xx
git push --delete origin dev
git push origin xx
26. 分支小结
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除本地分支:git branch -d <name>
删除远程分支:git push origin --delete <name>
27. 禁用git filemode
git config core.filemode false
或编辑仓库下的仓库名/.git/config
文件, git config -e
orvim .git/config
[core]
filemode = false
28. 修改源
git remote set-url origin [NEW_URL]
或在项目根目录下, 修改配置文件:
cd .git
vim config
内容如下:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
# 修改成新的仓库地址
url = git@bitbucket.org:zhuxiongxian/blog.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
29. 简写git push origin 分支名
如当前分支名为 xx
, 想在当前分支xx
下简写git push origin xx
为git push
, 则:
git push --set-upstream origin xx
其中, xx
是分支名, 您需要替换为您的分支名即可。
30. 撤销本地的修改
git restore 文件名
git restore .
31. fatal: 拒绝合并无关的历史
使用参数--allow-unrelated-histories
:
$ git merge main
fatal: 拒绝合并无关的历史
$ git merge main --allow-unrelated-histories
32. 回滚代码
git tag
git show 1.0.0 # 得到commit_id
# 得到commit_id后,则可以通过git reset回滚到commit_id
git reset --hard <commit_id>
git reset --hard 357598e77fa2b6fa04c543e424c86230e30cf925
git push origin <分支名> -f
或
git push -f
注意,若强推不上master,则可能master被设置为保护分支,需要到相应的git网站,到该仓库下的设置–保护分支,将master移除出保护分支或允许你的git账户角色有强推到master的权限,保存设置后,再重新强推即可。
在生产环境的主机上,对源码回滚:
git checkout master
git pull
git reset --hard origin/master