12 の高度な git コマンド

Dec 03, 2016 am 09:34 AM
git

ご存知のとおり、Git は現在、分散バージョン管理の分野のリーダーであり、Git を中心に完全なエコシステムが形成されています。 Git を学習するには、まず Git の基本的なワークフローを学習します。 SVN などの従来のバージョン管理システムと比較して、Git は分散バージョン管理用に設計された強力なツールです。 Git を使用するときによく使用されるコマンドには、pull、commit、push などがあり、非常に簡単そうに見えます。ただし、マージ競合が発生する場合は、Git によって競合がマークされ、手動で解決する必要がある場合があります。場合によっては、誤ってコードを間違ったブランチにコミットし、リモート リポジトリにプッシュしてしまうことがあります。別のブランチに切り替える必要がある場合でも、未保存の変更が残っているために Git ではそれができない場合もあります。別のブランチからのコミットを通じてコードにパッチを適用する必要がある場合はどうすればよいでしょうか?この記事では、これらのコマンドを適切に使用すると、Git の適用効率が大幅に向上する 12 の高度な Git コマンドを紹介します。

12 の高度な git コマンド

1. アップストリームの変更をプルするには、マージの代わりにリベースを使用します

ブランチのマージはマージコミットとして記録されますが、これは理にかなっています。たとえば、これは、新しい機能がリリース ブランチにマージされたことを示すために使用できます。ただし、複数のチーム メンバーがプロジェクトで作業し、通常の git pull を使用してブランチを同期すると、コミット タイムラインが不要なマージ コミットで汚染されてしまいます。より良いアプローチは、git rebase を使用してフィーチャー ブランチをマスター ブランチにリベースすることです:

$ git checkout feature
$ git rebase master
ログイン後にコピー

そうすると、フィーチャー ブランチ全体がマスター ブランチの開始点に移動され、マスター ブランチ上のすべての新しいコミットがマージされます。ただし、マージ コミットを使用する場合と比較して、リベースでは元のブランチのコミットごとに新しいコミットを作成することでプロジェクト履歴が書き換えられます。リベースの主な利点は、よりクリーンなプロジェクト履歴が得られることです。さらに、ここではリベースの落とし穴についていくつか説明します。

2. git rebase 実行後にマージ競合を解決する

より大きな能力にはより大きな責任が伴います。 git rebase を実行すると、マージ競合が発生する可能性があります。マージの競合とは、2 つのコミットが同じファイルの同じ行を変更し、Git がどの変更を適用すればよいのかわからないことを意味します。これにより、次のようなエラー メッセージが表示されます:

12 の高度な git コマンド

Git では、競合 (fa39187) の原因となったコミットを修正するための 3 つのオプションが提供されます:

git rebase --abort を実行すると、リベースを完全にキャンセルできます。これを行うと、リベースの変更がキャンセルされ、ブランチが git rebase を実行する前の状態に戻ります。

git rebase --skip を実行すると、コミットを完全に無視できます。こうすることで、問題のコミットによって導入された変更は履歴に追加されません。

競合は、マージ競合と同じ標準手順を使用して解決できます。

3. 変更を一時的に保存します

作業を進めていると、何かと雑な状態になることがよくあります。現時点で別のブランチに切り替える必要がある場合はどうすればよいですか?まだ保存されていない変更があるため、Git ではこれを行うことはできません。率直に言って、中途半端な完成品を提出して、後で修正することは望ましくありません。この問題の解決策は、git stash コマンドを使用することです。 Stash は、作業ディレクトリの現在のステータス (たとえば、変更された追跡ファイルやステージング領域への変更など) を受信し、それを未完了の変更スタックに保存して、後でいつでも変更できるようにします。次のコマンドを使用して作業をステージングできます:

$ git stash
保存された作業ディレクトリとインデックスの状態 WIP on feature: 3fc175f fixracecondition
HEAD is now at 3fc175f fixracecondition

これで、作業ディレクトリはクリーンになりました現在:

