git命令小结
概论
Git的发展历史可以追溯到2005年,由Linux内核开发者Linus Torvalds创建。以下是Git的发展历程和其作用的简介:
-
诞生和发展: Git是作为解决Linux内核开发中遇到的问题而诞生的。由于Linux内核是一个大型开源项目,需要协调成千上万个开发者的工作。传统的集中式版本控制系统在处理大规模分布式开发时遇到了性能和可扩展性的问题。Git以分布式的方式管理代码,具有高效、灵活和强大的特性,因此逐渐受到了广泛的关注和采用。
-
分布式版本控制: Git是一种分布式版本控制系统,与传统的集中式版本控制系统不同。在Git中,每个开发者都可以拥有完整的代码存储库的副本,包括完整的历史记录。这使得开发者可以在本地进行快速的代码提交、分支操作和版本回退等操作,而无需依赖网络连接。每个开发者可以在本地独立工作,然后将更改推送到其他开发者的仓库中。
-
分支和合并: Git的一个重要特性是分支管理。通过创建分支,开发者可以在独立的代码环境中进行实验、添加新功能或修复错误,而不会影响主代码线。开发者可以轻松地创建、切换、合并和删除分支,使得团队协作更加灵活高效。
-
版本控制和历史记录: Git跟踪文件和项目的变化,并记录每次提交的详细信息,包括作者、时间戳和提交消息等。这使得开发者可以轻松地查看项目的完整历史记录,了解每个提交的内容和目的。Git还提供了强大的比较工具,可以查看不同版本之间的差异,并进行代码审查和问题排查。
-
协作和远程仓库: Git支持远程仓库的创建和管理,开发者可以将本地仓库与远程仓库进行同步。这使得多个开发者可以共享代码、协同工作和解决冲突。通过推送(push)和拉取(pull)操作,开发者可以将本地的更改上传到远程仓库或获取远程仓库的最新更新。
Git的发展和普及使得它成为当今最流行的版本控制系统之一,广泛应用于各种软件开发项目和团队协作中。它的分布式特性、强大的分支管理和版本控制能力,以及开放的生态系统,使得开发者能够更高效、可靠地管理和协作开发项目。
一些代码托管平台
- AC git
AC git 是一个与算法竞赛相关的代码托管平台。它提供了一个方便的环境,供竞赛选手分享、管理和讨论他们的代码。竞赛选手可以在 AC git 上创建自己的代码仓库,并与其他选手分享解决方案和经验。AC git 还提供了在线编译和评测功能,可以帮助竞赛选手测试他们的代码在不同输入情况下的表现(真的非常好用)
http://git.acwing.com/ - Github
GitHub 是一个广泛使用的代码托管平台,提供了版本控制、代码协作和项目管理的功能。它是基于 Git 的,并且提供了易于使用的界面和工具,方便开发者进行代码的共享、协作和追踪。GitHub 上托管的项目可以被其他开发者浏览、克隆和贡献,也可以用于团队协作和开源项目的管理(可能会有一点慢)
https://github.com/ - Gitcode
Gitcode 是一个面向开发者的代码托管平台,类似于 GitHub。开发者可以使用 Gitcode 创建和管理代码仓库,进行版本控制,并与其他开发者进行协作。Gitcode 提供了一系列的工具和功能,如代码审查、问题跟踪和持续集成,帮助开发者更好地组织和管理他们的项目。与其他平台相比,Gitcode 的特色之一是强调对代码质量和工程实践的关注,鼓励开发者共同提高代码的可维护性和可靠性(没用过,用过的可以评论说一下)
https://gitcode.net/ - …
git基本概念
-
** 工作区(Working Directory)**: 工作区是指项目所在的目录,在该目录中进行代码编辑和修改。工作区包含了项目的所有文件和文件夹,但并不包括 Git 的版本控制信息。工作区是开发者直接进行操作和修改的区域。
-
暂存区(Staging Area): 暂存区是位于 Git 仓库中的一个区域,用于暂时存放即将提交的文件变化。在进行代码提交之前,开发者可以选择将工作区的修改添加到暂存区。通过将文件添加到暂存区,开发者可以对将要提交的内容进行选择和精细控制。
-
版本库(Repository): 版本库是 Git 仓库中存放所有已经提交的代码版本的地方。它包含了项目的完整历史记录,包括所有的提交、分支和标签信息。版本库存储在项目目录的 .git 文件夹中,它是 Git 进行版本控制的核心。
-
版本结构(Version Tree): 版本结构是指 Git 中所有提交的代码版本形成的树状结构。每个提交(commit)都可以看作是版本树中的一个节点,它记录了该提交的父节点(上一个提交)和子节点(后续的提交)。通过版本结构,开发者可以清楚地看到每个提交的历史关系,以及分支和合并操作的变化。
-
版本控制系统(Version Control System,VCS): Git 是一种版本控制系统,它记录和管理文件在不同时间点的变化。通过使用 Git,开发者可以追踪文件的修改、恢复旧版本、协同工作和合并不同的改动。
-
仓库(Repository): Git 仓库是用于存储项目代码和历史记录的地方。它可以位于本地计算机或远程服务器上。每个仓库都包含完整的项目历史和所有文件的快照。
-
提交(Commit): 提交是指将文件的变化保存到 Git 仓库中的操作。每次提交都包含一个唯一的标识符(commit ID)和提交者的信息。提交记录了文件的修改、添加或删除,并可以附带一条描述性的消息。
-
分支(Branch): 分支是指在 Git 中创建的独立开发线,用于实现不同的功能或修复 bug。通过创建分支,开发者可以在不影响主线开发的情况下进行实验和修改。分支可以合并回主线或与其他分支进行合并。
-
合并(Merge): 合并是指将一个分支的修改合并到另一个分支中。当开发者完成某个功能或修复一个 bug 时,可以将其所在分支的修改合并到主线或其他目标分支上,以确保代码的一致性。
-
远程仓库(Remote Repository): 远程仓库是位于网络上的 Git 仓库,用于多人协同开发和备份代码。开发者可以将本地仓库的改动推送到远程仓库,或从远程仓库获取最新的更新。
-
拉取(Pull)和推送(Push): 拉取是指从远程仓库获取最新的修改并合并到本地仓库中,以保持代码的同步。推送是指将本地仓库的修改推送到远程仓库,使其他开发者可以获取最新的代码。
git常用命令
全局设置
git config --global user.name xxx
:设置全局用户名,信息记录在~/.gitconfig文件中git config --global user.email xxx@xxx.com
:设置全局邮箱地址,信息记录在~/.gitconfig文件中git init
:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中
常用命令git add XX
:将XX文件添加到暂存区
2.git commit -m "给自己看的备注信息"
:将暂存区的内容提交到当前分支git status
:查看仓库状态git log
:查看当前分支的所有版本git push -u (第一次需要-u以后不需要)
:将当前分支推送到远程仓库git clone git@git.acwing.com:xxx/XXX.git
:将远程仓库XXX下载到当前目录下git branch
:查看所有分支和当前所处分支
查看命令git diff XX
:查看XX文件相对于暂存区修改了哪些内容git status
:查看仓库状态git log
:查看当前分支的所有版本git log --pretty=oneline
:用一行来显示git reflog
:查看HEAD指针的移动历史(包括被回滚的版本)git branch
:查看所有分支和当前所处分支git pull
:将远程仓库的当前分支与本地仓库的当前分支合并
删除命令git rm --cached XX
:将文件从仓库索引目录中删掉,不希望管理这个文件git restore --staged xx
:将xx从暂存区里移除git checkout — XX或git restore XX
:将XX文件尚未加入暂存区的修改全部撤销
代码回滚git reset --hard HEAD^ 或git reset --hard HEAD~
:将代码库回滚到上一个版本git reset --hard HEAD^^
:往上回滚两次,以此类推git reset --hard HEAD~100
:往上回滚100个版本git reset --hard 版本号
:回滚到某一特定版本
远程仓库git remote add origin git@git.acwing.com:xxx/XXX.git
:将本地仓库关联到远程仓库git push -u (第一次需要-u以后不需要)
:将当前分支推送到远程仓库git push origin branch_name
:将本地的某个分支推送到远程仓库
4.git clone git@git.acwing.com:xxx/XXX.git
:将远程仓库XXX下载到当前目录下git push --set-upstream origin branch_name
:设置本地的branch_name分支对应远程仓库的branch_name分支
6.git push -d origin branch_name
:删除远程仓库的branch_name分支git checkout -t origin/branch_name
将远程的branch_name分支拉取到本地git pull
:将远程仓库的当前分支与本地仓库的当前分支合并git pull origin branch_name
:将远程仓库的branch_name分支与本地仓库的当前分支合并git branch --set-upstream-to=origin/branch_name1branch_name2
:将远程的branch_name1分支与本地的branch_name2分支对应
分支命令git branch branch_name
:创建新分支git branch
:查看所有分支和当前所处分支git checkout -b branch_name
:创建并切换到branch_name这个分支git checkout branch_name
:切换到branch_name这个分支git merge branch_name
:将分支branch_name合并到当前分支上git branch -d branch_name
:删除本地仓库的branch_name分支git push --set-upstream origin branch_name
:设置本地的branch_name分支对应远程仓库的branch_name分支git push -d origin branch_name
:删除远程仓库的branch_name分支git checkout -t origin/branch_name
:将远程的branch_name分支拉取到本地git pull
:将远程仓库的当前分支与本地仓库的当前分支合并git pull origin branch_name
:将远程仓库的branch_name分支与本地仓库的当前分支合并git branch --set-upstream-to=origin/branch_name1branch_name2
:将远程的branch_name1分支与本地的branch_name2分支对应
stash暂存git stash
:将工作区和暂存区中尚未提交的修改存入栈中git stash apply
:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素git stash drop
:删除栈顶存储的修改git stash pop
:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素git stash list
:查看栈中所有元素