Git

参考廖雪峰大佬的Git教程进行学习:廖雪峰的Git教程

git常用命令

Git安装

1.Linux
Debian/Ubuntu:"sudo apt-get install git(git-core)":包管理获取安装包
其他:下载git源码并解压后,"./config","make","sudo make install"
2.Windows
正常安装即可

安装完后需要设置本地的用户与地址

其他git配置

git config --global color.ui true  #Git显示颜色,"global"为全局参数,表示用于当前用户在本地的所有git仓库,若没有只对当前仓库有效
                    alias.st status  #给"status"设置别名"st",带"--"的参数无法单独设置,但可以连带前面的命令一起设置别名
                    alias.last 'log -l'  #显示最新一次的提交
                    -e  #直接呼出".gitconfig"文件

.gitignore文件配置

组件说明:https://github.com/github/gitignore

尝试添加".gitignore"所忽略的文件会报错,可通过git add -f <name>强行添加,也可以用git check-ignore -v <name>:检查".gitignore"检查忽略规则与文件的关系

"!<name>"在".gitignore"规则中排除指定文件

无法用资源管理器直接新建名为".gitignore"的文件,但是可以用文本编辑器"新建+保存"或者"另存为"的方式创建该文件

Git 配置代理

只对"github.com"配置"http"全局对应的"socks5"代理:

git config --global http.https://github.com.proxy socks5://127.0.0.1:51837

配置全局"https"代理

git config --global https.proxy http://127.0.0.1:58591

取消"http"代理服务器:

git config --global --unset http.proxy

Git命令

git remote add origin git@github.com:forestsetyou/xxx.git:添加github的远程仓库到本地的origin
git clone git@github.com:Forestsetyou/Codes2022:利用SSH协议远程克隆Github仓库
          <URL>:http协议克隆仓库
git init:初始化仓库
git commit -m "msg":提交改动,备注"msg"
git commit:跳出"EDITMSG"文件要求写入提交说明,否则提交失败,写入后保存退出即可
git add "file1.txt" "file2.txt":添加改动过的文件
git status:查看当前工作区状况,工作区与版本库的比较以及工作区与缓存区的比较
git diff <file>:查看缓存区与工作区的文件变化
git diff HEAD -- <file>:查看库中最新版本与工作区的某文件的变化
git log:查看历史提交情况
        --pretty=oneline:查看历史版本并只显示版本号与说明
        --abbrev-commit:缩略版本号
        --graph:显示时间线
        -l:最新一次的提交
git reset --hard HEAD^(^^/~100):回退至上一个版本/两个版本前/一百个版本前
git reset HEAD <file>:撤销某文件缓存区修改
git reset HEAD^ <file>:将某文件恢复至上一版本,并将该修改提交至缓存区
git reflog: 查看历史命令-版本操作记录-版本号
git checkout(restore) -- <file>:将工作区某文件恢复至上一次add或commit的状态
rm <file>:移除某文件
git rm:确认删除修改
git rm --cached <file>:缓存区中放弃对文件的追踪,工作区仍保留该文件
       --f <file>:强行删除文件并同步至缓存区
git push origin master:将本地"master"分支推送至"origin"仓库
                <tagName>:将某个标签推送
                --tags:一次性推送tag
                :refs/tags/<tagName>:删除远程某个tag,需先在本地删除
git push -u origin master:推送并关联两个仓库
git pull origin main:将origin仓库main分支拉取至本地
                     --allow-unrelated-histories:拉取或推送的同时允许合并两个不关联分支
ssh-keygen -t rsa -C "youremail@example.com":创建ssh密钥
ssh-keygen.exe:创建ssh密钥
git remote -v:查看远程库信息
git remote rm <name>:根据命名解除远程库的绑定
git checkout dev/git switch dev/<commit>:切换到"dev"分支,或某次提交,不指向分支的指针为分离的指针
git checkout -b dev/git switch -c dev:创建并切换到"dev"分支
git branch:查看当前分支
git branch dev:创建新分支"dev"
git branch <name> <commit>:给(分离出的)某次提交创建临时分支
git branch -d dev:删除"dev"分支
           -D:强行删除分支
git merge dev:合并"dev"分支到当前分支(同时选择多个分支会出错)
          --no-ff:禁用"fastforward",保留合并时间线   
git mv <OldName> <NewName>:重命名文件并记录修改
git stash:暂存工作区
git stash list:查看暂存列表
git stash apply (stash@{0}):保留(指定版本的)暂存并恢复
git stash drop:删除暂存(默认为"stash@{0}"版本)
git stash pop:恢复暂存并删除
git cherry-pick <commit>:复现指定提交
git checkout -b dev origin/dev:创建远程仓库已有的"dev"分支(将两者链接)
git branch --set-upstream-to=origin/main main:链接远程库的"main"分支与本地库的"main"分支用于"pull"
git branch --set-upstream-to origin/main main:同上
git branch --set-upstream-to origin master:将当前仓库的master分支与origin默认分支进行推送连接
git branch --set-upstream-to=origin/main:将当前分支与远程库的"main"分支链接
           --set-upstream target src: 目标仓库-源仓库
git rebase:把本地未push的分叉提交历史整理成直线
git tag <name> <commit>:(给某次提交)打标签,默认为本分支最新提交
        -a <name> -m <msg> <commit>:给某次提交打上标签与说明
        -d <tagName>:删除
git tag:查看标签(字母排序)
git show <tagname>:查看标签信息

说明

  • Git分为三个区:工作区,暂存区(缓存区),当前分支(HEAD指针指向的位置)。目录中出现更改,但未add的内容是工作区特有的,被add的内容会被放入暂存区,commit的内容存放在分支中。

  • Windows自带的记事本编辑UTF-8编码的文件会在开头加上0xefbbbf的字符
    git缓存区中对同一文件的修改,在未提交前新的覆盖旧的
    git支持多种语言,但ssh协议最快;https协议每次使用都需要口令
    "git log"后按q退出

  • fast-forward 一般出现在拉取远程或推送本地,两个仓库需要合并的时候。它指远程仓库中的文件记录树与本地的文件记录树完全没有共同的父节点。因而需要参数 --allow-unrelated-histories 强制合并 merge 两棵树。

  • --soft 表示保留工作区;--hard 表示根据回滚操作相应改变工作区(会丢失信息)

  • 参考:git撤销远程仓库的提交git删除远程仓库分支
    和项目的队友试着用git共享代码仓库就遇到这个问题,为了测试push随意更新了分支并上传了,然后发现出问题了,队友的git树没有这个新分支,因此要先pull下来新的仓库,重新commit后再提交(好像不是什么大问题)。
    那能不能直接push基于旧版本的git树呢?

报错

"no tracking information"

分析:本地分支和远程分支的链接关系没有创建,用如下命令创建链接关系:

git branch --set-upstream-to <remoteBranchPath> <branchName>

"OpenSSL SSL_read: Connection was reset, errno 10054"

分析:SSL证书认证出现问题,可试着解除SSL认证:

git config --global http.sslVerify "false"

"fatal: refusing to merge unrelated histories"

分析:本地与远程的分支合并出现了问题,可在命令后加上"--allow-unrelated-histories"合并分支,例如:

git pull origin main --allow-unrelated-histories

"fatal: remote origin already exists."

分析:本地仓库已关联一个"origin"仓库,需要先用git remote rm origin解绑,再重新关联

"Updates were rejected because the tip of your current branch is behind its remote counterpart."

分析:提交出现冲突,先将远程分支拉取至本地合并,解决冲突后再次推送即可

posted @ 2022-03-01 01:27  Festu  阅读(42)  评论(2编辑  收藏  举报