You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
git101 git:(main) ✗ git commit -m "whatever"
[main cc0ff5d] whatever
Committer: nonocast <[email protected]>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:
git config --global user.name "Your Name"
git config --global user.email [email protected]
After doing this, you may fix the identity used for this commit with:
git commit --amend --reset-author
1 file changed, 1 insertion(+)
version: git 2.37.0
三剑客
git
git 怎么配置?
通过
git config
命令实现,配置分为local, global, system 3个级别, 通过--list查看对应的配置:/opt/homebrew/etc
git config --list
或git config -l
查看当前配置为什么要配置user.name和user.email?
一般安装后都需要配置global user, 如下:
主要是因为git commit时需要填写name/email标识提交人,如果没有配置,git会根据当前系统的username和hostname自动生成,这显然不是我们希望的:
git 本地仓库怎么提交?
git本地仓库分为3个区域:
.git
)一般情况下,通过
git add
将工作区内容加入到暂存区,然后通过git commit
将暂存区提交仓库区。如何放弃暂存区的所有修改?
比如git add修改文件,或者做了mv操作等等,只要我没有commit,那么就可以直接通过
git reset --hard
撤回到原先状态。怎么查看git log?
可以通过
git help log
和git help --web log
查看进一步的帮助。怎么创建切换branch?
git branch branch-name
git checkout branch-name
git checkout -b new-branch-name
git branch
什么tig?
tig - text-mode interface for Git
如何修改过往commit的meessage?
16 | 怎么修改老旧commit的message?
git rebase -i commitid
, 这里填写目标commit的parent commitid怎样把连续的多个commit整理为1个commit?
17 | 怎样把连续的多个commit整理成1个?
git rebase -i c1
怎样把间隔的多个commit整理为1个commit?
18 | 怎样把间隔的几个commit整理成1个?
git rebase -i c2
怎么比较暂存区和HEAD的差异?
git diff --cached
怎么比较工作区和暂存区的差异?
git diff
git diff -- readme.md index.html
如何让暂存区恢复成和HEAD的一样?
git reset HEAD
git reset --hard HEAD
如何让工作区的文件恢复为和暂存区一样?
git checkout -- readme
reset and checkout
git reset
git checkout
取消最近的几次提交?
比如有c1,c2,c3, 现在HEAD指向c3,然后通过
git reset --hard c1
,此时工作区恢复为c1, 暂存区清空, HEAD指向c1。git支持哪些同步协议?
Git - The Protocols
git clone /srv/git/project.git
或git clone --bare /srv/git/project/.git
git clone ssh://[user@]server/project.git
git clone git://server/project.git
注:
git是如何考虑多个仓库的同步的?
一个git仓库可以通过
git remote
管理和外部仓库的连接, 如下:此时目录下有hello, foo, bar三个仓库,各自有一个md,然后通过git remote 建立连接:
通过
git fetch
就可以将远端的内容复制到本地仓库:底层的逻辑依然是非常清晰的,就是每个仓库管好自己的branch, commit,然后如果添加remote,则将远端的仓库全部拉到本地形成副本,副本以remote name作为prefix,即foo/main, bar/main,互不干扰。
在这个逻辑之上,我们来考虑如何关联hello/main和foo/main两个分支的关联。
git fetch foo
, Download objects and refs from another repository, 即包括tree, commit, branch, tag, blob等等git fetch foo main
, 只取和main有关的objects和refs,对应的分支命名为:foo/main
命令格式:
git fetch <远程主机名> <分支名>
, 以git fetch origin main
为例,即获取origin远端仓库的main分支下所有相关内容基于
git branch <new_branch> [from_branch]
, 可以git branch foo foo/main
, 或者git checkout -b foo foo/main
当然你可以直接将fetch回来的foo/main和本地仓库的main合并(merge),即直接得到了别人的代码,
git merge foo/main
, 实践中需要git merge foo/main --allow-unrelated-histories
git pull <远程主机名> <远程分支名>:<本地分支名>
, 本质上就是pull然后merge此时就应该在本地仓库main分支下
git pull foo main
借助
git branch --set-upstream main origin/main
建立追踪关系后,就可以省略为git pull foo
又因为当前分支只有一个upstream时可以省略remote,所以就简化成最终的
git pull
,其实本意是git pull foo main
,再展开就是git fetch, 然后git merge参考教程
The text was updated successfully, but these errors were encountered: