目次
はじめに
区域
clone
rm
stash
tag
amend
reset
rebase
--onto
エリア
--interactive
branch
push
cherry-pick
merge
reflog
前言
ホームページ Java &#&チュートリアル git の使用に関するその他の注意事項

git の使用に関するその他の注意事項

Feb 09, 2017 am 09:31 AM
git

はじめに

開発者として、git を知らない場合、またはまだ git を使用できない場合は、それについてよく考えてください。あなたも入門編を読んでみてください。今日は、私が日常生活で git を使用する一般的なコマンドと、オフィスの効率を向上させるために良いと思うコマンドをいくつか紹介します。内容は少し乱雑かもしれませんが、間違いなく古典的なコマンドなので、ここにメモしておきます。私のことを理解してくれる人たちの助けになれば幸いです。 git或者还不会使用git,那么你应该好好的反省。自己去好好看一遍的入门介绍吧。今天只是对自己在日常中使用git的一些常用命令的介绍与自己认为不错且能提高我们办公效率的命令。内容可能会有点杂乱,但绝对都是经典的命令,在此记下笔记,也希望能帮助来赏脸关顾的你们。

区域

在这之前,来介绍一下git的三个区域

  • 工作区(working directory)

  • 暂存区(stage index)

  • 本地历史区(history)

通过一张图就能简洁易懂的明白它们之间的转化。

git使用杂记

clone

先从clone命令来介绍,使用过git的都知道它。git colne命令拉取远程仓库到本地。但当我们要拉取到指定的文件夹下时,你可能会直接mkdir,其实无需如此,一条命令就能搞定git clone 远程仓库 文件名,就是如此简单。

rm

我们在工作中可能会遇到这么一种情况,使用git add .直接将工作区的所有修改的文件加入到暂存区了,但是后面发现有一个文件先不要加进去,此时我们就可以使用如下命令就可以将该文件退回到工作区中。

git rm --cached <file>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

stash

有这么一种情况,当你正在开发中时,有一个线上的紧急bug需要修复,此时开发中的功能又没有完成你不想提交,此时你可以使用git stash将工作区的文件都存放起来。这时你就可以放心的去切分支修复bug,修复完之后执行git stash pop可以将先前存放的取出,当然也有一些其他的相关命令例如:git stash list查看存放的记录,git stash drop丢弃存放的记录。

tag

可能在开发中我们要打标签git tag tagName,并且要将相应的标签推送到远程仓库中,此时可以使用如下命令进行推送。

git push --tags tagName
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

amend

当你commit以后,发现有一个文件没有加进上次的commit中,或者又修改了一些文件。此时你并不想增加新的commit信息,只是想将其加入到上次的commit中。这时你就可以使用

git commit --amend <file>
ログイン後にコピー
ログイン後にコピー

将暂存区的文件加入其中,并且你也可以修改此时的commit信息。

reset

reset也能实现前面的rm的效果,可以使用如下命令来替代前面的git rm --cached <file>命令

git reset HEAD <file>
ログイン後にコピー
ログイン後にコピー

reset用途更广,结合soft参数可以回撤到任意的commit节点进行操作

git reset --soft index
ログイン後にコピー
ログイン後にコピー

执行该命令之后,就回到index处,工作区不变、暂存区回到当时的index处。另外还有一个hard参数。

git reset --hard index
ログイン後にコピー
ログイン後にコピー

soft可以说对立,它的效果就在于工作区与暂存区的不同,它会清空这两个区。

rebase

对于rebase是重定向的意思,如果你当前的分支与远程的分支commit信息存在差异时,会提醒你此时不能进行push,必须先将远程的commit信息拉去到本地来,才能进行提交。对于这种情况就可以使用rebase命令了。如下当前处在develop分支

git使用杂记

此时应该先执行rebase命令

git fetch
git rebase origin/master
ログイン後にコピー
ログイン後にコピー

执行完之后,最后再push到远程master

