Git操作步骤
1 | 初始化->绑定远程仓库->拉取最新版本(merge)->提交到暂存区->push到远程仓库 |
初始化:git init
提前创建好和远程分支名同名的分支(需要在第③步之前完成该操作)
绑定远程仓库:git remote add 名称 地址
拉取最新版本(merge):git pull --rebase 名称 分支
注意:合并是将相同分支名的分支进行合并的
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull
默认是git fetch
和git merge
结合可以加上如下参数
--rebase
:
git pull --rebase <远程主机名,可以是别名> <远程分支名>:<本地分支名>
的结合方式是git fetch
和git rebase
结合解释:所以这条命令是先拉取远程最新代码到本地,再将拉取下来的分支的提交 变基到本地分支上(可以对应到下文的
git rebase 目标分支
的理解,本条--rebase
对应的命令只是将本地分支的提交换成从远程拉取下来的提交,然后都是变基到目标分支上)
提交到暂存区:git add .
git commit -m "备注"
push到远程仓库:git push -u 名称 分支
分支需要本地和远程的分支名一样(即远程有与本地同名的分支)
使用了
-u
选项,Git会将本地分支与指定的远程分支进行关联,在以后的推送或拉取操作中,只需运行git push
或git pull
,Git就会知道你要推送或拉取哪个分支
git log命令
git log
查看commit的历史,最近的更新排在上面
git log 分支名
查看指定分支名的提交历史记录
git log --graph
绘制一个ASCII图像来展示提交历史的分支结构(重点使用)
git tag命令
确保通过了
git add
和git commit
提交到了本地仓库使用
git log
在提交历史中找到响应的commit。复制该commit的哈希值使用
git tag
命令创建新的标签(轻量标签),并将其与指定的commit关联轻量标签:
git tag <tag_name> <commit_hash>
将
<tag_name>
替换为您要为 commit 创建的标签名称,<commit_hash>
替换为相应 commit 的哈希值。附注标签:
git tag -a <tag_name> <commit_hash> -m "<tag_message>"
将
<tag_name>
替换为标签名称,<commit_hash>
替换为相应 commit 的哈希值,<tag_message>
替换为标签的消息或说明。可以使用
git tag
命令检查已创建的标签列表git tag
将本地的标签推送至远程仓库
git push origin <tag_name>
或者下面命令,推送所有标签至远程仓库
git push origin --tags
git rebase 和git merge比较
git rebase 目标分支
:变基,从当前的分之和目标分支的最近公共祖先结点开始,将当前的分支新产生的结点依次与该公共结点合并,并在所有结点都合并完成之后,将当前分支指向最新的合并之后的结点;(最终效果:合成一条分支)
git merge 目标分支
:将当前分支最新结点与目标分支最新结点合并,并将当前结点指针指向合并之后的、新产生的结点
理解完上面两条命令后,重新看一下最上面的
git pull
命令的使用格式
注:在解决冲突的时候,用 merge 只需要解决一次冲突即可,简单粗暴,而用 rebase 的时候 ,需要一次又一次的解决冲突。
git pull
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull
默认是git fetch
和git merge
结合可以加上如下参数
--rebase
:git pull --rebase <远程主机名,可以是别名> <远程分支名>:<本地分支名>
的结合方式是git fetch
和git rebase
结合
- 尝试将远程仓库的修改合并到本地仓库,但是本地仓库的文件也被修改过了,则
git pull
会失败(显示为error: local changes to the following files would be overwritten by merge:
)解决方法:将本地的修改的文件
git commit
到本地仓库,再使用git pull
拉取(默认是git fetch
和git merge
结合) 。接着只需要打开修改的文件,手动将修改的地方进行修改。修改完,最好再将修改后的结果推送至远程仓库
- 在使用
git pull
成功后可能会发生冲突,发生冲突后,Git能够自动合并您的修改和远程仓库的修改,它会尝试合并并生成一个合并提交。在这种情况下,Git会跳转到让您编写合并提交的备注信息的界面。但是,如果自动合并失败(即有冲突,提示未conflict
),则不会自动跳转,而是报错,然后需要自己手动编辑文件,修改冲突,然后git add
,再git commit
,再git push
到远程仓库
git add 之后git reset HEAD
git reset HEAD <file>
:取消 Git 中已经添加add
但尚未提交commit
的内容
<file>
是要取消添加的文件名或路径
git reset HEAD .
:取消添加所有文件
git revert和git reset回退
git revert <commit>
<commit>
是您希望回退到的目标版本的提交哈希值或引用- 创建一个新的提交,用于撤销指定版本之后的所有更改。这意味着撤销操作本身会成为 Git 历史的一部分,可以追溯到撤销具体哪些更改。
git reset <commit>
<commit>
是您希望回退到的目标版本的提交哈希值或引用- 命令会修改 Git 历史,将当前分支的 HEAD 指针移动到目标版本。这意味着目标版本之后的所有提交将被丢弃,它们将不再存在于 Git 历史中。
- 潜在影响他人协作
更多命令见我OneNote笔记