git笔记

88 阅读5分钟

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
  • 创建分支 git branch branchName

    • 查看分支信息 git branch
    • 删除某条分支 git branch -d branchName, 删除分支前可能会提示需要合并,如果很明确要删除,则可用 -D

    image-20240617112042484

    • 在该分支上修改该分支的名字 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

image-20240617103547661

  • 查看文件信息 git status

image-20240617104630469

  • 查看版本信息 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上已经建好的仓库

  1. 添加远程仓库地址 git remote add, 这里给远程仓库别名为boss

image-20240617115608776

如果需要再次修改远程地址,可以使用 set-url

git remote set-url boss git@github.com:hanosong/git_test.git
  1. 检查fetch和push时的地址 git remote -v

image-20240617115715026

  1. 在github上创建的项目,默认分支为main分支,而本地默认为master分支

解决方法 => 把当前的分支名改为main git branch -m main , 如果修改不了,可以使用-M

  • 如果想要以后本地创建的分支默认为main,则可以使用 git config --global init.defaultBranch main
  1. 远程和本地两边的文件不一样, 怎么办

解决:1. 把远程的东西同步到本地 git pull <远程主机名> <远程分支名>:<本地分支名>

  1. 远程的提交历史记录和本地的不一样,怎么办

直接pull,会报错fatal: refusing to merge unrelated histories

image-20240617121727000

解决:使用git-rebase,将远程的提交变为最老的记录,本地的记录变为最新的

image-20240617121848971

  1. 提交到远程

直接push会失败,因为还没有指定远程仓库别名以及同步的分支名。

=> 报错:fatal: The current branch main has no upstream branch.

运行git push --set-upstream boss main命令会将你当前分支的内容推送到远程仓库bossmain分支,并且将本地分支与远程分支进行关联,使得以后的git pushgit pull命令可以直接使用git pushgit pull而不需要指定远程仓库和分支。

 git push --set-upstream boss main

image-20240617135818790

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之后,又想放弃这次执行,回滚到上一次执行,怎么办?

  1. 提交 - 撤销上次提交
  2. 提示:上次提交是一次合并提交,点击确定
  3. 取消暂存上次所有commit的内容

在合并过程中有冲突,或者合并后已经提交上去了,但是想放弃这次合并

git merge --abort

总结

相关git操作和踩坑问题持续更新中... 😀