git push origin master
ログイン後にコピー
ログイン後にコピー

最终各个分支的情况就是上图的效果了。如果觉得命令多难记,这里也可用一条命令来完成上面的效果

git pull --rebase origin master
ログイン後にコピー
ログイン後にコピー

这是rebase的简单运用,也是常见的命令了。下面介绍rebase的一个可选参数--onto

--onto

使用场景:开发过程中我们都会创建不同的分支进行开发不同的功能,当你在分支A上创建了新分支B进行开发功能并且也提交了一些commit时,此时你发现原来A分支上有错误的commit,如果要rebasemaster上时,不能将这个错误的commit也附带上。这个时候就该--onto

エリア

その前に、git🎜
  • 🎜Working Area (作業ディレクトリ) の 3 つのエリアを紹介します。 🎜
  • 🎜ステージングエリア(ステージインデックス)🎜
  • 🎜郷土史エリア(歴史)🎜
🎜写真1枚で簡潔にまとめられる 簡単それらの間の変化を理解するために。 🎜🎜Git の使用に関するその他の注意事項🎜

clone

🎜 clone コマンドから始めましょう。git を使用したことがある人なら誰でも知っています。それ。 gitcolne コマンドは、リモート リポジトリをローカル リポジトリにプルします。ただし、指定したフォルダーにプルしたい場合は、直接 mkdir を実行する必要はありません。git clone リモート ウェアハウス ファイル名 を 1 つのコマンドで処理できます。 > それはとても簡単です。 🎜

rm

🎜作業中にこのような状況に遭遇することがあります。 git add . を使用して、ワークスペース内の変更されたすべてのファイルをステージング領域に直接追加します。現時点では、最初に追加すべきではないファイルです。次のコマンドを使用してファイルをワークスペースに戻すことができます。 🎜
git rebase --onto master <b的commit hash code> B
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

stash

🎜 開発中に、修正が必要なオンラインの緊急 バグ があり、開発中の機能がこの時点では完了していないという状況があります。コミットしたくない場合は、git stash を使用してすべてのファイルをワークスペースに保存できます。この時点では、ブランチを安全にカットして bug を修正できます。修復が完了したら、git stash Pop を実行して、以前に保存したものを取り出します。他にも次のような関連コマンドがあります: git stash list は保存されたレコードを表示し、git stash drop は保存されたレコードを破棄します。 🎜

tag

🎜 開発中に、git tag tagName をタグ付けし、対応するタグをリモート ウェアハウスにプッシュする必要がある場合があります。このとき、次のコマンドを使用してプッシュできます。 🎜
git rebase --onto <a的commit hash code> <b的commit hash code> B
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

amend

🎜 commit 後、最後の commit にファイルが追加されていないか、一部のファイルが変更されていることがわかります。現時点では、新しい commit 情報を追加するのではなく、最後の commit に追加するだけです。このとき、🎜
git commit --amend
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜を使用して一時記憶領域にファイルを追加できます。このとき、commit 情報を変更することもできます。 🎜

reset

🎜reset は、以前の rm の効果を実現することもできます。次のコマンドを使用して、以前の git rm を置き換えることができます。 --cached <file> コマンド 🎜
git rebase -i <commit hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 ですが、resetsoft パラメータと組み合わせると、より汎用性が高く、任意の にロールバックできます。 >commit ノード 操作を実行します🎜
pick 137cf0a First coommit
pick 163dc38 Second commit

# Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 このコマンドを実行すると、index に戻ります。作業領域は変更されず、一時記憶領域は現在の index に戻ります。 コード>。 <code>hard パラメータもあります。 🎜
r 137cf0a First commit
pick 163dc38 Second commit
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 は、soft の逆であると言えます。その効果は、作業領域と一時記憶領域の違いにあります。 🎜

rebase

