一、开始工作区
- clone: 克隆一个仓库到新的目录。
git clone https://github.com/username/repository.git
- init: 创建一个新的空 Git 仓库或重新初始化现有的仓库,新建git项目。
//创建项目两种方式//一、本地项目自己创建项目,先创建好工作文件夹,通过init指定,生成隐藏.git文件即为管理成功//二、多人协作,本地clone下来git init myprojectcd myproject
二、当前工作上的变更(增删改)
- add: (增)将文件内容添加到索引(准备提交)。
git add file.txt//添加文件从工作区到暂存区,类似svn选中文件,多了一步git status//查看文件管理状态git commit//从暂存区提交到本地仓库,输入提交备注:wq保存,类似svn点击ok提交git commit -a//合并添加并提交两步
- mv: (改)移动或重命名文件、目录或符号链接。
git mv file.txt newfile.txt //改名git commit //提交改名
- restore: 恢复工作树中的文件。
git restore file.txt
- rm: (删)从工作树和索引中删除文件。
git rm file.txt//删除文件git commit//提交删除
三、查看历史和状态
- bisect: 使用二分查找来定位引入错误的提交。
git bisect startgit bisect badgit bisect good v1.0# 测试代码,直到找到引入错误的提交git bisect reset
- diff: 显示提交之间的差异,提交与工作树之间的差异等。
git diffgit diff --cachedgit diff HEAD~1 HEAD
- grep: 打印匹配模式的行。
git grep "search_term"
- log: 显示提交日志。
git log//查看提交记录git log --oneline//每条记录一行显示git log --author="John Doe"//查看提交记录为john的git log -help //查看日志常用帮助git log -n//查看几条 git log -state //统计具体改进git log --grep='test'查看提交记录中含有test的
- show: 显示各种类型的对象。
git show HEADgit show 1234abcd
- status: 显示工作树的状态。
git status
四、发展、标记和调整公共历史
- backfill: 在部分克隆中下载缺失的对象。
git backfill
- branch: 列出、创建或删除分支。
git branch//列出所有分支git branch new-feature//创建一个新的分支new-featuregit checkout new-feature//切换到新的分支git checkout -b new-feature//合并上面两步的操作git branch -d old-feature//删除指定分支
- commit: 记录对仓库的更改。
git commit file1.name file2.name file3.name .. –m "commit messages"//commit指提交修改到本地的仓库里,file*.name指的是带commit的文件 //–m后面的内容指提交的信息,即备注。git commit –a –m "commit messeages"//添加的-a参数会把当前暂存区里所有的修改(包括删除操作)都提交git commit//可能有时候手抖忘记输入-m参数,直接输入了git commit,于是出现了下面这个界面,即打开了一个vim编辑//界面,敲入i键后保存,输入要添加的message后,输入“ESC”按键退出编辑界面,然后再敲入“:wqa”后会保存//message内容,并且提交此次修改,如果敲入“:q”会取消这次提交。git commit --amend//把此次提交追加到上一次的commit内容里,并且会回显上次的commit的内容。git commit -m "Add new feature"//提交及备注git commit -am "Fix typo"//合并commit(回退commit到指定版本,重新提交一次)reset --soft commitid//修改历史提交记录git rebase -i 428726c//先输入rebase插入到指定提交版本修改pick为editgit commit --amend//修改后提交git rebase --continue//提交后再次执行
- merge: 合并两个或多个开发历史。
git merge feature-branch
- rebase: 在另一个基础之上重新应用提交。
git rebase main//变动根基到main
- reset: 将当前 HEAD 重置为指定状态。
git reset --hard HEAD~1git reset --soft HEAD~1git reset --mixed HEAD~1
- switch: 切换分支。
git switch maingit switch -c new-feature
- tag: 创建、列出、删除或验证一个由 GPG 签名的标签对象。
git tag v1.0git tag -lgit tag -d v1.0git tag -s v1.0 -m "Release version 1.0"
五、协作开发命令
- fetch: 从另一个仓库下载对象和引用。
git fetch //执行后更新了本地提交记录git status//再执行此句,可以看到领先落后情况git pull//落后拉取
- pull: 从另一个仓库或本地分支获取并合并。
git pull
- push: 更新远程引用及其关联的对象。
git commit -a//先增加到本地仓库git push //再推送到远端仓库
注意:协作开发先clone,clone输入远端仓库的账号和密码,拉去成功后,可以通过git config配置域
六、其他有用的命令
- help -a: 列出所有可用的子命令。
git help -a
- help -g: 列出一些概念指南。
git help -g
- git config:用于配置提交者邮箱和用户名
git config --global user.namegit config --get user.name
系统级配置 (--system): 影响所有电脑用户(admin和user)和所有仓库,适合系统管理员设置全局默认值。
全局级配置 (--global): 影响当前电脑用户(user1)的全部仓库,适合用户设置个人偏好。
仓库级配置 (--local 或默认): 仅影响当前仓库,适合项目团队成员设置项目特定的配置,在指定仓库指定名字提交
**七、
HEAD
的概念**
1.指向当前分支的最新提交:
HEAD
总是指向当前分支的最新提交。
例如,如果你在
main
分支上,
HEAD
就会指向
main
分支的最新提交。
2.动态变化:
每当你进行一次提交、切换分支、合并或变基等操作时,
HEAD
都会更新,指向新的最新提交。
**
3.HEAD
的常见用法**
**查看当前
HEAD
指向的提交**:
git show HEAD
回退到上一个提交:
git reset HEAD^ //回退一步,几个^就是回退几步
git reset --mixed HEAD^ //暂存区被重置,但工作目录中的文件内容保持不变,即撤销了add和commit
git reset --soft HEAD^//暂存区和工作目录不变,所有更改仍然在暂存区中,即撤销了commit。
git reset --hard HEAD^//重置暂存区和工作目录,永久删除未提交的更改,即撤销了add和commit和更改内容
git reset --hard HEAD~3//回退3个记录
HEAD^
表示HEAD
的前一个提交。HEAD~1
也表示HEAD
的前一个提交。
回退到前几个提交:
git reset HEAD~3
HEAD~n
表示HEAD
的前n
个提交。
切换到某个特定的提交:
git checkout 51363e6
- 使用
git checkout
命令可以切换到某个特定的提交。
创建一个新的分支并指向某个提交:
git checkout -b new-branch 51363e6
**
4.HEAD
的特殊用途**
解决冲突:
- 在合并或变基过程中,
HEAD
指向的是当前的工作分支,而MERGE_HEAD
或REBASE_HEAD
指向的是正在合并或变基的分支。
恢复文件:
git checkout HEAD -- path/to/file
- 使用
HEAD
可以恢复工作目录中某个文件的最新版本。
八、协调解决实践原则
- 发生冲突时,拉同事一起看,不要自己决定
- 需要CR,快速对比差异
- 分支名要有意义,不要反复用
- 分支不要搭便车,功能清晰且独立
- 上线就打tag
- 优先用merge而不是rebase,否则会丢掉提交时间信息
- commit message要有意义,事半功倍
- 不要每2行就提交一次导致commit过多
九、commit message原则
1.AngularJS Git Commit Message 规范
<type>(<scope>):<subject>
<BLANK LINE>
<body>
<BLANK LINE>
2.规范解释
字段描述示例type提交类型
feat
,
fix
,
docs
,
style
,
refactor
,
test
,
chore
scope变动范围
authentication
,
user-interface
,
database
subject简要描述本次变动
implemented new login flow using OAuth 2.0
body详细描述变更情况
Several improvements made to the authentication module:
``` - Updated API endpoints for better security practices. ```
``` - Implemented OAuth 2.0 for user authentication. ```
``` - Added error handling for invalid credentials. ```
``` - Improved documentation for developers. ``` footer可忽略 ``` Close #123 ```
3.例子
feat(authentication): implemented new login flow using OAuth 2.0
Several improvements made to the authentication module:
- Updated API endpoints for better security practices.
- Implemented OAuth 2.0 for user authentication.
- Added error handling for invalid credentials.
- Improved documentation for developers.
- Type:
feat
表示这是一个新功能的引入。 - Scope:
(authentication)
表示这是认证模块的更改。 - Subject:
implemented new login flow using OAuth 2.0
描述了本次提交的主要内容。 - Body: 列出了具体的改进措施,包括更新API端点以提高安全性、实施OAuth 2.0用户认证、增加无效凭据的错误处理以及改善开发者文档。
版权归原作者 代码敲上天. 所有, 如有侵权,请联系我们删除。