1. Git 实操
1.1 前置设置
-
设置用户名
git config --global user.name hanosong- 如果设置的用户名有空格,则需要引号包裹
"hanosong iKun"
- 如果设置的用户名有空格,则需要引号包裹
-
设置邮箱
git config --global user.email hanosong@163.com -
对于需要操作的文件夹,需要对其进行初始化
git init -
将修改的文件添加到缓存区
git add . -
将缓存区的文件提交到本地版本库
git commit -m "[message]"- add 和 commit一起写,可以直接从工作区跳到本地版本库
git commit -a -m "[message]"或者直接-am
- add 和 commit一起写,可以直接从工作区跳到本地版本库
-
创建分支
git branch branchName- 查看分支信息
git branch - 删除某条分支
git branch -d branchName, 删除分支前可能会提示需要合并,如果很明确要删除,则可用-D
- 在该分支上修改该分支的名字
git branch -m anOtherName
- 查看分支信息
-
切换到创建的分支
git checkout branchName或者git switch branchName -
创建新分支并马上切换到新分支
git checkout -b branchName或者git switch -c branchName -
把别的分支合并到当前所处的分支
git merge branchName
1.2. git 相关状态查看
- 查看git全局设置
git config --global --list
- 查看文件信息
git status
- 查看版本信息
git log
1.3. gitignore
touch .gitignore
在里面添加想要忽略的文件信息
1.4. 查看本地仓库和远程仓库的区别
git diff 远程仓库名/分支名
git diff origin/master
2. 远程仓库
2.1. 查看本地仓库和哪些远程仓库有联系
git remote -v
- origin :表示远程仓库的名字,默认都是origin,这样push的时候,就可以用origin代替URL了
2.2. 将本地仓库推送到GitHub上已经建好的仓库
- 添加远程仓库地址
git remote add, 这里给远程仓库别名为boss
如果需要再次修改远程地址,可以使用
set-urlgit remote set-url boss git@github.com:hanosong/git_test.git
- 检查fetch和push时的地址
git remote -v
- 在github上创建的项目,默认分支为main分支,而本地默认为master分支
解决方法 => 把当前的分支名改为main
git branch -m main, 如果修改不了,可以使用-M
- 如果想要以后本地创建的分支默认为main,则可以使用
git config --global init.defaultBranch main
- 远程和本地两边的文件不一样, 怎么办
解决:1. 把远程的东西同步到本地
git pull <远程主机名> <远程分支名>:<本地分支名>
- 远程的提交历史记录和本地的不一样,怎么办
直接pull,会报错:fatal: refusing to merge unrelated histories
解决:使用git-rebase,将远程的提交变为最老的记录,本地的记录变为最新的
- 提交到远程
直接push会失败,因为还没有指定远程仓库别名以及同步的分支名。
=> 报错:fatal: The current branch main has no upstream branch.
运行
git push --set-upstream boss main命令会将你当前分支的内容推送到远程仓库boss的main分支,并且将本地分支与远程分支进行关联,使得以后的git push和git pull命令可以直接使用git push和git pull而不需要指定远程仓库和分支。
git push --set-upstream boss main
3. issues
用于指出bug的存在,请求新功能或者报告安全漏洞问题
4. 遇到的一些问题
4.1. 拉取远程分支的更新时,发现没有跟踪该分支
// 报错信息
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> main
分析:
- git pull 命令需要指定要合并的远程分支和本地分支的名称
- => 远程仓库的名称
- => 远程分支的名称
- origin => 远程仓库的名字为origin
- main => origin的main分支
解决:
git branch --set-upstream=origin/main main
// origin/main 远程远程仓库的main分支
// main 本地main分支
4.2. 查看远程仓库信息
git remote show origin
* remote origin
Fetch URL: git@github.com:hanosong/VuexAndReduxLearning.git
Push URL: git@github.com:hanosong/VuexAndReduxLearning.git
HEAD branch: main
Remote branch:
main tracked
Local branch configured for 'git pull':
main merges with remote main
Local ref configured for 'git push':
main pushes to main (up to date)
该仓库的名称为 "origin"(远程仓库通常称为 "origin");
获取 URL 和推送 URL 都指向 "git@github.com:hanosong/VuexAndReduxLearning.git";
当前 HEAD 分支为 "main";
远程仓库上的 "main" 分支被本地仓库跟踪(即 main 是本地 origin/main 的一个镜像);
本地分支 "main" 配置为与远程分支 "main" 合并(即执行 git pull 时将自动合并远程分支);
本地分支 "main" 配置为将更改推送到远程分支 "main"。
4.3. 查看最几一次提交了哪些文件
git log --name-only --oneline -1
--name-only选项告诉Git只显示文件名,而不是文件内容的变化。--oneline选项将每个提交压缩成一行,易于阅读。-1选项表示只显示最近的一次提交。
4.4. git 如何合并分支
--no--ff: 在执行合并操作时创建一个新的合并提交,该提交将包含两个分支的历史信息,并明确标识出了合并操作。这样可以更好地保留分支的历史记录,对于团队协作和代码审查来说更有意义
快进(fast-forward)合并策略:会丢失分支历史信息,并且不能明确标识出分支之间的合并操作
git merge --no-ff origin/feater-name
在执行了--no-ff之后,又想放弃这次执行,回滚到上一次执行,怎么办?
- 提交 - 撤销上次提交
- 提示:上次提交是一次合并提交,点击确定
- 取消暂存上次所有commit的内容
在合并过程中有冲突,或者合并后已经提交上去了,但是想放弃这次合并
git merge --abort
总结
相关git操作和踩坑问题持续更新中... 😀