🎜 rebase の場合、現在のブランチとリモート ブランチの commit の間に情報に違いがある場合、リダイレクトを意味します。現時点では、push は実行できません。送信する前に、リモートの commit 情報をローカルに取得する必要があります。この場合、rebase コマンドを使用できます。以下は現在 develop ブランチにあります🎜🎜Git の使用に関するその他の注意事項🎜🎜このとき、最初に rebase コマンドを実行する必要があります🎜
First commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Thu Jan 26 23:07:10 2017 +0800
#
# rebase in progress; onto f9aee6e
# You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'.
#
# Changes to be committed:
#       new file:   file1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜実行後、最後にリモートのmasterpushをします🎜
git branch new_branch <commit hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 各ブランチの最終的な状況は上の図の通りです。コマンドが覚えにくい場合は、1 つのコマンドを使用して上記の効果を達成することもできます🎜
git checkout push_branch
git push origin push_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜これは rebase の単純な応用であり、一般的なコマンドでもあります。以下では、rebase のオプションのパラメータ --onto を導入します。 🎜

--onto

🎜使用シナリオ: 開発プロセス中に、ブランチ A に新しいブランチ を作成するとき、さまざまなブランチを作成します。 B が関数を開発し、いくつかの commit を送信すると、元の A ブランチに間違った commit があることがわかります。 rebasemaster に設定すると、この間違った commit をアタッチできません。このとき、--onto がその魔法を披露するときが来ました。 🎜

git使用杂记

当前处在B分支,要得到上面的结果,只需执行如下命令

git rebase --onto master <b的commit hash code> B
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

这个不仅可以针对不同的分支,也能作用于同一个分支上。所以针对上面的情况可以只对分支B进行操作,等价命令如下:

git rebase --onto <a的commit hash code> <b的commit hash code> B
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

--interactive

当我们要修改commit信息的名称时,如果要修改的commit处在第一个时,可以使用

git commit --amend
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

如果不是第一个时,我们就要使用到rebase--interactive可选参数了,可以简写为-i

git rebase -i <commit hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

参数后面的commit hash code为需要修改的commit的前一个。执行之后就会出现如下类似的信息:

pick 137cf0a First coommit
pick 163dc38 Second commit

# Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

根据提示我们可以有6个可选择的操作。相信提示已经说的很明显了,对于我们这种要修改First coommit的情况,需要使用r

r 137cf0a First commit
pick 163dc38 Second commit
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

执行之后会跳到修该First coomit的界面,进行修改即可。

First commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Thu Jan 26 23:07:10 2017 +0800
#
# rebase in progress; onto f9aee6e
# You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'.
#
# Changes to be committed:
#       new file:   file1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

至于其他的操作项,有兴趣的可以自己去尝试一下。例如s操作就可以用来合并commit

branch

相信branch都很熟悉,我这里要说的是他的另一种可能会用到的情况。场景是这样的:如果在你进行创建新的分支时,并不想从当前的commit信息节点进行创建分支。

git使用杂记

要实现如上效果只需在创建分支时在后面再添加额外的参数,该参数就是你所需调到的commit节点的hash code

git branch new_branch <commit hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

push

这里提一下push--set-upstream,它的效果是设置上游分支,当我们将远程不存在的本地分支推送到远程时,如果不在推送的分支上,我们一般会使用如下命令进行推送。

git checkout push_branch
git push origin push_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

下面是简洁的方法,使用该参数无需切换分支,可以直接使用如下命令进行推送。

git push --set-upstream origin push_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

cherry-pick

这个命令的场景是:当你所在的分支没用,你要删除它,但其中的一个commit你还是想推送到远程master上。

git使用杂记

将分支切换到master,执行以下命令:

git cherry-pick <b的 commit hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

merge

我们所熟知的是使用merge来进行分支的合并,每次使用merge时都会自动将副分支合并成一个commit进行推送到主分支上,那么如果我不想它自动推送到主分支上时(可能我还需要进行修改),这时就可以使用--squash操作

git merge --squash dev_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

