[github全教程]github版本控制最全教学------- 大厂找工作面试必备!

简介: [github全教程]github版本控制最全教学------- 大厂找工作面试必备!



⭐️专业名词

🌟 常用命令

clone 下载项目

add 跟踪你的改变

commit 存到git上面

push 把本地git上传到远端-例如github, getlab, bitbucket

pull 把远端改变同步到本地

🌟 实践

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]? y
 ~/Code/gitlea  on main +4 !4 ?6 ---------------------------------- at 17:13:04 
> 
 ~/Code/gitlea  on main +4 !4 ?6 ---------------------------------- at 17:13:04 
> git clone git@github.com:KrisQK/demo-repo.git
正克隆到 'demo-repo'...
Enter passphrase for key '/Users/liqikun/.ssh/id_rsa': 
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (6/6), 完成.
 ~/Code/gitlea  on main +4 !4 ?7 ------------------------ took 36s  at 17:14:27 
> cd demo-repo 
 ~/Code/gitlea/demo-repo  on main --------------------------------- at 17:14:53 
> ls -la
total 8
drwxr-xr-x@  4 liqikun  staff  128 12  1 17:14 .
drwxr-xr-x   3 liqikun  staff   96 12  1 17:13 ..
drwxr-xr-x@ 12 liqikun  staff  384 12  1 17:14 .git
-rw-r--r--@  1 liqikun  staff   31 12  1 17:14 README.md
 ~/Code/gitlea/demo-repo  on main --------------------------------- at 17:16:11 
> git status
位于分支 main
您的分支与上游分支 'origin/main' 一致。
无文件要提交,干净的工作区
 ~/Code/gitlea/demo-repo  on main --------------------------------- at 17:17:14 
> git status
位于分支 main
您的分支与上游分支 'origin/main' 一致。
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
        修改:     README.md
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
 ~/Code/gitlea/demo-repo  on main !1 ------------------------------ at 17:18:05 
> git status
位于分支 main
您的分支与上游分支 'origin/main' 一致。
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
        修改:     README.md
未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
        index.html
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
 ~/Code/gitlea/demo-repo  on main !1 ?1 --------------------------- at 17:23:11 
> git add .         
 ~/Code/gitlea/demo-repo  on main +2 ------------------------------ at 17:24:09 
> git status
位于分支 main
您的分支与上游分支 'origin/main' 一致。
要提交的变更:
  (使用 "git restore --staged <文件>..." 以取消暂存)
        修改:     README.md
        新文件:   index.html
 ~/Code/gitlea/demo-repo  on main +2 ------------------------------ at 17:24:13 
>

⭐️ssh- 证明你的身份github拥有者

ssh-keygen -t rsa -b 4096 -C "q---@--.com"

🌟 这个origin什么意思

origin 是 Git 中默认使用的远程仓库的默认名称。它实际上是远程仓库的一个别名,用于简化对远程仓库的引用和操作

当你克隆一个远程仓库时(例如通过 git clone 命令),Git 会自动为这个远程仓库添加一个默认的别名叫做 origin。这样,你就可以使用 origin 作为对远程仓库的引用,而不必每次都输入完整的远程仓库 URL。

例如,当你执行 git push origin main 时,origin 代表着远程仓库的地址(如 github.com:KrisQK/demo-repo.git),让 Git 知道你想要将本地的 main 分支推送到 origin 所指向的远程仓库。

你也可以根据需要为其他远程仓库设置不同的别名,但通常情况下,origin 是默认使用的远程仓库别名,它指向最初克隆的远程仓库。

☀️git push -u origin master

这个命令通常用于将本地的 master 分支推送到名为 origin 的远程仓库。-u 参数将本地的 master 分支与远程的 origin/master 分支关联起来,并设置本地 master 分支在以后的推送中默认使用 origin master 作为默认远程分支

然而,在你之前提供的错误信息中,似乎出现了一个与 SSH 密钥相关的问题,导致 Git 无法进行远程推送。这个错误可能与权限问题有关,可能是因为 Git 无法找到或使用正确的 SSH 密钥来访问远程仓库。

