“Git:基本操作”的版本间差异
跳到导航
跳到搜索
(→远程) |
(→命令辨析) |
||
(未显示同一用户的48个中间版本) | |||
第1行: | 第1行: | ||
[[category:Git]] | [[category:Git]] | ||
== 常用操作 == | |||
[[File:Git基本操作.jpg|center|800px]] | |||
== 仓库 == | == 仓库 == | ||
第30行: | 第33行: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! 命令 !! 说明 !! 备注 | ! style="width:10%"|命令 !! 说明 !! 备注 | ||
|- | |- | ||
| '''<code>git add</code>''' | | '''<code>git add</code>''' | ||
| 将工作区新增或修改的文件添加到暂存区 | | 将工作区新增或修改的文件添加到暂存区 | ||
| | | | ||
# | # <code>git add [file1] [file2]</code>:添加一个或多个文件到暂存区; | ||
# | # <code>git add [dir]</code>:添加指定目录到暂存区(包括子目录); | ||
# | # <code>git add .</code>:添加当前目录下的所有文件到暂存区; | ||
# <code>git add -f [file]</code>:强制添加存在于<code>.gitignore</code>的文件; | |||
|- | |- | ||
| '''<code>git commit</code>''' | | '''<code>git commit</code>''' | ||
| 提交暂存区到本地仓库 | | 提交暂存区到本地仓库 | ||
| | | | ||
# | # '''<code>git commit -m [message]</code>''':提交暂存区到本地仓库; | ||
# | # '''<code>git commit [file1] [file2] -m [message]</code>''':提交暂存区的指定文件; | ||
# | # '''<code>git commit ([file1] [file2]) -am [message]</code>''':直接提交(跳过<code>git add</code>); | ||
|- | |- | ||
| '''<code>git status</code>''' | | '''<code>git status</code>''' | ||
第78行: | 第82行: | ||
| 比较文件的不同,即暂存区和工作区的差异 | | 比较文件的不同,即暂存区和工作区的差异 | ||
| | | | ||
# | # '''<code>git diff ([file])</code>''':查看暂存区和工作区的改动; | ||
# | # '''<code>git diff --cached ([file])</code>''':(或<code>git diff --staged ([file])</code>)暂存区和上一个commit的差异; | ||
# | # '''<code>git diff HEAD ([file])</code>''':查看工作区与当前分支最新commit之间的差异; | ||
# | # '''<code>git diff [branchName] [file]</code>''':当前分支的文件与[branchName]分支的文件进行比较; | ||
# | # '''<code>git diff [commitId] [file]</code>''':当前分支的文件与[commitId]提交的文件进行比较; | ||
# '''<code>git diff --stat</code>''':显示摘要而非整个diff; | |||
# '''<code>git diff [first-branch]...[second-branch]</code>''':查看两次提交之间的差异; | |||
|- | |||
| '''<code>git stash</code>''' | |||
| 保存工作现场 | |||
| | |||
# '''<code>git stash list</code>''':查看所有保存的工作现场; | |||
# '''<code>git stash apply <stash></code>''':恢复stash(但不删除); | |||
# '''<code>git stash drop <stash></code>''':删除stash; | |||
# '''<code>git stash pop <stash></code>''':恢复并删除stash; | |||
# <stash>形如“stash@{0}”,可在list中看到: | |||
#* e.g. <code>git stash pop stash@{0}</code> | |||
|- | |- | ||
| '''<code>git reset</code>''' | | '''<code>git reset</code>''' | ||
| 回退版本 | | 回退版本 | ||
| | | | ||
<code>git reset [--soft | --mixed | --hard] [HEAD]</code><br/> | '''<code>git reset [--soft | --mixed | --hard] [HEAD]</code>'''<br/> | ||
关于参数: | 关于参数: | ||
# <code>-- | # '''<code>--soft</code>''':将<code>HEAD</code>指向指定<code>commit</code>(这使得所有更改的文件都“等待提交”); | ||
# <code>-- | # '''<code>--mixed</code>''':(默认)重置索引,但不重置工作树(保留更改的文件,标记为:未提交?未add?); | ||
# <code>-- | # '''<code>--hard</code>''':重置索引和工作树(自<commit>以来对工作树中跟踪文件的任何更改都将被丢弃); | ||
# '''<code>--merge</code>''':重置索引,并 | |||
## 在工作树中更新‘<commit>与HEAD不同’的文件, | |||
## 在工作树中保留‘索引与工作树不同’的文件(即,未add的更改)。 | |||
## 如果‘<commit>和索引不同’的文件具有未暂存的更改,则会中止重置。 | |||
# '''<code>--keep</code>''':重置索引,并 | |||
## 在工作树中更新‘<commit>与HEAD不同’的文件。 | |||
## 如果‘<commit>与HEAD不同’的文件具有本地修改,则会中止重置。 | |||
: <span style="color:GoldenRod; font-weight:bold;">参考[https://git-scm.com/docs/git-reset Documentation:Reset]的DISCUSSION一节</span> | |||
关于[HEAD]: | 关于[HEAD]: | ||
# 当前版本:<code>HEAD | # 当前版本:'''<code>HEAD</code>'''或'''<code>HEAD~0</code>''' | ||
# 上一个版本:<code>HEAD^</code>或<code>HEAD~1</code> | # 上一个版本:'''<code>HEAD^</code>'''或'''<code>HEAD~1</code>''' | ||
# 上上一个版本:<code>HEAD^^</code>或<code>HEAD^2</code> | # 上上一个版本:'''<code>HEAD^^</code>'''或'''<code>HEAD^2</code>''' | ||
# 上上上一个版本:<code>HEAD^^^</code>或<code>HEAD^3</code> | # 上上上一个版本:'''<code>HEAD^^^</code>'''或'''<code>HEAD^3</code>''' | ||
#: ''以此类推'' | #: ''以此类推'' | ||
版本回退: | |||
# '''<code>git reset --hard HEAD^</code>''':回退到上一次commit; | |||
# '''<code>git reset --hard <commitID></code>''':回退到指定commit之前; | |||
|- | |- | ||
| '''<code>git revert</code>''' | | '''<code>git revert</code>''' | ||
| | | 撤销操作 | ||
| | |||
# '''revert是将需要的版本内容反向修改回去,并提交一个新版本;''' | |||
# '''<code>git revert HEAD</code>''':撤销前一次 commit; | |||
# '''<code>git revert HEAD^</code>''':撤销前前一次 commit; | |||
# '''<code>git revert <commitID></code>''':撤销指定的版本; | |||
|- | |||
| '''<code>git restore</code>''' | |||
| | |||
文件恢复<br/> | |||
('''''Git 2.23引入''''') | |||
| | | | ||
Note1: | |||
'''<code>git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec></code>''' | |||
# '''<code>[--source=<tree>]</code>''':指定还原源: | |||
## 默认(不设置)从索引恢复内容; | |||
## 若指定<code>--staged</code>,则从<code>HEAD</code>恢复内容; | |||
# <code>[--staged] [--worktree]</code>:指定恢复目标: | |||
## 默认(不设置)恢复到工作树的内容; | |||
## <code>--staged</code>:用于恢复索引的内容; | |||
## <code>--staged --worktree</code>:用于同时恢复索引和工作区的内容; | |||
* 注意:使用“还原源”中的某些内容还原“工作树指定路径”:如果“工作树被跟踪路径”不存在与还原源中,则将删除该路径以匹配源; | |||
Note2: | |||
# '''<code>git restore --staged <file></code>''':从<code>HEAD</code>恢复<file>到索引, | |||
#: 等效于'''<code>git reset <file></code>'''; | |||
# '''<code>git restore --source=HEAD --staged --worktree <file></code>''':从<code>HEAD</code>恢复<file>到索引和工作树, | |||
#: 等效于'''<code>git checkout -- <file></code>'''; | |||
|- | |- | ||
| '''<code>git mv</code>''' | | '''<code>git mv</code>''' | ||
| 移动或重命名工作区文件 | | 移动或重命名工作区文件 | ||
| | | | ||
# | # '''<code>git mv -f [file] [newfile]</code>''':强制执行; | ||
|- | |- | ||
| '''<code>git rm</code>''' | | '''<code>git rm</code>''' | ||
| 删除工作区文件 | | 删除工作区文件 | ||
| | | | ||
# | # '''<code>git rm <file></code>''':将文件从暂存区和工作区中删除; | ||
# | # '''<code>git rm --cached <file></code>''':将文件从暂存删除,工作区保留(即停止追踪指定文件,通常是在文件曾经被git管理过,现在不需要被git接管的时候使用); | ||
# | # '''<code>git rm -r *</code>''':递归删除; | ||
# | # '''<code>git rm -f <file></code>''':强制删除; | ||
|} | |} | ||
=== 关于撤销工作区修改 === | |||
# 若工作区修改未add到stage: | |||
#: '''<code>git checkout -- <file></code>''' | |||
# 若工作区修改已add,但未commit: | |||
## '''<code>git reset HEAD <file></code>'''(1、从版本库commit中恢复到stage) | |||
## '''<code>git checkout -- <file></code>'''(2、撤销工作区修改) | |||
== 分支== | == 分支== | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! 命令 !! 说明 !! 备注 | ! style="width:10%"|命令 !! 说明 !! 备注 | ||
|- | |- | ||
| '''<code>git branch</code>''' | | '''<code>git branch</code>''' | ||
第134行: | 第193行: | ||
|- | |- | ||
| '''<code>git checkout</code>''' | | '''<code>git checkout</code>''' | ||
| | | 签出分支(或文件) | ||
| | | | ||
分支: | |||
# '''<code>git checkout <branchname></code>''':切换到<branchname>分支 | # '''<code>git checkout <branchname></code>''':切换到<branchname>分支 | ||
# '''<code>git checkout -b <branchname></code>''':'''创建并切换'''到<branchname>分支 | # '''<code>git checkout -b <branchname></code>''':'''创建并切换'''到<branchname>分支 | ||
# '''<code>git checkout -b <本地新建分支> <远程主机名>/<远程分支></code>''':在远程分支基础上新建本地分支(先有远程主机信息<code>git fetch <远程主机名> <远程分支></code>) | # '''<code>git checkout -b <本地新建分支> <远程主机名>/<远程分支></code>''':在远程分支基础上新建本地分支(先有远程主机信息<code>git fetch <远程主机名> <远程分支></code>) | ||
: ''切换分支的时候,Git会用该分支最后提交的快照替换本地工作目录的内容。'' | |||
文件: | |||
'''<code>git checkout [<options>] [<branch>] -- <file></code>''' | |||
# '''<code>git checkout -- <file></code>''':从当前分支签出文件(即'''撤销工作区文件<file>的修改'''); | |||
## 工作区修改,但'''未add'''到暂存区:checkout重置到与'''版本库'''一致 | ## 工作区修改,但'''未add'''到暂存区:checkout重置到与'''版本库'''一致 | ||
## 工作区修改并'''add后''',再次修改:checkout重置到与'''暂存区'''一致 | ## 工作区修改并'''add后''',再次修改:checkout重置到与'''暂存区'''一致 | ||
# '''<code>git checkout <commit> -- <file></code>''':从指定commit签出文件; | |||
# '''<code>git checkout <branch> -- <file></code>''':从指定分支签出文件; | |||
# '''<code>git checkout -- *.xxx'''</code>:签出所有xxx后缀的文件; | |||
# '''<code>git checkout -- xxx/'''</code>:签出所有xxx目录的文件; | |||
|- | |- | ||
| '''<code>git merge</code>''' | | '''<code>git merge</code>''' | ||
| 分支合并 | | 分支合并 | ||
| | | | ||
Note1: | |||
[[File:git merge.png|400px]] | |||
# '''合并分支并产生新的提交'''; | |||
# 不会改变当前分支的开始位置; | |||
# 只处理一次冲突; | |||
# 引入了一次合并的历史记录,合并后的所有 commit 会按照提交时间从旧到新排列; | |||
# 合并后分支过程信息更多更复杂,可能会提高之后查找问题的难度; | |||
Note2:参数 | |||
:* ''(N = 被合并分支中,需要合并的commit个数)'' | |||
:* ''(主分支和被合并分支中,被合并的commitID并不相同,是重新提交,而非引用)'' | |||
# '''<code>--ff</code>''':(默认)快速合并(主分支新增'''N'''个commit,冲突处理则'''N+1'''); | |||
#: 如果合并过程出现冲突,Git会显示出冲突并等待手动解决; | |||
# '''<code>--ff-only</code>''':只有能快速合并的情况才合并(主分支新增'''N'''个commit); | |||
#: 如果合并过程出现冲突,Git会自动abort此次merge; | |||
# '''<code>--no-ff</code>''':不使用快速合并(主分支新增'''N+1'''个commit,冲突处理则'''N+2'''); | |||
#: 会额外生成一次新的提交记录,用于标识此处进行了一次merge操作(需使用'''<code>-m <message></code>'''记录提交信息); | |||
# '''<code>--squash</code>''':压缩合并(主分支新增'''1'''个commit); | |||
#: 将待合并的分支的内容压缩成一个新的提交合并进来; | |||
Note3: | |||
# '''<code>git merge <branch1></code>''':将<branch1>分支合并到当前分支; | # '''<code>git merge <branch1></code>''':将<branch1>分支合并到当前分支; | ||
#: 将''branchB''和并到''branchA'':切换到''branchA''中执行“<code>git merge branchB</code>”。 | #: 将''branchB''和并到''branchA'':切换到''branchA''中执行“<code>git merge branchB</code>”。 | ||
第152行: | 第237行: | ||
|- | |- | ||
| '''<code>git rebase</code>''' | | '''<code>git rebase</code>''' | ||
| | | 分支(变基)合并 | ||
| | |||
Note1: | |||
[[File:git rebase.png|400px]] | |||
# '''(变基)合并分支但并不产生新的提交'''; | |||
# '''改变了当前分支的开始位置'''; | |||
# 可能会有'''多次冲突处理'''; | |||
# 没有多余的合并历史的记录,且合并后的 '''commit 顺序不一定按照 commit 的提交时间排列'''; | |||
# 合并后分支上每个 commit 点都是相对独立完整的功能单元; | |||
Note2: | |||
# '''<code>git rebase <branch1></code>''': | |||
# '''<code>git rebase --continue</code>''':(解决完冲突并<code>git add</code>后)继续应用(apply)余下的补丁进行合并; | |||
# '''<code>git rebase --abort</code>''':终止rebase的行动,并将分支回退到rebase开始前的状态; | |||
|- | |||
| '''<code>git cherry-pick</code>''' | |||
| | |||
复制commit<br/> | |||
| | |||
Note1: | |||
# '''<code>git cherry-pick <commit></code>''':是将指定的提交(commit)应用于当前分支,这会在当前分支产生一个新的提交; | |||
# '''<code>git cherry-pick <branch></code>''':表示应用该分支的最新提交,到当前分支; | |||
Note2: | |||
:* '''''复制多个commit时,当前分支会产生多个对应的commit。''''' | |||
# '''<code>git cherry-pick <commitA> <commitB> <commitC></code>''':复制多个commit; | |||
# '''<code>git cherry-pick <commitA>...<commitC></code>''':(不包括<code><commitA></code>)复制从<code><commitA></code>到<code><commitC></code>的多个commit(<code><commitA></code>必须在<code><commitC></code>之前); | |||
# '''<code>git cherry-pick <commitA>^...<commitC></code>''':(包括<code><commitA></code>)复制从<code><commitA></code>到<code><commitC></code>的多个commit(同上); | |||
:* '''''cherry-pick 也支持转移另一个代码库的提交,方法是先将该库加为远程仓库,再抓取代码并获取<commitID>''''' | |||
Note3: | |||
# '''<code>git cherry-pick --continue</code>''':用于解决代码冲突后,让<code>cherry-pick</code>过程继续执行(先将修改的文件加入暂存区<code>git add</code>); | |||
# '''<code>git cherry-pick --abort</code>''':发生代码冲突后,放弃<code>cherry-pick</code>过程,恢复到操作前状态; | |||
# '''<code>git cherry-pick --quit</code>''':发生代码冲突后,放弃<code>cherry-pick</code>过程,但不恢复状态; | |||
|- | |||
| '''<code>git switch</code>''' | |||
| | |||
切换分支<br/> | |||
('''''Git 2.23引入''''') | |||
| | | | ||
与'''<code>git checkout</code>分支'''等效: | |||
# '''<code>git switch <branch></code>分支''':等效于'''<code>git checkout <branch></code>'''; | |||
# '''<code>git switch -c <branch></code>分支''':(--create)等效于'''<code>git checkout -b <branch></code>分支'''; | |||
|} | |} | ||
冲突合并:<br/> | 冲突合并:<br/> | ||
第169行: | 第292行: | ||
# <code>git remote show [remoteName]</code>:显示远程仓库的信息 | # <code>git remote show [remoteName]</code>:显示远程仓库的信息 | ||
#: 如:git remote show origin | #: 如:git remote show origin | ||
# <code>git remote add [remoteName] [url]</code> | # <code>git remote add [remoteName] [url]</code>:添加关联远程版本库 | ||
#: 如:git remote add origin git@github.com:tianqixin/runoob-git-test.git | #: 如:git remote add origin git@github.com:tianqixin/runoob-git-test.git | ||
# <code>git remote rm [remoteName]</code>:删除远程仓库 | # <code>git remote rm [remoteName]</code>:删除远程仓库 | ||
第202行: | 第325行: | ||
# '''<code>git push --delete</code>''':删除远程主机的分支; | # '''<code>git push --delete</code>''':删除远程主机的分支; | ||
# '''<code>git push --force</code>''':(慎用)强制推送,忽略远程分支版本比本地高(应先pull); | # '''<code>git push --force</code>''':(慎用)强制推送,忽略远程分支版本比本地高(应先pull); | ||
# '''<code>git push --all</code>''':无论对应远程分支是否存在,将本地的所有分支都推送到远程主机; | # '''<code>git push --all</code>''':无论对应远程分支是否存在,将本地的所有分支都推送到远程主机; | ||
# '''<code>git push --tags</code>''':推送所有未推送过的本地标签; | |||
# '''<code>git push <tag></code>''':推送本地标签<tag>; | |||
Note2: | Note2: | ||
# '''<code>git push -u <远程主机名> <本地分支名></code>''' | # '''<code>git push -u <远程主机名> <本地分支名></code>''' | ||
第228行: | 第352行: | ||
Note1: | Note1: | ||
# '''FETCH_HEAD''':是一个版本链接,记录在本地的文件中(.git/FETCH_HEAD),指向着目前已经从远程仓库取下来的分支的末端版本; | # '''FETCH_HEAD''':是一个版本链接,记录在本地的文件中(.git/FETCH_HEAD),指向着目前已经从远程仓库取下来的分支的末端版本; | ||
# “git | # “git fetch”将: | ||
## 更新“git remote”中所有远程仓库所包含分支的最新commit-id, 将其记录到“'''.git/FETCH_HEAD'''”文件中; | |||
## 下载内容到“'''.git\objects'''”及“'''.git\refs'''”; | |||
# '''<code>git fetch</code>''' 与 '''<code>git pull</code>''': | # '''<code>git fetch</code>''' 与 '''<code>git pull</code>''': | ||
## <code>git fetch</code> | ## <code>git fetch</code>拉取更新信息(commitID),但不会合并到本地工作目录; | ||
## <code>git pull</code>将本地库更新至远程库的最新状态; | ## <code>git pull</code>将本地库更新至远程库的最新状态; | ||
Note2: | Note2: | ||
# '''<code>git fetch <远程主机名> <远程分支1> <远程分支2> <远程分支3></code>''':从远程仓库拉取多个分支; | # '''<code>git fetch <远程主机名> <远程分支1> <远程分支2> <远程分支3></code>''':从远程仓库拉取多个分支; | ||
# '''<code>git fetch <远程主机名> <远程分支></code>''':拉取指定主机指定分支的更新; | # '''<code>git fetch <远程主机名> <远程分支></code>''':拉取指定主机指定分支的更新; | ||
# '''<code>git fetch <远程主机名></code>''' | # '''<code>git fetch <远程主机名></code>''':拉取指定主机的更新(不指定分支时通常默认为master); | ||
# '''<code>git fetch </code>''':拉取所有分支(branch)的更新; | # '''<code>git fetch </code>''':拉取所有分支(branch)的更新; | ||
Note3: | Note3: | ||
第251行: | 第377行: | ||
## 合并多个分支:<code>git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290</code>,合并origin/master、origin/stable、origin/oldstable到当前分支。 | ## 合并多个分支:<code>git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290</code>,合并origin/master、origin/stable、origin/oldstable到当前分支。 | ||
|} | |} | ||
=== 设置分支追踪关系 === | |||
设置本地分支与远程分支的追踪关系,可以更方便地使用 git pull、git push 等命令。 ——如果是通过 git clone 建立的本地仓库,则已有追踪关系。 | |||
设置命令: | |||
: <syntaxhighlight lang="bash" highlight=""> | |||
git branch --set-upstream-to=<remote>/<remote_branch> <local_branch> | |||
</syntaxhighlight> | |||
== 日志 == | == 日志 == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! 命令 !! 说明 !! | ! 命令 !! 说明 !! 备注 | ||
|- | |- | ||
| '''<code>git log</code>''' | | '''<code>git log</code>''' | ||
| | | 查看所有提交过的版本信息 | ||
| | | | ||
< | Note1: | ||
# '''<code>git log --graph</code>''':查看分支commit关联拓扑图; | |||
# '''<code>git log --oneline</code>''':显示commit简略信息(只显示版本号前七位和提交时的备注信息); | |||
#: 另'''<code>--pretty=oneline</code>'''(显示完整版本号和备注); | |||
# '''<code>git log -5</code>''':显示过去5次提交; | |||
# '''<code>git log --reverse</code>''':逆序显示commit; | |||
# '''<code>git log --stat</code>''':显示commit历史,以及每次commit发生变更的文件; | |||
# '''<code>git shortlog -sn</code>''':显示所有提交过的用户,按提交次数排序; | |||
Note2: | |||
# '''<code>git log --author=<pattern></code>''':显示限定作者(正则表达式)的commit; | |||
#: 另'''<code>--committer=<pattern></code>'''类似; | |||
# '''<code>git log --since=<date></code>''':显示<date>之后的commit; | |||
#: 另'''<code>--after=<date></code>'''、'''<code>--until=<date></code>'''、'''<code>--before=<date></code>'''类似; | |||
</ | |||
|- | |- | ||
| '''<code>git reflog</code>''' | | '''<code>git reflog</code>''' | ||
| | | 查看所有分支的所有操作记录 | ||
| | |||
<code></code> | |||
|- | |||
| '''<code>git blame</code>''' | |||
| 查看文件记录 | |||
| | | | ||
< | # '''<code>git blame <file></code>''':查看指定文件的修改记录; | ||
|} | |} | ||
2022年6月4日 (六) 04:41的最新版本
常用操作
仓库
命令 | 说明 | 备注 |
---|---|---|
git init
|
初始化Git仓库 |
|
git clone
|
克隆Git仓库 |
|
git clone
可以所用不同的协议,包括ssh
,git
,https
等:git clone git@github.com:fsliurujie/test.git
:SSH协议git clone git://github.com/fsliurujie/test.git
:GIT协议git clone https://github.com/fsliurujie/test.git
:HTTPS协议
- (常用ssh,因为速度较快,还可以配置公钥免输入密码)
修改
命令 | 说明 | 备注 |
---|---|---|
git add
|
将工作区新增或修改的文件添加到暂存区 |
|
git commit
|
提交暂存区到本地仓库 |
|
git status
|
查看仓库当前的状态,显示有变更的文件 |
Microsoft Windows [版本 10.0.19041.508]
(c) 2019 Microsoft Corporation。保留所有权利。
D:\git\eijux>git status
On branch master
Your branch is up to date with 'eijux/master'.
Changed not staged for commit:
(use "git add <file>..." to include in what will be committed)
(use "git restore --staged <file>..." to unstage)
new file: 1.txt
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: 2.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
3.txt
|
git diff
|
比较文件的不同,即暂存区和工作区的差异 |
|
git stash
|
保存工作现场 |
|
git reset
|
回退版本 |
关于[HEAD]:
版本回退:
|
git revert
|
撤销操作 |
|
git restore
|
文件恢复 |
Note1:
Note2:
|
git mv
|
移动或重命名工作区文件 |
|
git rm
|
删除工作区文件 |
|
关于撤销工作区修改
- 若工作区修改未add到stage:
git checkout -- <file>
- 若工作区修改已add,但未commit:
git reset HEAD <file>
(1、从版本库commit中恢复到stage)git checkout -- <file>
(2、撤销工作区修改)
分支
命令 | 说明 | 备注 |
---|---|---|
git branch
|
分支命令 |
|
git checkout
|
签出分支(或文件) |
分支:
文件:
|
git merge
|
分支合并 |
Note2:参数
Note3:
|
git rebase
|
分支(变基)合并 |
Note2:
|
git cherry-pick
|
复制commit |
Note1:
Note2:
Note3:
|
git switch
|
切换分支 |
与
|
冲突合并:
冲突合并涉及文件添加、移除的操作,还包括文件修改内容的合并。
远程
命令 | 说明 | 备注 |
---|---|---|
git remote
|
管理远程仓库主机名 |
|
git pull
|
下载远程代码并合并: |
Note1:
Note2:
Note3:
|
git push
|
上传远程代码并合并: |
Note1:
Note2:
Note3:关于推送方式
|
|
获取远程主机的版本库更新(commit): Download objects and refs from another repository |
Note1:
Note2:
Note3:
|
设置分支追踪关系
设置本地分支与远程分支的追踪关系,可以更方便地使用 git pull、git push 等命令。 ——如果是通过 git clone 建立的本地仓库,则已有追踪关系。
设置命令:
git branch --set-upstream-to=<remote>/<remote_branch> <local_branch>
日志
命令 | 说明 | 备注 |
---|---|---|
git log
|
查看所有提交过的版本信息 |
Note1:
Note2:
|
git reflog
|
查看所有分支的所有操作记录 |
|
git blame
|
查看文件记录 |
|
标签
tag实际就是一个指向commit的指针,将一个有意义的tag名称与commit相关联。
git标签有两种类型:
- 轻量级的(lightweight):实际上它就是个指向特定提交对象的引用。
- 含附注的(annotated):
实际上是存储在仓库中的一个独立对象,有自身的校验和信息,包含标签名称,电子邮件地址和日期,及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。
命令 | 说明 | 备注 |
---|---|---|
git tag
|
git标签 |
Note:
如: Microsoft Windows [版本 10.0.19041.508]
(c) 2019 Microsoft Corporation。保留所有权利。
D:\git\eijux>git tag
D:\git\eijux>git tag rc1.0
D:\git\eijux>git tag -a rc2.0
# Write a message for tag:
# rc2.0
# Lines starting with '#' will be ignored.
D:\git\eijux>git tag rc3.0 ffa1
D:\git\eijux>git log --decorate
commit 5e26159ad738b08b9321eba9ecaeff39c8acc42f (HEAD -> master, tag: rc2.0, tag: rc1.0, eijux/master)
Author: Eijux <chen@eijux.com>
Date: Fri Nov 1 01:18:47 2019 +0800
idea commit test 01<E7><82><B9>18<E5><88><86>
commit ffa14211ab7088d9782de019328238dcfe09a4bc (tag: rc3.0)
Merge: 3fbc79a fc32a4a
Author: Eijux <chen@eijux.com>
Date: Thu Oct 31 16:03:24 2019 +0800
Merge branch 'master' of github.com:Eijux/eijux
D:\git\eijux>git show rc3.0
commit ffa14211ab7088d9782de019328238dcfe09a4bc (tag: rc3.0)
Merge: 3fbc79a fc32a4a
Author: Eijux <chen@eijux.com>
Date: Thu Oct 31 16:03:24 2019 +0800
Merge branch 'master' of github.com:Eijux/eijux
D:\git\eijux>
|