执行完以上命令后,我们就可以在暂存区看到一个还未提交的文件状态。

reflog

当我们切分支太频繁了之后,可能会忘了一些分支是从哪个分支切过来的,此时可以使用如下命令查看:

git reflog
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
894a16d HEAD@{0}: commit: commit another todo
6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman
324336a HEAD@{2}: commit: commit todo
6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger
6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom
6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman
6876e5b HEAD@{6}: commit (initial): initial commit
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

这样我们就可以看到所用的操作历史了。这样如果我们使用git reset命令不小心删除了需要的东西。可以通过此来查找到删除操作的hash code,之后就可以通过如下命令进行恢复。

git checkout <hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

目前想到的就这些了,希望能有所帮助

个人博客:http://www.php.cn/

前言

作为一个开发者,如果现在还不知道git或者还不会使用git,那么你应该好好的反省。自己去好好看一遍的入门介绍吧。今天只是对自己在日常中使用git的一些常用命令的介绍与自己认为不错且能提高我们办公效率的命令。内容可能会有点杂乱,但绝对都是经典的命令,在此记下笔记,也希望能帮助来赏脸关顾的你们。

区域

在这之前,来介绍一下git的三个区域

  • 工作区(working directory)

  • 暂存区(stage index)

  • 本地历史区(history)

通过一张图就能简洁易懂的明白它们之间的转化。

git使用杂记

clone

clone コマンドから始めましょう。git を使ったことがある人なら誰でもそれを知っています。 gitcolne コマンドは、リモート リポジトリをローカル リポジトリにプルします。ただし、指定したフォルダーにプルしたい場合は、直接 mkdir を実行する必要はありません。git clone リモート ウェアハウス ファイル名 を 1 つのコマンドで処理できます。 > それはとても簡単です。 clone命令来介绍,使用过git的都知道它。git colne命令拉取远程仓库到本地。但当我们要拉取到指定的文件夹下时,你可能会直接mkdir,其实无需如此,一条命令就能搞定git clone 远程仓库 文件名,就是如此简单。

rm

我们在工作中可能会遇到这么一种情况,使用git add .直接将工作区的所有修改的文件加入到暂存区了,但是后面发现有一个文件先不要加进去,此时我们就可以使用如下命令就可以将该文件退回到工作区中。

git rm --cached <file>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

stash

有这么一种情况,当你正在开发中时,有一个线上的紧急bug需要修复,此时开发中的功能又没有完成你不想提交,此时你可以使用git stash将工作区的文件都存放起来。这时你就可以放心的去切分支修复bug,修复完之后执行git stash pop可以将先前存放的取出,当然也有一些其他的相关命令例如:git stash list查看存放的记录,git stash drop丢弃存放的记录。

tag

可能在开发中我们要打标签git tag tagName,并且要将相应的标签推送到远程仓库中,此时可以使用如下命令进行推送。

git push --tags tagName
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

amend

当你commit以后,发现有一个文件没有加进上次的commit中,或者又修改了一些文件。此时你并不想增加新的commit信息,只是想将其加入到上次的commit中。这时你就可以使用

git commit --amend <file>
ログイン後にコピー
ログイン後にコピー

将暂存区的文件加入其中,并且你也可以修改此时的commit信息。

reset

reset也能实现前面的rm的效果,可以使用如下命令来替代前面的git rm --cached <file>命令

git reset HEAD <file>
ログイン後にコピー
ログイン後にコピー

reset用途更广,结合soft参数可以回撤到任意的commit节点进行操作

git reset --soft index
ログイン後にコピー
ログイン後にコピー

执行该命令之后,就回到index处,工作区不变、暂存区回到当时的index处。另外还有一个hard参数。

git reset --hard index
ログイン後にコピー
ログイン後にコピー

soft可以说对立,它的效果就在于工作区与暂存区的不同,它会清空这两个区。

rebase