在处理 SSH 密钥问题之前,推送到远程仓库可能会失败。确保你的 SSH 密钥正确设置并且可以被 Git 使用,然后再次尝试推送到远程仓库。

☀️一般流程

🌟 分枝控制

☀️main branch和 feature branch

⭐️总结

~/Code/gitlea ----------------------------------- at 21:15:37 
> git remote add origin git@github.com:KrisQK/demo-repo2.git
 ~/Code/gitlea ----------------------------------- at 21:33:18 
> git remote -v
origin  git@github.com:KrisQK/demo-repo2.git (fetch)
origin  git@github.com:KrisQK/demo-repo2.git (push)
 ~/Code/gitlea ----------------------------------- at 21:33:30 
> cd demo-repo2     
 ~/Code/gitlea/demo-repo2  on master ------------- at 21:34:00 
> git remote -v
 ~/Code/gitlea/demo-repo2  on master ------------- at 21:34:06 
> git remote add origin git@github.com:KrisQK/demo-repo2.git
 ~/Code/gitlea/demo-repo2  on master ------------- at 21:34:12 
> git remote -v                                             
origin  git@github.com:KrisQK/demo-repo2.git (fetch)
origin  git@github.com:KrisQK/demo-repo2.git (push)
 ~/Code/gitlea/demo-repo2  on master ------------- at 21:34:15 
> git push origin master
no such identity: /Users/liqikun/.ssh/id_ed25519: No such file or directory
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
 ~/Code/gitlea/demo-repo2  on master ---- took 3s  at 21:34:41 
> git push -u origin master
no such identity: /Users/liqikun/.ssh/id_ed25519: No such file or directory
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
 ~/Code/gitlea/demo-repo2  on master ---- took 3s  at 21:35:51 
> ssh-add ~/.ssh/qikunlikey
Identity added: /Users/liqikun/.ssh/qikunlikey (qikunli8866@gmail.com)
 ~/Code/gitlea/demo-repo2  on master ------------- at 21:47:33 
> ssh-add -l
4096 SHA256:dSBFeXTx5B0kYbqEpyddMfSrpMCDBhUHGMWkqfklKZE qikunli8866@gmail.com (RSA)
 ~/Code/gitlea/demo-repo2  on master ------------- at 21:48:10 
> git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 233 bytes | 233.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:KrisQK/demo-repo2.git
 * [new branch]      master -> master
branch 'master' set up to track 'origin/master'.
 ~/Code/gitlea/demo-repo2  on master ---- took 5s  at 21:51:26 
> cd ..
 ~/Code/gitlea ----------------------------------- at 00:00:42 
> cd demo-repo
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:00:54 
> ls
README.md  index.html
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:00:56 
> git branch
 ~/Code/gitlea/demo-repo  on main ------- took 7s  at 00:01:28 
> git checkout -b feature-readme-instructions
Switched to a new branch 'feature-readme-instructions'
 ~/C/g/demo-repo  on feature-readme-instructions - at 00:02:43 
> git branch
 ~/C/g/demo-repo  on feature-readme-instructions 
> git checkout main                        
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:03:34 
> git checkout feature-readme-instructions 
Switched to branch 'feature-readme-instructions'
 ~/C/g/demo-repo  on feature-readme-instructions - at 00:03:54 
>                                          
 ~/C/g/demo-repo  on feature-readme-instructions - at 00:04:31 
> git status
On branch feature-readme-instructions
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md
no changes added to commit (use "git add" and/or "git commit -a")
 ~/C/g/demo-repo  on feature-readme-instructions !1 
> git add .
 ~/C/g/demo-repo  on feature-readme-instructions +1 
> git commit -m "updated readme"
[feature-readme-instructions e1737de] updated readme
 1 file changed, 4 insertions(+)
 ~/C/g/demo-repo  on feature-readme-instructions - at 00:07:20 
> git checkout master
error: pathspec 'master' did not match any file(s) known to git
 ~/C/g/demo-repo  on feature-readme-instructions - at 00:07:50 
