【Git】Github 够用指南

这篇文章介绍了 Git 和 Github 的够用操作。

Git 和 Github 分别是什么

  • Git 是一个运行在你电脑上的版本控制软件,而 Github 是基于 Git 这个版本控制软件打造的网站
  • Git 的三个概念
    • 仓库 repository:项目的源文件夹是一个本地仓库,也可以将项目提交到云仓库 Github、码云等
    • 分支 branch:多人同时在开发同一个项目,可以开辟不同的分支,各写各的,最后完成合并
    • 提交 commit:可以把一个人乃至多个人代码的变更以提交的形式做一个存储,当代码写崩的时候可以找回历史记录

安装(Git)

1
$ git --version

看别人的项目(Github)

git clone, Star, README.md, issue, LICENSE

  • 下载项目
    • git clone 下载下来的是一个仓库
    • 而直接官网 download 下的是一个文件夹,少了 .git 隐藏文件
1
$ git clone address

找好的开源项目(Github)

查找资源的技巧(Github)

  • 找百科大全: awesome xxx
  • 找例子: xxx sample
  • 找空项目架子-模板: xxx starter / xxx boilerplate
  • 找教程: xxx tutorial

够用的 Git 命令

  • 普通文件夹变为 git 仓库
    • 之前是有个信息确认的。
      • git config --global user.name "PzLu"
      • git config --global user.email "my_email@outlook.com"
  • ssh-keygen 命令-公钥
1
$ git init
  • 第一次提交(本地)
1
2
$ git add -A # 添加所有文件到暂存区
$ git commit -m "提交信息" # 把暂存区的文件提交到仓库

  • 查看提交的历史记录(本地)
1
$ git log --stat # q退出
  • 维护项目的日常(本地)
1
2
$ git checkout filename #工作区回滚,此时未提交
$ git reset HEAD^1 #撤销最后一次提交
  • 分支(本地)
    • 以当前分支为基础新建分支git checkout -b branchname
    • 列举所有的分支:git branch
    • 单纯地切换到某个分支:git checkout branchname
    • 删掉特定的分支:git branch -D branchname
    • 回到主分支后,合并其他分支:git merge branchname
  • Git 和 GitHub 远程仓库(远程)
    • 推送当前分支最新的提交到远程:git push
      • 本地写好代码,变成仓库,并有一些提交
      • 在 Github 上开一个新的仓库
      • 按照 Github 上面的要求,在本地终端推送
        • (第一次)关联一个远程库:git remote add origin git@server-name:path/repo-name.gitorigin是默认习惯命名(注意是git@
        • (第一次)改名字(master->main):git branch -M main
        • (第一次)推送master分支的所有内容:git push -u origin main
        • (接着)每次提交,直接:git push origin main,不用加 -u
    • 拉取远程分支最新的提交到本地:git pull

fork-github项目-clone-push

需求:

  • 想将一个牛逼的项目复制到自己的 github 仓库
  • 想将仓库中的代码拉取到本地进行修改
  • 想将修改后的代码推送到自己的 github 仓库
  • 想将复制过来并修改后的代码再还给原作者,请求人家让你合并。

复制到自己的 github 仓库里

  • fork 即可

将仓库中的代码拉取到本地进行修改

  • 终端命令,如
1
$ git clone git@github.com:PzLu/doccano.git

想将修改后的代码推送到自己的 github 仓库

  • 接下来就可以对这个项目进行修改了.
  • 但是不建议在 master 分支上直接修改,最好是在 master 分支基础上切出一个 v1 分支
    • 然后在 v1 分支上修改,修改完成后,再将 v1 分支 merge 到 master 分支。

切出 v1 分支

1
$ git checkout -b v1

进行修改

  • 可以在 v1 分支上测试下,随便加个文件,利用 vscode 的 commit 和提交
    • 如 for_git_test

merge 一下,并提交到自己的仓库

  • 转到 master 并 merge
1
2
$ git checkout master
$ git merge v1

  • 在自己的电脑上修改好代码后,再使用git push 命令将改动同步到自己的Github仓库中
1
$ git push

想将复制过来并修改后的代码再还给原作者,请求人家合并

  • 点击自己的仓库中的 pull request 下的 New pull request,之后 github 会自动对比
  • 原仓库分支与自己仓库分支代码,看看是否有冲突。
  • 如果它显示 Able to merge 的话,就可以点击 Create pull request 按钮,进行提交。
  • 点击之后,会跳到注释的部分,可以跟原作者说明改动了什么,以及改的原因等。
  • 最后点击绿色的 Create pull request 即可。
  • 然后原作者就会收到pull request了。你也完成了对项目的贡献。

如何编写.gitignore上传时忽略部分文件

  • 首先在你的项目路径下,新建txt并命名为.gitignore(文件全名包括后缀)

  • 但是通常配置完后不会生效,因为.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
1
2
3
git rm -r --cached .
git add . # 可以用 vscode 直接操作
git commit -m '×××××' # 可以用 vscode 直接操作

一些可能出现的问题

git push 时本地仓库不能推送到远程仓库

  • 问题原因:本地仓库和远程仓库的内容不一致,导致不能推送时
1
2
3
4
5
6
7
8
9
10
11
# 方法一:使用 git pull --rebase 命令
## 将远程仓库的master分支拉取到本地,然后合并到本地的master分支上
$ git pull --rebase origin master
## 此时再将本地仓库push到远端仓库中即可:
$ git push -u origin master

# 方法二:允许合并
## 将远端仓库的master分支拉取、合并到本地的master分支
$ git pull origin master --allow-unrelated-histories
## 然后再将本地仓库git push到远端
$ git push -u origin master

参考