对于rebase是重定向的意思,如果你当前的分支与远程的分支commit信息存在差异时,会提醒你此时不能进行push,必须先将远程的commit信息拉去到本地来,才能进行提交。对于这种情况就可以使用rebase命令了。如下当前处在develop分支

git使用杂记

此时应该先执行rebase命令

git fetch
git rebase origin/master
ログイン後にコピー
ログイン後にコピー

执行完之后,最后再push到远程master

git push origin master
ログイン後にコピー
ログイン後にコピー

最终各个分支的情况就是上图的效果了。如果觉得命令多难记,这里也可用一条命令来完成上面的效果

git pull --rebase origin master
ログイン後にコピー
ログイン後にコピー

这是rebase的简单运用,也是常见的命令了。下面介绍rebase的一个可选参数--onto

--onto

使用场景:开发过程中我们都会创建不同的分支进行开发不同的功能,当你在分支A上创建了新分支B进行开发功能并且也提交了一些commit时,此时你发现原来A分支上有错误的commit,如果要rebasemaster上时,不能将这个错误的commit也附带上。这个时候就该--onto大显神通了。

git使用杂记

当前处在B分支,要得到上面的结果,只需执行如下命令

git rebase --onto master <b的commit hash code> B
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

这个不仅可以针对不同的分支,也能作用于同一个分支上。所以针对上面的情况可以只对分支B进行操作,等价命令如下:

git rebase --onto <a的commit hash code> <b的commit hash code> B
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

--interactive

当我们要修改commit信息的名称时,如果要修改的commit处在第一个时,可以使用

git commit --amend
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

如果不是第一个时,我们就要使用到rebase--interactive可选参数了,可以简写为-i

git rebase -i <commit hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

参数后面的commit hash code为需要修改的commit

rm🎜🎜私たちは仕事中にこのような状況に遭遇するかもしれません。 git add . を使用してワークスペース内の変更されたすべてのファイルをステージング領域に直接追加しますが、後で Don' があることがわかります。この時点では、次のコマンドを使用してファイルをワークスペースに戻すことができます。 🎜
pick 137cf0a First coommit
pick 163dc38 Second commit

# Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜stash🎜🎜 開発中に、修正する必要のあるオンラインの緊急 バグ が発生する状況があります。現時点では、開発中の機能が完了していないため、修正する必要があります。 git stash を使用して、すべてのファイルをワークスペースに保存できます。この時点では、ブランチを安全にカットして bug を修正できます。修復が完了したら、git stash Pop を実行して、以前に保存したものを取り出します。他にも次のような関連コマンドがあります: git stash list は保存されたレコードを表示し、git stash drop は保存されたレコードを破棄します。 🎜🎜tag🎜🎜開発中に、git tag tagName をタグ付けし、対応するタグをリモート ウェアハウスにプッシュする必要がある場合があります。この時点では、次のコマンドを使用してプッシュできます。 🎜
r 137cf0a First commit
pick 163dc38 Second commit
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜修正🎜🎜 commit 後、最後の commit にファイルが追加されていないか、一部のファイルが変更されていることがわかります。現時点では、新しい commit 情報を追加するのではなく、最後の commit に追加するだけです。このとき、🎜
First commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Thu Jan 26 23:07:10 2017 +0800
#
# rebase in progress; onto f9aee6e
# You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'.
#
# Changes to be committed:
#       new file:   file1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜を使用して一時記憶領域にファイルを追加できます。このとき、commit 情報を変更することもできます。 🎜🎜reset🎜🎜reset は、以前の rm の効果を実現することもできます。次のコマンドを使用して、以前の git rm --cached < を置き換えることができます。 file> コマンド🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">git branch new_branch &lt;commit hash code&gt;</pre><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div>🎜 ただし、<code>resetsoft パラメータと組み合わせると、任意の commit にロールバックできます。 > 操作用ノード🎜
git checkout push_branch
git push origin push_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 このコマンドを実行すると、index の位置に戻り、作業領域は変更されず、一時記憶領域は現在の index に戻ります。 > 位置。 hard パラメータもあります。 🎜
git push --set-upstream origin push_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 は、soft の逆であると言えます。その効果は、作業領域と一時記憶領域の違いにあります。 🎜🎜rebase🎜🎜 rebase の場合、現在のブランチとリモート ブランチの commit の間に情報に違いがある場合、続行できないことが通知されます。現時点ではpush なので、送信する前に、まずリモートの commit 情報をローカルにプルする必要があります。この場合、rebase コマンドを使用できます。以下は現在 develop ブランチにあります🎜🎜Git の使用に関するその他の注意事項🎜🎜このとき、最初に rebase コマンドを実行する必要があります🎜
git cherry-pick <b的 commit hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜実行後、最後にリモートのmasterpushをします🎜
git merge --squash dev_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 各ブランチの最終的な状況は上の図の通りです。コマンドが覚えにくい場合は、1 つのコマンドを使用して上記の効果を達成することもできます🎜
git reflog
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜これは rebase の単純な応用であり、一般的なコマンドでもあります。以下では、rebase のオプションのパラメータ --onto を導入します。 🎜