> git checkout main  
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:07:56 
> git diff feature-readme-instructions 
 ~/Code/gitlea/demo-repo  on main ------ took 22s  at 00:09:19 
> git checkout feature-readme-instructions 
Switched to branch 'feature-readme-instructions'
 ~/C/g/demo-repo  on feature-readme-instructions - at 00:10:14 
> git status
On branch feature-readme-instructions
nothing to commit, working tree clean
 ~/C/g/demo-repo  on feature-readme-instructions - at 00:10:20 
> git push
fatal: The current branch feature-readme-instructions has no upstream branch.
To push the current branch and set the remote as upstream, use
    git push --set-upstream origin feature-readme-instructions
To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.
 ~/C/g/demo-repo  on feature-readme-instructions - at 00:10:33 
> git push -u origin feature-readme-instructions 
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 10 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 388 bytes | 388.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: Create a pull request for 'feature-readme-instructions' on GitHub by visiting:
remote:      https://github.com/KrisQK/demo-repo/pull/new/feature-readme-instructions
remote: 
To github.com:KrisQK/demo-repo.git
 * [new branch]      feature-readme-instructions -> feature-readme-instructions
branch 'feature-readme-instructions' set up to track 'origin/feature-readme-instructions'.
 ~/C/g/demo-repo  on feature-readme-instructions 
> git checkout main                             
Switched to branch 'main'
Your branch is behind 'origin/main' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
 ~/Code/gitlea/demo-repo  on main <2 ------------- at 00:37:23 
> git pull          
Updating 756290f..cb523b2
Fast-forward
 README.md | 4 ++++
 1 file changed, 4 insertions(+)
 ~/Code/gitlea/demo-repo  on main ------- took 6s  at 00:37:52 
> git branch
 ~/Code/gitlea/demo-repo  on main ------ took 15s  at 00:38:41 
> git branch -d feature-readme-instructions 
Deleted branch feature-readme-instructions (was e1737de).
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:38:48 
> git branch
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:38:56 
> 
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:38:57 
> git checkout -b quik-test
Switched to a new branch 'quik-test'
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 00:40:11 
> git status
On branch quik-test
nothing to commit, working tree clean
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 00:41:07 
> git status
On branch quik-test
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   index.html
no changes added to commit (use "git add" and/or "git commit -a")
 ~/Code/gitlea/demo-repo  on quik-test !1 -------- at 00:41:15 
> git diff
 ~/C/gitlea/demo-repo  on quik-test !1 - took 23s  at 00:41:52 
> git commit -am "added world"
[quik-test f02e2b1] added world
 1 file changed, 2 insertions(+), 1 deletion(-)
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 00:43:16 
> git diff                    
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 00:50:44 
> git checkout master
error: pathspec 'master' did not match any file(s) known to git
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 00:52:56 
> git checkout main  
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:53:00 
> git brach
git: 'brach' is not a git command. See 'git --help'.
The most similar command is
        branch
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:53:36 
> git branch
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:53:47 
> git checkout quick-test
error: pathspec 'quick-test' did not match any file(s) known to git
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:54:07 
> git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
 ~/Code/gitlea/demo-repo  on main ---------------- at 00:55:20 
> git commit -am "added there"
[main da2bbad] added there
 1 file changed, 2 insertions(+), 1 deletion(-)
 ~/Code/gitlea/demo-repo  on main >1 ------------- at 00:55:56 
> git checkout quik-test 
Switched to branch 'quik-test'
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 00:56:03 
> git diff main 
 ~/Code/gitlea/demo-repo  on quik-test - took 11s  at 00:56:24 
> git merge main 
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
 ~/Code/gitlea/demo-repo  on quik-test merge ~1 -- at 00:56:30 
> git status
On branch quik-test
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)
Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   index.html
no changes added to commit (use "git add" and/or "git commit -a")
 ~/Code/gitlea/demo-repo  on quik-test merge ~1 -- at 01:00:50 
