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 -eorvim .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 xxgit 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 <分支名> -fgit push -f

注意,若强推不上master,则可能master被设置为保护分支,需要到相应的git网站,到该仓库下的设置–保护分支,将master移除出保护分支或允许你的git账户角色有强推到master的权限,保存设置后,再重新强推即可。

在生产环境的主机上,对源码回滚:

git checkout master
git pull
git reset --hard origin/master