--onto

🎜使用シナリオ: 開発プロセス中に、ブランチ A に新しいブランチ を作成するとき、さまざまなブランチを作成します。 B が関数を開発し、いくつかの commit を送信すると、元の A ブランチに間違った commit があることがわかります。 rebasemaster に設定すると、この間違った commit をアタッチできません。このとき、--onto がその魔法を披露するときが来ました。 🎜🎜git 使用上の注意🎜🎜現在 B ブランチにあり、上記の結果を取得するには、次のコマンドを実行するだけです🎜
894a16d HEAD@{0}: commit: commit another todo
6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman
324336a HEAD@{2}: commit: commit todo
6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger
6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom
6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman
6876e5b HEAD@{6}: commit (initial): initial commit
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 これは、異なるブランチをターゲットにするだけでなく、同じブランチ上で作業します。したがって、上記の状況では、ブランチ B でのみ操作できます。同等のコマンドは次のとおりです。 🎜
git checkout <hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

--interactive

🎜 を変更する場合。 commit 情報の名前として、変更する commit が先頭にある場合は 🎜
git rm --cached <file>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 を使用できます。先頭でない場合は rebase --interactive パラメータはオプションであり、-i と省略できます。 🎜
git push --tags tagName
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜 パラメータの後の コミット ハッシュ コード は、変更する必要がある前の コミット です。実行後、次のようなメッセージが表示されます: 🎜
pick 137cf0a First coommit
pick 163dc38 Second commit

# Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

根据提示我们可以有6个可选择的操作。相信提示已经说的很明显了,对于我们这种要修改First coommit的情况,需要使用r

r 137cf0a First commit
pick 163dc38 Second commit
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

执行之后会跳到修该First coomit的界面,进行修改即可。

First commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Thu Jan 26 23:07:10 2017 +0800
#
# rebase in progress; onto f9aee6e
# You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'.
#
# Changes to be committed:
#       new file:   file1
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

至于其他的操作项,有兴趣的可以自己去尝试一下。例如s操作就可以用来合并commit

branch

相信branch都很熟悉,我这里要说的是他的另一种可能会用到的情况。场景是这样的:如果在你进行创建新的分支时,并不想从当前的commit信息节点进行创建分支。

git使用杂记

要实现如上效果只需在创建分支时在后面再添加额外的参数,该参数就是你所需调到的commit节点的hash code

git branch new_branch <commit hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

push

这里提一下push--set-upstream,它的效果是设置上游分支,当我们将远程不存在的本地分支推送到远程时,如果不在推送的分支上,我们一般会使用如下命令进行推送。

git checkout push_branch
git push origin push_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

下面是简洁的方法,使用该参数无需切换分支,可以直接使用如下命令进行推送。

git push --set-upstream origin push_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