$ git status
# On branch feature
nothing to commit, working directory clean
ログイン後にコピー

現時点では、ブランチを安全に切り替えて他のことを行うことができます。ただし、心配しないでください。ステージングされたコミットはまだそこにあります:

$ git stash list
stash@{0}: WIP on feature: 3fc175f fix race condition
ログイン後にコピー

その後、機能ブランチに戻った後、ステージングされたすべての変更を取得できます:

$ git stash pop
On branch feature
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
     modified:   index.html
Dropped refs/stash@{0} (ac2321cc3a33ba712b8e50c99a99d3c20da9d6b8)
ログイン後にコピー

以下に示すように、ステージングに関しては、他にもいくつかのオプションが利用可能です。 :

$ git stash save "describe it"   # give the stash a name
$ git stash clear                # delete a stashed commit
$ git stash save --keep-index    # stash only unstaged files
ログイン後にコピー

4. 特定のリモートブランチをクローンする

リモートリポジトリから特定のブランチをクローンしたい場合はどうすればよいでしょうか?通常は git clone を使用しますが、これを行うと他のすべてのブランチも同様に複製されます。便利な方法は git Remote add を使うことです:

$ git init  
$ git remote add -t-f origin$ git checkout
ログイン後にコピー

5. チェリーピックしたリモートコミットを自分のブランチにマージします

さらに、リモートウェアハウスの特定のコミットだけを自分のブランチにマージしたい場合はどうすればよいでしょうかやれ? git Cherry-pick を使用して、指定された SHA 値を持つコミットを選択し、現在のブランチにマージできます:

$ git cherry-pick
ログイン後にコピー

6. 無関係なローカル リポジトリからパッチを適用します

別の無関係なローカル リポジトリをマージする必要がある場合 適用方法ウェアハウスのパッチを現在のウェアハウスに送信しますか?答えは次のコマンドです:

$ git --git-dir=/.git format-patch -k -1 --stdout| git am -3 -k
ログイン後にコピー

7. 追跡ファイルの変更を無視します

  如果你和你的同事操纵的是相同分支,那么很有可能需要频繁执行git merge或是git rebase。不过,这么做可能会重置一些与环境相关的配置文件,这样在每次合并后都需要修改。与之相反,你可以通过如下命令永久性地告诉Git不要管某个本地文件:

$ git update-index --assume-unchanged
ログイン後にコピー

8. 每隔X秒运行一次git pull

  通常,合并冲突出现的原因在于你正在工作的本地仓库不再反映远程仓库的当前状态。这正是我们为什么每天早晨要首先执行一次git pull的缘故。此外,你还可以在后台通过脚本(或是使用GNU Screen)每隔X秒调用一次git pull:

$ screen
$ for((i=1;i<=10000;i+=1)); do sleep X && git pull; done
ログイン後にコピー

  9. 将子目录分隔为新的仓库

  有时,你可能需要将Git仓库中某个特定的目录转换为一个全新的仓库。这可以通过git filter-branch来实现:

$ git filter-branch --prune-empty --subdirectory-filtermaster
# Filter the master branch to your directory and remove empty commits
Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (89/89)
Ref &#39;refs/heads/master&#39; was rewritten
ログイン後にコピー

  现在,仓库会包含指定子目录中的所有文件。虽然之前的所有文件都会被删除,但他们依旧存在于Git历史中。现在可以将新的本地仓库推送到远程了。

  10. 清理

  有时,Git会提示“untracked working tree files”会“overwritten by checkout”。造成这种情况的原因有很多。不过通常来说,我们可以使用如下命令来保持工作树的整洁,从而防止这种情况的发生:

$ git clean -f     # remove untracked files
$ git clean -fd    # remove untracked files/directories
$ git clean -nfd   # list all files/directories that would be removed
ログイン後にコピー

