Git常用操作
连接GitHub:
ssh-keygen -t rsa #生成公钥密钥
cd ~/.ssh/ #进入~/.ssh/ 目录
cat ~/.ssh/ #查看 ~/.ssh/ 目录
ll -a #列出目录下的所有文件,如果使用cmd就用dir
cat id_rsa.pub #查看id_rsa.pub,如果使用cmd就用code id_rsa.pub,即使用vscode打开cat id_rsa.pub
#复制~/.ssh/id_rsa.pub中的公钥串到GitHub ssh设置中
cd C:\ #进入你喜欢的目录
mkdir Projects #新建Projects文件夹
cd Projects #进入Projects文件夹
本地完全没有项目代码的情况:
cd Projects #进入Projects文件夹
git clone git@github.com:my_name/my_app.git #从远程仓库下载项目代码到本地
cd my_app #进入项目根目录
本地有项目代码,需要把项目代码更新到最新的情况:
cd Projects #进入Projects文件夹
cd my_app #进入项目根目录
git fetch origin master #下载远程仓库的origin主机的master分支到本地仓库的FETCH_HEAD分支
git log -p master FETCH_HEAD #比较本地仓库的master分支和本地仓库的FETCH_HEAD分支的区别,按回车打印下文,按q退出
git checkout master #本地仓库切换到master分支
git merge FETCH_HEAD #把本地仓库的FETCH_HEAD分支合并到本地仓库的当前分支,也就是master分支
git status #查看状态
或
cd Projects #进入Projects文件夹
cd my_app #进入项目根目录
git pull origin master #下载远程仓库的origin主机的master分支到本地仓库的FETCH_HEAD分支,把本地仓库的FETCH_HEAD分支合并到本地仓库的master分支
git status #查看状态
远程仓库和本地仓库都没有dev分支,想创建dev分支进行开发的情况:
cd Projects #进入Projects文件夹
cd my_app #进入项目根目录
git branch dev #创建dev分支,此时不会自动切换到该分支
git checkout dev #切换到dev分支
远程仓库和本地仓库都有dev分支,想把dev分支更新到最新的情况:
cd Projects #进入Projects文件夹
cd my_app #进入项目根目录
git fetch origin master:dev #下载远程仓库的origin主机的master分支到本地仓库的dev分支,并自动合并
git status #查看状态
git checkout dev #本地仓库切换到dev分支
或
cd Projects #进入Projects文件夹
cd my_app #进入项目根目录
git pull origin master:dev #下载远程仓库的origin主机的master分支到本地仓库的dev分支,并自动合并
git status #查看状态
git checkout dev #本地仓库切换到dev分支
在一台电脑上开发了一半,推送到了远程仓库的dev分支,要在另一台电脑的dev分支继续进行开发,需要把远程仓库的dev分支拉取到本地的情况:
cd Projects #进入Projects文件夹
cd my_app #进入项目根目录
git fetch origin dev:dev #下载远程仓库的origin主机的dev分支到本地仓库的dev分支,并自动合并
git status #查看状态
git checkout dev #本地仓库切换到dev分支
在本地仓库的dev分支进行开发并提交代码的情况:
cd Projects #进入Projects文件夹
cd my_app #进入项目根目录
git checkout dev #切换到dev分支
#进行开发
git add * 或 git add . #添加到待提交
git commit -am "add or modify" #提交
git push -u origin dev #推送到dev分支
git status #查看状态
在dev分支开发完成,需要把dev分支合并到master分支的情况:
cd Projects #进入Projects文件夹
cd my_app #进入项目根目录
git checkout master #切换到master分支
git pull origin master #参考上面“本地有项目代码,需要把项目代码更新到最新的情况”,使用pull或者fetch+merge的方式把master分支的项目代码更新到最新
git merge dev #把本地仓库的dev分支合并到本地仓库的当前分支,也就是master分支
git push -u origin master #推送到master分支
git status #查看状态
有一个本地项目,需要上传到GitHub的情况:
git remote add origin git@github.com:my_name/my_app.git git push -u origin master
或
#先在GitHub创建对应的仓库
cd Projects #进入Projects文件夹
cd my_app #进入项目根目录
git init
git remote add origin git@github.com:my_name/my_app.git
git pull
#在项目根目录配置.gitignore文件
git add * 或 git add .
git commit -am "add or modify"
git push -u origin master
git status #查看状态
配置.gitignore文件:
Git提交代码时使用.gitignore过滤node_modules文件夹
Git分支其他操作:
git remote update origin --prune #更新远程分支列表
git branch -a #查看本地分支和远程建立跟踪的分支
git branch -D a_branch #删除本地a_branch分支
git push origin --delete a_branch #删除远程a_branch分支,可以简写为git push origin :a_branch
git cherry-pick <commit ID> #将其他分支的该次提交应用于当前分支
git revert <commit ID> #生成一次提交,该提交将抵消掉某次提交
git show <commit ID> #查看某次提交的祖先
git reset --hard "HEAD^" #将当前分支回退到上一次提交
git reset --hard HEAD@{1} #撤销当前分支刚才的git reset --hard "HEAD^"操作
git reset --hard origin/master #将本地仓库重置为和远程的origin/master一样
git reset [--mixed] <commit ID> #将本地仓库回退到某次commit,之后的新增和修改变为未add状态
git reset --soft <commit ID> #将本地仓库回退到某次commit,之后的新增和修改变为未commit状态
git reset --hard <commit ID> #将本地仓库回退到某次commit,之后的新增和修改丢失
git reflog #查看提交记录
git log --stat #查看每次提交的简略统计信息
git log dev...master #比较两个分支的差异
git checkout --theirs ./ #当前目录下所有冲突全部使用传入
git checkout --ours ./ #当前目录下所有冲突全部使用当前
git push origin master -f #强制推送到远程分支
git push origin HEAD:refs/for/master #将当前分支push到远程master分支,push之前需要经过Code Review
git remote -v #查看远程仓库所有主机的地址
git remote rm origin #删除本地仓库连接
git remote add origin git@github.com:my_name/my_app.git #将本地仓库与远程仓库建立连接
git filter-branch -- --all #解决shallow update not allowed
Git撤销某次处理过冲突的merge:
git reset --hard origin/(branchname)
git revert <commit ID> -m 1
git checkout --ours ./
git add .
git commit -m [message] -n
git push
Git缓存相关操作:
git stash save "xxx-20221122-2054" #将没有提交的内容缓存并移除,该条缓存被命名为"xxx-20221122-2054"
git stash list #查看缓存列表
git stash apply 0 #将缓存列表中索引为0的缓存恢复到当前分支上
git stash pop 0 #将缓存列表中索引为0的缓存恢复到当前分支上,然后删除该条缓存
git stash drop 0 #将缓存列表中索引为0的缓存删除
git stash clear #将缓存列表中的所有缓存删除
git stash show 0 -p #查看当前分支在恢复缓存列表中索引为0的缓存时,恢复前后的差异
Git设置用户名和邮箱:
git config --global user.name "my_name" #设置全局用户名
git config --global user.email "my@email.com" #设置全局邮箱
git config user.name "my_name" #设置当前项目用户名
git config user.email "my@email.com"#设置当前项目邮箱
git config user.name #查看当前项目用户名
git config user.email #查看当前项目邮箱
git commit --amend --reset-author #重设上一次提交的作者
解决this operation must be run in a work tree:
1.使用vscode打开项目根目录.git文件夹下的config文件
2.去掉url = git@gitee.com:my_name/my_project后面的.git,即把url = git@gitee.com:my_name/my_project.git改为url = git@gitee.com:my_name/my_project
3.保存config文件,问题解决
解决git push卡住:
备份修改的文件,删除文件夹,git clone git@balabla.com:/balabal.git --depth=1,然后替换修改文件,git push
Git取消全局代理:
git config --global --unset http.proxy
git commit使用默认提交信息:
git commit #进入vim
按I #进入编辑,这里不用
按Esc #退出
按住Shift,按两次Z #保存退出
按住Shift,按ZQ #不保存退出,这里不用
:q #不保存退出,这里不用
:q! #保存退出并强制写入,会修改时间戳,这里不用
:x #保存退出,当文件未被修改时,不会更改时间戳,这里不用
git commit跳过语法检查:
git commit -m 'some information' --no-verify #直接输入提交信息并跳过语法检查
git commit --no-verify #进入vim输入提交信息并跳过语法检查
Git其他操作: