从命令开始学习Git的入门指南,进行Git的解说

从命令行学习Git

目标读者

    • gitを勉強中の人

 

    • 機械的にfetchしてaddしてcommitしてpushみたいなのが出来るようになったけど業務に活かしたい人

 

    • リモート追跡ブランチって何?って人

 

    • HEADとかHEAD^って何?って人

 

    • addとかcommitを取り消すコマンドを毎回ググっちゃう人

 

    • コマンドで色々参照したい人

 

    エイリアスを設定したい人

(有不准确的描述之处)

分支

概念 – Concept

将分支进行一些分类考虑会更容易理解。

    1. 远程分支(在GitHub之类的地方)

 

    1. 远程跟踪分支(存在于本地的remotes/origin/某个分支)

 

    1. 跟踪分支(参考remotes/origin/某个分支的本地分支)

 

    本地分支(仅存在于本地的分支)

个人认为,在理解Git的过程中,理解2和3可能是非常重要的。

如果执行git fetch命令,2会基于1进行更新。

顺便说一下,执行git pull命令会将代码合并到第三个追踪分支。

$ git branch [branch_name]

所以,你可以新建一个分支。

在那时,将会自动创建一个追踪“远程追踪分支”的同名“追踪分支”,请不要随意使用 git checkout -b 命令创建分支。
请一定要注意远程追踪分支。

当在新建远程追踪分支时,如果没有,可以通过以下的推送命令使用 -u 选项进行设置。

$ git push -u origin [branch_name]

如果你想自己指定要追踪哪个远程追踪分支,可以这样做。

$ git branch [branch_name] [origin/branch_name]

请参考以下中文翻译:

我同意。

所以,例如,
「我不明白本地分支的状态。想要与远程状态匹配。」
「远程分支被强制推送。」
如果出现这种情况,请按以下方式处理。

通过更新远程跟踪分支并创建跟踪分支。

$ git branch -D [branch_name]

$ git fetch

$ git branch [branch_name] [origin/branch_name]

or

$ git checkout [branch_name]

如果按照上述方法进行操作,它会自动在.git/config文件中添加设置。
相反地,如果在.git/config文件中添加设置,可以指定要获取的分支。

暂存代码

同时进行多个任务时,不能切换到其他分支!这样的情况经常发生吧。

请执行 git stash。

第一次使用git stash的人

只需记住两个。

暂时撤离

$ git stash

根据撤回的内容恢复原状

$ git stash pop

如果执行上述操作,可以采取”先备份,然后切换到分支,最后恢复到原来的状态”的方式。

稍微详细解释

在退避时添加评论

$ git stash save [comment]

显示存储的列表

$ git stash list

显示stash的摘要

$ git stash show [index(listで出てくるstash@{0}とか)]

指定索引的stash返回原来的状态

$ git stash apply [index]

如果在列表上应用了该操作,它不会从列表中消失,所以需要删除它。(如果使用pop函数,则会被删除)

$ git stash drop [index]

撤销git

我不小心添加了错的内容!我不小心提交了错误的内容!这些都会很有帮助。

每次都要谷歌搜索而又不懂的人,复制粘贴命令的时候,请理解以下两点。

三种RESET选项

    1. 无选项(或 –mixed)(对commit和add产生影响)

 

    1. –soft    (仅对commit产生影响)

 

    –hard   (对commit、add和工作目录都产生影响)

HEAD(代表分支位置的指示物)

    1. 可以把以下内容用中文翻译一遍,只需给出一种选项:

HEAD(可以理解为当前提交的位置)
HEAD^(上一个提交的位置)
(虽然可以引用前几个提交,但因为很少使用,如果有需要请自行搜索)

如果想要取消“add”操作,怎么办?

$ git reset

这是以下的缩写。

$ git reset --mixed HEAD

换句话说,因为没有选项(–mixed),所以对add和commit有影响。commit会定位到HEAD的位置,add也会定位到HEAD的位置。

只有进行了 add 操作而未进行 commit 操作时,由于尚未提交,HEAD 的位置没有(commit 没有)发生改变。

因此,这意味着”只取消add”。

如果想要撤销commit的话

我希望能回到先前的 commit 或 add。

$ git reset HEAD^

如果已经进行了add和commit操作,由于HEAD已经移动了一个位置,因此需要指定HEAD^。
→ 由于没有使用任何选项,所以add和commit都会移动到HEAD^。

我只想取消commit,add保持不变。

$ git reset --soft HEAD^

换句话说,由于使用了“–soft”选项,仅会影响到提交(commit)。提交会被放置在HEAD^(上一个提交)的位置。(对于–soft选项,添加(add)的状态不会改变)

如果想要放弃本地的更改内容,请在以下提供的选项中选择一个:

我想回到上一个提交的状态(更改将丢失,包括本地文件)。

$ git reset --hard HEAD^

由于使用了“–hard”选项,会影响到add、commit和working_tree。这将把所有内容重置到HEAD^(上一个提交)的位置。

虽然还没有提交,但是我仍然想要彻底清除本地的所有更改。

$ git reset --hard HEAD

如果既没有添加也没有提交,那么只有working_tree(本地修改)会移动到HEAD(当前提交)的位置。

git reflog 的中文翻譯是「Git 引用日誌」。

如果要进行 git reset –hard 操作,你应该记住这个命令。

当执行git reset –hard命令后,git log中将无法看到该内容。

$ git reflog

如果是这样,由于可以追踪HEAD的移动历史,也许以下方式可能会让它返回?(不能保证)

$ git reset --hard HEAD@{No}

其他一些方便的指令

在中文中进行本地化的直接表述:搜索

git grep [pattern] [(branch_name等指定可)]
(例)
$ git grep test_pattern master

如果使用git来grep文件的话,一般比使用常规grep搜索更快速。

日志- L

git log -L [start],[end]:[file_name]
(例)
$ git log -L 20,100:app/models/user.rb

显示 file_name 文件中从 start 行到 end 行的更改历史。

当使用这个短语时,可以询问这个变更的历史和背景是什么。

展示

git show [commit_id(git logとかで見る)]
git show [branch_name(or commit_id)]:[file_name]
(例)
$ git show asdfghjkl1234567890
$ git show master:app/model/group.rb

在查看指定提交的更改时(可以查看GitHub),特别是当想要引用另一个分支(或另一个提交)的文件时,如果不想费心切换分支的话。

挑花果

git cherry-pick [commit_id]
(例)
$ git cherry-pick asdfghjkl1234567890

将指定的 commit 合并到当前 HEAD(合并到当前分支)

例如,如果将整个分支合并会导致杂乱无章,只需合并所需的部分即可。

合并–压缩

git merge --squash
(例)
$ git merge --squash origin/feature

在合并时,可以将源提交合并为一个。
如果 origin/feature 与 commit1、commit2 和 commit3 之间有差异,可以将其合并并获取差异。可以将其作为 commit4 进行提交。
例如,在自己的工作分支上整理或合并混乱的提交非常方便。
(注意)请注意,它仍然是另一个提交,因此在使用 diff 检查时会出现提交差异。

有这种东西吗?的指令(额外内容)

把……二等分

git bisect start [なんかおかしくなったコミットID] [正常だった頃のコミットID]
(例)
$ git bisect start asdfghjkl1234567890 zxcvbnm0987654321

在哪个提交中,快速查找出了什么问题。

使用二分搜索自动检出提交并重复测试来确定原因的提交。

$ git bisect run [test_file]

因此,可以选择指定测试文件或手动测试后执行其中之一。

$ git bisect good
$ git bisect bad

查看当前的提交。

$ git bisect view

如果想要结束git bisect,

$ git bisect reset

提示

如果您完全理解了以上内容,请按以下设置,以更加舒适地使用Git。

注册别名

没有注册Git别名的人,如果注册的话,会变得稍微幸福一些。

我以为用 checkout(结账)作为 co 有些奇怪,但实际上感觉还挺舒适的。

$ git config --global --edit

因为vi打开了,所以在以下进行添加。

[alias]
  st = status
  br = branch
  ci = commit
  co = checkout

通过使用$ git st命令,可以查看git status的状态。

广告
将在 10 秒后关闭
bannerAds