github使用手册

核心代码

配置用户名/邮箱

best practice

git init #在本地初始化一个仓库
git add . #将当前目录所有的文件加入(注意这里是加入)到缓存区
git commit -m "xxx" #将当前缓存区里的内容提交到本地仓库
git remote add <remote_rep_name> <remote-rep-url> #为本地rep添加以remote rep,其被命名为<remote-rep-name>
git push -u/--set-upstream <remote-rep-name> <local-rep-name/branch> #为remote/local创建连接,并将local rep中的内容上传到remote rep

撤销commit

回退到特定状态

git reset #将之前使用git add暂存的文件从暂存区中移除,但保留在工作目录中的修改(本地项目的内容不会被覆盖)
git reset HEAD^ #这会将 HEAD 指针移动到前一次提交,并将之前的提交内容放回暂存区。但工作目录中的文件修改并不会被撤销,需要使用 git checkout 或者 git restore 恢复到之前的状态。
git reset <commit_hash> #将 HEAD 移动到指定的提交,并且会将该提交之后的修改放回暂存区。但工作目录中的文件修改不会被撤销,需要使用 git checkout 或者 git restore 恢复到之前的状态。
git reset --hard #这会撤销到最后一次提交,并将工作目录中未提交的修改全部删除。

比较

git diff #查看工作目录和暂存区之间的差异
git diff --cached #查看暂存区和最后一次提交之间的差异
git diff HEAD #查看工作目录、暂存区和最后一次提交之间的差异
git diff <commit1> <commit2> #替换 <commit1> 和 <commit2> 分别为两个不同的提交哈希值、分支名或者标签名。这会显示两个提交之间的差异。
git diff <branch1>..<branch2> #这会显示两个分支之间的所有差异。这里有两个小点。

分支合并

checkout

git checkout branch_name #切换到特定branch
git checkout -- file_path 
#如果在工作目录中对某个文件做了修改,但还没有提交(文件不在本地仓库,而是在缓存区),执行这个命令可以撤销对该文件的修改,将其还原为最后一次提交的状态(从本地仓库恢复)。
git checkout <commit_hash> 
#命令用于将工作目录和暂存区的状态切换到指定提交(commit).这个操作将使得你处于“分离头指针”(detached HEAD)的状态,即不再位于任何分支上,而是直接在某个具体的提交上。注意:在“分离头指针”状态下,任何在这个状态下的新提交都不会属于任何分支,如果切换到其他分支,这些提交可能被遗弃,因此要谨慎使
用。
git checkout -b new_branch_name <commit_hash>
这会创建一个新分支 new_branch_name,并将它切换到指定提交。

 注意事项:

  • 在合并前最好确保你的分支是最新的,以避免冲突
  • 解决冲突时,仔细检查并确认更改,确保合并后的代码是正确的。
  • 在合并前,可以使用 git diff 查看要合并的更改,以确保将正确的更改合并到目标分支

2.23版本以上的git, 提出用git switch和git restore来替代checkout的某些功能

操作过程

git checkout master #切换到目标分支
git pull origin master #确保目标分支是最新的,想想为什么会这样
git merge <feature-branch> #在目标分支上执行合并操作.如果 Git 发现在目标分支和要合并的分支上都对相同文件进行了修改,就会发生合并冲突。在这种情况下,你需要手动解决冲突。编辑冲突文件,然后执行.
git add .  #重新添加、提交代码
git commit 
git push origin master #推送

工作原理

具体流程如下图所示[1]:

核心概念

push

git push <remote> <branch>

  • <remote> 是远程仓库的名称,通常是 origin,但也可以是其他已经配置的远程仓库的名称。
  • <branch> 是要推送的本地分支的名称。
  • 如果远程仓库是在第一次推送时创建的,你可能需要添加 -u--set-upstream。 -u 命令的作用是将本地分支与远程分支关联,并将本地分支的变化推送到远程仓库。这通常用于在第一次推送分支时,建立本地分支与远程分支之间的追踪关系。

origin

origin 是默认的远程仓库的名称。origin 的作用是作为默认的远程仓库,方便你推送(push)和拉取(pull)代码。例如,当你执行 git push origin master 时,表示将本地的 master 分支推送到名为 origin 的远程仓库。同样,git pull origin master 表示从 origin 远程仓库的 master 分支拉取最新的代码。

HEAD

HEAD 在 Git 中是一个特殊的指针,用于表示当前所在的本地仓库的最新提交。HEAD 指针通常指向当前所在的分支的最新提交,表示你正在工作的分支的最新状态。

以下是 HEAD 的一些常见用途和行为:

  1. 指向当前分支的最新提交: 当你在一个分支上进行提交时,HEAD 会随着当前分支的移动而更新,始终指向该分支的最新提交。

  2. 分离 HEAD: 如果你切换到一个特定的提交,而不是分支(例如,git checkout <commit_hash>),HEAD 将进入 "分离头指针" 的状态,这时 HEAD 直接指向具体的提交而不是分支。

  3. 切换分支: 当你使用 git checkoutgit switch 切换分支时,HEAD 会跟着切换到新的分支上,并指向该分支的最新提交。

  4. 合并分支: 在合并分支时,HEAD 通常会指向被合并的分支的最新提交。合并完成后,HEAD 会指向新生成的合并提交。

  5. 指向提交的哈希值:HEAD 处于分离头指针状态时,它直接指向一个具体的提交,而不是一个分支。在这种情况下,你可以通过 git log 查看提交的哈希值,然后使用 git checkoutgit switch 切换回分支。

  6. 表示工作区和暂存区的状态: HEAD 不仅指向最新提交,还包含了工作区和暂存区的状态。在某些操作中,如 git resetHEAD 可能会移动到之前的提交,同时更新工作区和暂存区。

总体而言,HEAD 在 Git 中是一个非常重要的指针,用于跟踪当前工作目录的状态。理解 HEAD 的位置和作用对于有效地使用 Git 是很重要的。

Reference

[1] 看完这篇还不会用Git,那我就哭了! - 知乎 (zhihu.com)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值