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使用.gitignore过滤文件的过滤规则

 

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其他操作:

Git基本操作

Git打Tag相关操作

 

posted @ 2021-03-07 10:29  starlog  阅读(105)  评论(0编辑  收藏  举报