11. 将项目文件打成tar包,并且排除.git目录

  有时,你需要将项目副本提供给无法访问GitHub仓库的外部成员。最简单的方式就是使用tar或zip来打包所有的项目文件。不过,如果不小心,隐藏的.git目录就会包含到tar文件中,这会导致文件体积变大;同时,如果里面的文件与接收者自己的Git仓库弄混了,那就更加令人头疼了。轻松的做法则是自动从tar文件中排除掉.git目录:

$ tar cJf.tar.xz/ --exclude-vcs
ログイン後にコピー

  12. 查找修改者

  最后,如果出现混乱的情况,你一定想要找出是谁造成的。如果生产服务器宕机,那么找到罪魁祸首是比较容易的事情:只需执行git blame。该命令会显示出文件中每一行的作者,提交hash则会找出该行的上一次修改,还能看到提交的时间戳:

$ git blame
ログイン後にコピー

  当然,Git命令是非常多的,除了上面介绍的12个重要命令外,相信各位InfoQ读者在日常工作过程中也有自己偏爱且好用的一些命令,不妨以评论的形式与其他读者一同分享。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Grayscale Encryption Trust Fundsとは何ですか? Grayscale Encryption Trust Fundsとは何ですか? Mar 05, 2025 pm 12:33 PM

グレイスケール投資:機関投資家が機関や投資家にデジタル通貨投資サービスを提供するための機関投資家が入国します。同社はいくつかの暗号信託を立ち上げました。これは広範な市場の注目を集めていますが、これらの資金のトークン価格に対する影響は大きく異なります。この記事では、Grayscaleの主要なCrypto Trust Fundsの一部を詳細に紹介します。 Grayscale Major Crypto Trust Fundsは、Grayscale Investment(2013年にDigitalCurrencyGroupによって設立された)で利用可能なさまざまなCrypto Asset Trust Fundsを管理し、機関投資家と順応の高い個人を提供する投資チャネルを提供します。その主な資金には、ZCASH(ZEC)、SOL、

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

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

ビットワイズ:企業はビットコインを無視された大きな傾向を購入します ビットワイズ:企業はビットコインを無視された大きな傾向を購入します Mar 05, 2025 pm 02:42 PM

毎週の観察:ビットコインを蓄えている企業 - 醸造の変化毎週のメモの見落とされがちな市場動向をよく指摘します。 MicroStrategyの動きは厳しい例です。多くの人は、「マイクロストラテジーとマイケルセイリャーはすでによく知られていますが、これは真実ですが、多くの投資家はそれを特別なケースと見なし、その背後にあるより深い市場の力を無視しています。このビューは片側です。ここ数ヶ月の予備資産としてのビットコインの採用に関する詳細な研究は、これが孤立したケースではなく、出現している主要な傾向であることを示しています。今後12〜18か月で、何百もの企業が訴訟を起こし、大量のビットコインを購入すると予測しています

SFTを大幅に超えて、O1/DeepSeek-R1の背後にある秘密は、マルチモーダルの大規模モデルでも使用できます SFTを大幅に超えて、O1/DeepSeek-R1の背後にある秘密は、マルチモーダルの大規模モデルでも使用できます Mar 12, 2025 pm 01:03 PM

上海ジョトン大学、上海アイラブ、および香港中国大学の研究者は、Visual Language Big Model(LVLM)のパフォーマンスを大幅に改善するために少量のデータのみを必要とする視覚RFT(視覚エンハンスメントファインチューニング)オープンソースプロジェクトを開始しました。 Visual-RFTは、DeepSeek-R1のルールベースの強化学習アプローチとOpenAIの強化微調整(RFT)パラダイムを巧みに組み合わせて、このアプローチをテキストフィールドから視野に拡張しました。視覚的サブカテゴリ化やオブジェクト検出などのタスクの対応するルール報酬を設計することにより、Visual-RFTは、テキスト、数学的推論、その他のフィールドに限定されているDeepSeek-R1メソッドの制限を克服し、LVLMトレーニングの新しい方法を提供します。 Vis

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

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

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

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

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

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

See all articles