cherry-pick

这个命令的场景是:当你所在的分支没用,你要删除它,但其中的一个commit你还是想推送到远程master上。

git使用杂记

将分支切换到master,执行以下命令:

git cherry-pick <b的 commit hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

merge

我们所熟知的是使用merge来进行分支的合并,每次使用merge时都会自动将副分支合并成一个commit进行推送到主分支上,那么如果我不想它自动推送到主分支上时(可能我还需要进行修改),这时就可以使用--squash操作

git merge --squash dev_branch
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

执行完以上命令后,我们就可以在暂存区看到一个还未提交的文件状态。

reflog

当我们切分支太频繁了之后,可能会忘了一些分支是从哪个分支切过来的,此时可以使用如下命令查看:

git reflog
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
894a16d HEAD@{0}: commit: commit another todo
6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman
324336a HEAD@{2}: commit: commit todo
6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger
6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom
6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman
6876e5b HEAD@{6}: commit (initial): initial commit
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

这样我们就可以看到所用的操作历史了。这样如果我们使用git reset命令不小心删除了需要的东西。可以通过此来查找到删除操作的hash code,之后就可以通过如下命令进行恢复。

git checkout <hash code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

目前想到的就这些了,希望能有所帮助

更多git使用杂记 相关文章请关注PHP中文网!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Giteeページ静的なWebサイトの展開に失敗しました:単一のファイル404エラーをトラブルシューティングと解決する方法 Giteeページ静的なWebサイトの展開に失敗しました:単一のファイル404エラーをトラブルシューティングと解決する方法 Apr 04, 2025 pm 11:54 PM

GiteEpages静的Webサイトの展開が失敗しました:404エラーのトラブルシューティングと解像度Giteeを使用する

H5プロジェクトの実行方法 H5プロジェクトの実行方法 Apr 06, 2025 pm 12:21 PM

H5プロジェクトを実行するには、次の手順が必要です。Webサーバー、node.js、開発ツールなどの必要なツールのインストール。開発環境の構築、プロジェクトフォルダーの作成、プロジェクトの初期化、コードの書き込み。開発サーバーを起動し、コマンドラインを使用してコマンドを実行します。ブラウザでプロジェクトをプレビューし、開発サーバーURLを入力します。プロジェクトの公開、コードの最適化、プロジェクトの展開、Webサーバーの構成のセットアップ。

GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? Apr 02, 2025 pm 04:12 PM

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Beego ormのモデルに関連付けられているデータベースを指定する方法は? Beego ormのモデルに関連付けられているデータベースを指定する方法は? Apr 02, 2025 pm 03:54 PM

Beegoormフレームワークでは、モデルに関連付けられているデータベースを指定する方法は?多くのBEEGOプロジェクトでは、複数のデータベースを同時に操作する必要があります。 Beegoを使用する場合...

H5ページの生産には継続的なメンテナンスが必要ですか? H5ページの生産には継続的なメンテナンスが必要ですか? Apr 05, 2025 pm 11:27 PM

H5ページは、コードの脆弱性、ブラウザー互換性、パフォーマンスの最適化、セキュリティの更新、ユーザーエクスペリエンスの改善などの要因のため、継続的に維持する必要があります。効果的なメンテナンス方法には、完全なテストシステムの確立、バージョン制御ツールの使用、定期的にページのパフォーマンスの監視、ユーザーフィードバックの収集、メンテナンス計画の策定が含まれます。

Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Apr 02, 2025 pm 04:54 PM

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

海外バージョンの配送地域データを取得する方法は?利用可能な既製のリソースは何ですか? 海外バージョンの配送地域データを取得する方法は?利用可能な既製のリソースは何ですか? Apr 01, 2025 am 08:15 AM

質問の説明:海外バージョンの配送地域データを取得する方法は?既製のリソースはありますか?国境を越えた電子商取引またはグローバル化ビジネスで正確に入手してください...

See all articles