> git diff
 ~/C/g/demo-repo  on quik-test merge ~1 - took 6s  at 01:01:29 
> git commit -am "updated with main"
[quik-test bc3229d] updated with main
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 01:01:55 
> 
 ~/Code/gitlea/demo-repo  on quik-test !1 -------- at 01:02:52 
> git status
On branch quik-test
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md
no changes added to commit (use "git add" and/or "git commit -a")
 ~/Code/gitlea/demo-repo  on quik-test !1 -------- at 01:03:07 
> git add README.md 
 ~/Code/gitlea/demo-repo  on quik-test +1 -------- at 01:03:14 
> git status
On branch quik-test
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   README.md
 ~/Code/gitlea/demo-repo  on quik-test +1 -------- at 01:03:21 
> git reset
Unstaged changes after reset:
M       README.md
 ~/Code/gitlea/demo-repo  on quik-test !1 -------- at 01:04:33 
> git status
On branch quik-test
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md
no changes added to commit (use "git add" and/or "git commit -a")
 ~/Code/gitlea/demo-repo  on quik-test !1 -------- at 01:04:50 
> git add README.md 
 ~/Code/gitlea/demo-repo  on quik-test +1 -------- at 01:06:18 
> git commit -m "added install step"   
[quik-test 9d98358] added install step
 1 file changed, 2 insertions(+), 1 deletion(-)
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 01:06:53 
> git status
On branch quik-test
nothing to commit, working tree clean
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 01:06:59 
> git reset
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 01:07:09 
> 
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 01:07:55 
> git status
On branch quik-test
nothing to commit, working tree clean
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 01:08:00 
> git commit -m "added install step"
On branch quik-test
nothing to commit, working tree clean
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 01:08:24 
> git reset HEAD~1
Unstaged changes after reset:
M       README.md
 ~/Code/gitlea/demo-repo  on quik-test !1 -------- at 01:08:41 
> git status
On branch quik-test
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md
no changes added to commit (use "git add" and/or "git commit -a")
 ~/Code/gitlea/demo-repo  on quik-test !1 -------- at 01:08:56 
> git diff
 ~/Code/gitlea/demo-repo  on quik-test !1 -------- at 01:09:02 
> git log
 ~/C/g/demo-repo  on quik-test !1 --- took 1m 17s  at 01:10:39 
> git reset f02e2b173e2b4975f13e8495f1d5e569d438dcd0
Unstaged changes after reset:
M       README.md
M       index.html
 ~/Code/gitlea/demo-repo  on quik-test !2 -------- at 01:11:04 
> git log
 ~/C/gitlea/demo-repo  on quik-test !2 - took 39s  at 01:12:06 
> git reset --hard cb523b2177a7c45c672e088912df6f8e6bd95b65
HEAD is now at cb523b2 Merge pull request #1 from KrisQK/feature-readme-instructions
 ~/Code/gitlea/demo-repo  on quik-test ----------- at 01:12:35 
>

🌟

相关文章
|
24天前
|
开发工具 git 开发者
掌握版本控制的艺术:Git 与 GitHub 的高效使用指南
在软件开发中,版本控制对于代码管理和团队协作至关重要。本文详细介绍了 Git 的核心概念与命令,包括初始化、创建仓库、文件跟踪、分支管理和远程仓库操作。同时,探讨了如何利用 GitHub 进行项目组织、代码审查及自动化工作流。通过遵循最佳实践,如频繁提交、清晰的信息记录和合理使用分支,开发者可以提升工作效率和团队协作能力,确保项目的持续成功。
|
2月前
|
存储 Linux Go
如何在Github上Pull Request的教程
关于如何在GitHub上发起Pull Request(合并请求)的详细教程,包括Fork(分支)、Clone(克隆)、创建新分支、修改代码、提交更改、推送到远程仓库等步骤,并提供了解决权限问题的方法,如创建个人访问令牌(Personal Access Token)。
34 6
|
2月前
|
数据采集 数据可视化 Ruby
GitHub星标破万!Python学习教程(超详细),真的太强了!
Python 是一门初学者友好的编程语言,想要完全掌握它,你不必花上太多的时间和精力。 Python 的设计哲学之一就是简单易学,体现在两个方面: 1. 语法简洁明了:相对 Ruby 和 Perl,它的语法特性不多不少,大多数都很简单直接,不玩儿玄学。 2. 切入点很多:Python 可以让你可以做很多事情,科学计算和数据分析、爬虫、Web 网站、游戏、命令行实用工具等等等等,总有一个是你感兴趣并且愿意投入时间的。
|
2月前
|
图形学
Unity精华☀️点乘、叉乘终极教程:用《小小梦魇》讲解这个面试题~
Unity精华☀️点乘、叉乘终极教程:用《小小梦魇》讲解这个面试题~
怎样在GitHub上建立仓库、以及怎样实现分支代码的合并。保姆级别的教程
这篇文章是一份详细的GitHub使用教程,介绍了如何在GitHub上创建仓库、创建分支、编辑和发布更改内容、发起拉取请求以及合并分支的操作步骤。
怎样在GitHub上建立仓库、以及怎样实现分支代码的合并。保姆级别的教程
|
2月前
|
SQL 运维 安全
GitHub爆赞的Web安全防护指南,网络安全零基础入门必备教程!
web安全现在占据了企业信息安全的很大一部分比重,每个企业都有对外发布的很多业务系统,如何保障web业务安全也是一项信息安全的重要内容。 然而Web 安全是一个实践性很强的领域,需要通过大量的练习来建立对漏洞的直观认识,并积累解决问题的经验。 Web安全与防护技术是当前安全界关注的热点,今天给小伙伴们分享的这份手册尝试针对各类漏洞的攻防技术进行体系化整理,从漏洞的原理到整体攻防技术演进过程进行详细讲解,从而形成对漏洞和web安全的体系化的认识。
|
2月前
|
SQL 运维 安全
GitHub爆赞的Web安全防护指南,网络安全零基础入门必备教程!
web安全现在占据了企业信息安全的很大一部分比重,每个企业都有对外发布的很多业务系统,如何保障web业务安全也是一项信息安全的重要内容。 然而Web 安全是一个实践性很强的领域,需要通过大量的练习来建立对漏洞的直观认识,并积累解决问题的经验。 Web安全与防护技术是当前安全界关注的热点,今天给小伙伴们分享的这份手册尝试针对各类漏洞的攻防技术进行体系化整理,从漏洞的原理到整体攻防技术演进过程进行详细讲解,从而形成对漏洞和web安全的体系化的认识。
|
3月前
|
网络协议 Unix Linux
网安人必须人手一份的《Linux私房教程》,GitHub星标286K!
Linux是一套免费使用和自由传播的操作系统内核,是一个基于POSIX和Unix的多用户、多任务支持多线程和多CPU的操作系统内核。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统内核。 作为网络安全的初学者,Linux基础知识和常用命令是我们的必备技能,我们不能只会操作Windows相关的工具。一方面很多网站都是基于Linux环境搭建,比如LAMP,其安全性更好;另一方面,很多命令或工具都集成在了Linux相关环境中,比如Kali等。 今天给小伙伴们分享一份Linux私房教程,这份
|
4月前
|
算法 数据可视化 数据挖掘
大学生必备!GitHub星标破千的matlab教程(从新手到骨灰级玩家)
MATLAB(Matrix Laboratory)是MathWorks公司推出的用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的商业数学软件。 MATLAB具有数值分析、数值和符号计算、工程与科学绘图、数字图像处理、财务与金融工程等功能,为众多科学领域提供了全面的解决方案。
|
4月前
|
算法 数据可视化 数据挖掘
大学生必备!GitHub星标破千的matlab教程(从新手到骨灰级玩家)
MATLAB(Matrix Laboratory)是MathWorks公司推出的用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的商业数学软件。 MATLAB具有数值分析、数值和符号计算、工程与科学绘图、数字图像处理、财务与金融工程等功能,为众多科学领域提供了全面的解决方案。
下一篇
无影云桌面