Git-总结
Git配置
用户名-邮箱
git config --global user.name "namexxx" git config --global user.email test@xx.com
SSH密钥
#生成 ssh-keygen -t rsa -C "xxx.com" #查看 cat ~/.ssh/id_rsa.pub #查看 cd ~/.ssh cat id_rsa.pub #测试密钥 ssh -T git@github.com #输出: Hi gjh123/Play! You've successfully authenticated, but GitHub does not provide shell access.
查看配置
git config --list
分支相关
查看本地分支
git branch
查看全部分支(包括远程)
git branch -a
新建分支
git branch dev
切换分支
git checkout dev
创建并切换到dev2
git checkout -b dev2
推送到远程
新建的dev 可以同步到远程仓库内
git push origin <branch-name>
删除本地分支
git branch -D branchName
删除远程分支
git push origin --delete <branch-name>
分支重命名
git branch -m oldName newName
git branch -m master main
切换分支
切换分支提醒要先commit修改的文件,如果不想提交,可以先暂存当前的状态,等切换回来再恢复就行了
eg:我在当前dev 修改了Go开发笔记,切换到test的时候 就提醒我要commit
git stash # 将当前工作目录的更改暂存起来
git checkout <branch-name> # 切换到其他分支
git stash pop # 在回到原来的分支后恢复暂存的更改
先暂存当前分支状态, 这时候再进行git checkout就不会提醒了
查看当前状态就已经被暂存起来了
等切换到test 操作完之后,再想切换回dev,执行git stash pop删除保存的状态就恢复到刚才在dev修改的文件了
git diff(查看修改的内容)
- 查看所有修改的文件内容:
git diff
- 查看某个文件的修改内容:
git diff <文件名>
- 查看某个提交之间的修改内容:
git diff <提交1> <提交2>
- 查看某个分支与当前分支之间的修改内容:
git diff <分支名>
在执行 git diff
命令后,Git 会显示修改的内容,以及添加或删除的行。修改的内容会以 -
(表示被删除的行)和 +
(表示被添加的行)的形式显示。
如果您只想查看修改的文件列表,可以添加 --name-only
参数:
git diff --name-only
这样会只显示被修改的文件名,而不会显示具体的修改内容。
请注意,git diff
命令可以与其他 Git 命令结合使用,例如与 git log
结合查看某个提交的修改内容:
git diff <提交>^ <提交>
以上是常用的 git diff
用法,您可以根据具体的需求和情况选择合适的方式来查看代码的修改内容。
查看历史
# 每个提交在一行内显示 git log --oneline # 在所有提交日志中搜索包含「homepage」的提交 git log --all --grep='homepage' # 获取某人的提交日志 git log --author="Maxence"
编辑上次commit信息
# 编辑上次提交 git commit --amend -m "更好的提交日志"
合并代码
main、dev 2个分支我想把dev合并到main
首先先切换到dev 拉取下最新代码
git checkout dev
git pull origin dev
再切换回来到main 执行merge操作
git checkout main
git merge dev
这样就会把dev合并到main 注意:要解决之间的冲突
查看某个版本修改的内容
git show
git show <commit>
例如,如果要查看最新提交的内容,可以使用:
git show HEAD
如果要查看某个特定的提交,可以使用其哈希值,例如:
git show abcdef123456
git checkout
切换到指定的版本中查看 git checkout 00af16e4f9c96f1f642fb943d4d610706113a294 回到当前版本(注意是 "-") git checkout -
仓库管理
关联远程仓库
使用 git remote add
命令将远程仓库添加到本地仓库的关联中。例如,如果远程仓库的 URL 是 https://github.com/username/repo.git
,可以运行以下命令:
git remote add origin https://github.com/username/repo.git
- 这里的
origin
是一个标识符,可以用来引用远程仓库。 - 使用
git remote -v
命令验证远程仓库是否成功关联。你应该能够看到远程仓库的 URL。 - 使用
git pull origin master
命令将远程仓库的更改拉取到本地仓库。这将合并远程仓库的master
分支与当前分支。 - 如果你有本地更改,可以使用
git push origin master
命令将本地更改推送到远程仓库的master
分支。如果是第一次推送,你可能需要使用git push -u origin master
,以将本地仓库的master
分支关联到远程仓库。 - 如果远程仓库有其他分支,你可以使用类似的命令进行拉取和推送,将本地仓库与远程仓库的其他分支同步。
拉取远程代码
当你在使用 git pull
命令时,如果远程仓库和本地仓库的历史没有共同的祖先,就会出现 "refusing to merge unrelated histories" 的错误。这通常发生在两个独立的仓库尝试进行合并操作时。
要解决这个问题,可以使用 --allow-unrelated-histories
参数来允许合并没有共同历史记录的分支。以下是一个示例命令:
git pull origin main --allow-unrelated-histories
在上述示例中,origin
是远程仓库的名称,main
是远程仓库的分支名称。--allow-unrelated-histories
参数允许合并没有共同历史记录的分支。
请注意,使用 --allow-unrelated-histories
参数可能会导致一些意外的合并结果,因为合并的分支可能没有共同的基础。在执行合并操作之前,确保你理解这个参数的含义,并在合并之后进行适当的代码检查和测试。
如果你不需要保留远程仓库的历史记录,可以通过创建一个新的空白仓库来解决这个问题,然后将本地仓库的内容推送到新的仓库。
标签操作
- 创建标签:
git tag <tag-name>
- 查看标签:
git tag
- 推送标签到远程仓库:
git push origin <tag-name>
- 删除本地标签:
git tag -d <tag-name>
- 删除远程标签:
git push origin :refs/tags/<tag-name>
重写提交历史
- 修改最后一次提交:
git commit --amend
- 修改多个提交:
git rebase -i <commit-id>
- 合并多个提交:
git rebase -i <commit-id>
撤销操作
- 撤销工作区的修改:
git checkout -- <file-name>
- 撤销暂存区的修改:
git reset HEAD <file-name>
- 撤销提交:
git revert <commit-id>
- 回滚到指定提交:
git reset <commit-id>
文件重命名
git mv fileName newFileName git mv demo1 demo2
常见问题
超时没权限拉取推送
ssh: connect to host github.com port 22: Connection timed out
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.
vim ~/.ssh/config 添加内容: Host github.com Hostname ssh.github.com Port 443
测试下
ssh -T git@github.com
显示下面内容就好了
Hi xxxxx! You've successfully authenticated, but GitHub does not provide shell access.