一、将本地项目/分支上传到git远程仓库
// 1、本地项目创建好后,初始化git
git init
// 2、将本地仓库和远程仓库关联(如果没有远程仓库就创建一个)
git remote add origin 远程仓库地址 // (在远程仓clone地址)(远程库的名字就是origin,这是Git默认的叫法,也可以改成别的。)
// 3、将本地代码上传到远程
git push -u origin 远程仓库名 //(-u参数,Git不但会把本地的分支内容推送的远程新的分支,还会把本地的分支和远程的分支关联起来)
二、查看配置的远程仓库
git remote -v
三、删除本地指定的远程地址
git remote remove origin
有时我们在将本地仓库关联远程仓库时会报错,可以使用上面两步查看已关联的远程仓库,移除关联关系后,重新关联。
四、查看分支:
// 查看所有分支
git branch -a
// 查看本地分支最后一次的提交信息
git branch -v
// 查看本地分支关联的远程分支并会列出最后一次的提交信息和id
git branch -vv
五、创建新分支:
git branch 新分支 // 创建新分支
git checkout -b 新分支 // 创建并切换到新分支
git switch -c 新分支 // 创建并切换到新分支
六、切换到某个分支:
git checkout 分支名
或
git switch 分支名
七、合并分支:
// 先切换到要合并的分支
git checkout 要合并的分支
// 执行合并
git merge 被合并的分支
例如:将b分支合并到a分支,而我当前在b分支
git checkout a
git merge b
git push 推送到远程
合并时有时会报错:
fatal: refusing to merge unrelated histories(拒绝合并不相关的历史)
出现这个问题的最主要原因在于本地仓库和远程仓库实际上是独立的两个仓库。
解决方法:
git pull origin 远程分支名 --allow-unrelated-histories // 将远程仓库的文件拉取到本地仓库 // 比如上面b合并到a报错,可以这样操作:(在a分支中执行) git pull origin b --allow-unrelated-histories // 然后执行提交操作(有冲突要先解决冲突) git add . git commit -m 'xxx' git push <远程主机名> <本地分支名>:<远程分支名> 或 git push // 例如 git push origin main:main
假如我之前是直接clone的方式在本地建立起远程github仓库的克隆,本地仓库就不会有这问题了。
git push是git push origin main:main的一种简写形式
(1)当只关联一个远程,只有一个分支时,这两个命令没什么区别。
(2)当你关联了两个多个仓库、有多个分支时,git push可能会报错,因为它不知道要上传代码到哪里去;而git push origin main:main指定仓库和分支,就不会报错。
八、修改分支名:
// 1、还没有推送到远程
git branch -m oldName newName
// 2、已经推送到远程
(1)git branch -m oldName newName // 修改本地分支名
(2)git push origin newName // 上传新命名的本地分支到远程仓库(会创建新的远程分支)
(3)git push -u origin newName // 将本地分支和远程仓库关联起来
(4)git push origin -d oldName // 删除远程旧的分支
九、删除分支:
// 删除本地分支
git branch -d 分支名
// 删除远程分支
git push origin -d 远程分支名
如果不确定分支名,删除前可以先查看所有分支,`git branch -a`会列出所有分支:
以`remotes`开头的就是远程分支,其它为本地分支,*号代表当前所在的分支
比如删除远程分支master:git push origin -d master
十、删除或修改某条commit记录
1、git reflog // 得到最近的提交记录,能获取commitId
2、git rebase -i commitID // 比如 git rebase -i 9efb5ce
- 执行完这个命令后,就可以看到
9efb5ce
的 commit 记录。如下图- 默认是使用 vim 编辑器打开了commit log list。然后我们就可以针对我们不需要的某些 log 进行删除。
- 把原本的
pick
单词修改为drop
就表示该ID对应的 commit log 我们需要删除。(pick改为edit或e,修改提交信息)- vim保存退出。
3、合并冲突并提交
git add . # 冲突时使用
git commit -m "new commit" # 冲突时使用
git rebase --continue # 冲突时使用
git push origin 远程分支名 -f // -f 强制推送
然后现在去查看远程分支的此commit就没了。
十一、撤销commit
// 撤销最近一次的提交
git reset --soft HEAD^
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
--mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft
不删除工作空间改动代码,撤销commit,不撤销git add .
--hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
十二、修改最后一条commit信息
git commit --amend -m '新的提交信息' (针对最后一条提交)
或 git commit --amend 此时会进入默认vim编辑器,修改注释完毕后保存就好了。
修改其它提交信息见第十条
另外场景:你本来打算Commit五个文件,但是由于疏忽你Commit了四个。当然你可以再Commit一次来进行弥补这个失误。但是多了一次Commit,按道理它们应该在一次Commit中。
git commit --amend也能帮你解决这个问题:
git add 忘记提交的文件
git commit --amend --no-edit (针对最后一条提交,并且此提交没有merge)