私はやりたいのですgit pullが、特定のコミットまでだけです。
A->B->C->D->E->F (Remote master HEAD)
だから私の頭がをlocal master指していると仮定し、私はBまで引っ張りたいと思いEます。私は何をすべきか ?
これは特定のコミットをプルしているのではなく、特定のコミットまでプルアップしています。
私はやりたいのですgit pullが、特定のコミットまでだけです。
A->B->C->D->E->F (Remote master HEAD)
だから私の頭がをlocal master指していると仮定し、私はBまで引っ張りたいと思いEます。私は何をすべきか ?
これは特定のコミットをプルしているのではなく、特定のコミットまでプルアップしています。
git fetchおよびgit merge E。
回答:
git pullがgit fetch後に続くだけgit mergeです。だからあなたができることは
git fetch remote example_branch
git merge <commit_hash>
git merge EマージされますE、そのすべての祖先と一緒にCしてD(gitのはそれを知っているAし、B彼らはあなたのブランチに存在していたため、マージする必要はありません)。の変更のみEが必要な場合は、git cherry-pick E代わりに行う必要があります。
まず、リモートリポジトリから最新のコミットをフェッチします。これはローカルブランチには影響しません。
git fetch origin
次に、リモートトラッキングブランチをチェックアウトし、gitログを実行してコミットを確認します
git checkout origin/master
git log
マージするコミットのコミットハッシュ(または最初の5文字まで)を取得し、そのコミットをマスターにマージします
git checkout master
git merge <commit hash>
git fetchそのようなナンセンスを書く前に、マニュアルを読む必要があります。さらに、元の質問と私の答えを読む必要があります。私の答えに従うと、ユーザーに明示的に指示するので、「履歴に戻る」ことはありませんgit checkout master。全体として、自分の行動について少なくとも50%明確でない場合は、投稿しないでください。
git fetch origin明示的にoriginをフェッチします。
最新のコミットをプルして、必要なコミットまで元に戻すこともできます。
git pull origin master
git reset --hard HEAD~1
master目的のブランチに置き換えます。
git logを使用して、どのコミットに戻したいかを確認します。
git log
個人的には、これは私にとってよりうまくいきました。
基本的に、これは最新のコミットをプルし、手動でコミットを1つずつ元に戻します。コミット履歴を表示するには、gitlogを使用します。
良い点:宣伝どおりに機能します。コミットハッシュを使用したり、不要なブランチをプルしたりする必要はありません。
悪い点:コミットを1つ戻す必要があります。
警告:ローカルの変更はすべてコミット/スタッシュします。これを使用すると、変更--hardが失われるためです。自己責任!
HEAD戻る前に行く必要があるということです-そして、あなたが対立を解決しなければならなかった場合、私は何が起こるかわかりません。しかし、このソリューションはを可能にしgit pull --rebase、言われていることに反して、N前のコミットに直接リセットすることができますgit reset --hard HEAD~N(つまり、3つのコミットの場合git reset --hard HEAD~3)。
git reset --hard SHA、それはあなたが望むコミットにそれをリセットします、逆に数える必要はありません。
コミットをブランチにマージする場合、その間のすべての履歴を取得する必要があります。
観察する:
$ git init ./
/Users/dfarrell/git/demo/.git/に空のGitリポジトリを初期化しました
$ echo'a '>文字
$ git追加文字
$ git commit -m '初期文字'
[マスター(ルートコミット)6e59e76]頭文字
1つのファイルが変更され、1つの挿入(+)
作成モード100644レター
$ echo'b '>>文字
$ git add letter && git commit -m '文字の追加'
[マスター7126e6d]手紙を追加する
1つのファイルが変更され、1つの挿入(+)
$ echo'c '>>文字; git add letter && git commit -m '文字の追加'
[マスターf2458be]手紙を追加する
1つのファイルが変更され、1つの挿入(+)
$ echo'd '>>文字; git add letter && git commit -m '文字の追加'
[マスター7f77979]手紙を追加する
1つのファイルが変更され、1つの挿入(+)
$ echo'e '>>文字; git add letter && git commit -m '文字の追加'
[マスター790eade]手紙を追加する
1つのファイルが変更され、1つの挿入(+)
$ gitログ
コミット790eade367b0d8ab8146596cd717c25fd895302a
著者:ダンファレル
日付:2015年7月16日木曜日14:21:26 -0500
手紙を追加する
コミット7f77979efd17f277b4be695c559c1383d2fc2f27
著者:ダンファレル
日付:2015年7月16日木曜日14:21:24 -0500
手紙を追加する
コミットf2458bea7780bf09fe643095dbae95cf97357ccc
著者:ダンファレル
日付:2015年7月16日木曜日14:21:19 -0500
手紙を追加する
コミット7126e6dcb9c28ac60cb86ae40fb358350d0c5fad
著者:ダンファレル
日付:2015年7月16日木曜日14:20:52 -0500
手紙を追加する
コミット6e59e7650314112fb80097d7d3803c964b3656f0
著者:ダンファレル
日付:2015年7月16日木曜日14:20:33 -0500
頭文字
$ git checkout 6e59e7650314112fb80097d7d3803c964b3656f
$ git checkout 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad
注:「7126e6dcb9c28ac60cb86ae40fb358350d0c5fad」を確認してください。
'切り離されたHEAD'状態にあります。あなたは周りを見回して、実験的にすることができます
変更してコミットします。これで行ったコミットはすべて破棄できます。
別のチェックアウトを実行して、ブランチに影響を与えずに状態を設定します。
作成したコミットを保持するために新しいブランチを作成する場合は、
これを行うには(現在または後で)、もう一度checkoutコマンドで-bを使用します。例:
git checkout -b new_branch_name
HEADは7126e6dになりました...文字を追加します
$ git checkout -b B 7126e6dcb9c28ac60cb86ae40fb358350d0c5fad
新しいブランチ「B」に切り替えました
$ git pull 790eade367b0d8ab8146596cd717c25fd895302a
致命的:「790eade367b0d8ab8146596cd717c25fd895302a」はgitリポジトリではないようです
致命的:リモートリポジトリから読み取ることができませんでした。
正しいアクセス権があることを確認してください
リポジトリが存在します。
$ git merge 7f77979efd17f277b4be695c559c1383d2fc2f27
7126e6d..7f77979を更新しています
早送り
手紙| 2 ++
1つのファイルが変更され、2つの挿入(+)
$猫の手紙
a
b
c
d
このビデオから更新された回答を見つけましたが、受け入れられた回答は私には機能しませんでした。
まず、git clone <HTTPs link of the project>
(またはSSHを使用して)gitから最新のリポジトリのクローンを作成
しgit checkout <branch name>
ます。次に、を使用してdesireブランチに移動し
ます。
コマンドを使用する
git log
最新のコミットを確認します。特定のコミットのshalをコピーします。次に、コマンドを使用します
git fetch origin <Copy paste the shal here>
Enterキーを押した後。コマンドを使用します
git checkout FETCH_HEAD
これで、特定のコミットがローカルで利用できるようになります。何かを変更し、を使用してコードをプッシュしますgit push origin <branch name>。それで全部です。参照用にビデオを確認してください。
これは私のために働きます:
git pull origin <sha>
例えば
[dbn src]$ git fetch
[dbn src]$ git status
On branch current_feature
Your branch and 'origin/master' have diverged,
and have 2 and 7 different commits each, respectively.
...
[dbn src]$ git log -3 --pretty=oneline origin/master
f4d10ad2a5eda447bea53fed0b421106dbecea66 CASE-ID1: some descriptive msg
28eb00a42e682e32bdc92e5753a4a9c315f62b42 CASE-ID2: I'm so good at writing commit titles
ff39e46b18a66b21bc1eed81a0974e5c7de6a3e5 CASE-ID2: woooooo
[dbn src]$ git pull origin 28eb00a42e682e32bdc92e5753a4a9c315f62b42
[dbn src]$ git status
On branch current_feature
Your branch and 'origin/master' have diverged,
and have 2 and 1 different commits each, respectively.
...
これにより、28eb00、ff39e4、およびそれ以前のすべてがプルされますが、f4d10adはプルされません。これにより、pull --rebaseの使用が可能になり、gitconfigのプル設定が尊重されます。これは、基本的に28eb00をブランチとして扱っているために機能します。
私が使用しているバージョンのgitの場合、このメソッドには完全なコミットハッシュが必要です。省略形やエイリアスは使用できません。あなたは次のようなことをすることができます:
[dbn src]$ git pull origin `git rev-parse origin/master^`