35

基本的な質問ですが、これは常に私に起こります:

  • で変更を加えるworking-branch
  • 切り替えるmaster
  • git merge working-branch
  • git push
  • cap deploy(ステージングへ)
  • 新しいお茶を作る

それから私は戻ってきて何か他のことを考え、いくつかの変更を開始します... まだマスターにいる間に。

次のいずれかを行う簡単な方法は何ですか:

  1. マスターでの直接編集を禁止します (おそらく警告)
  2. すべての編集を に移動してworking-branch消去し、master編集を続行できるようにしますworking-branch
  3. 編集をまったく新しいブランチにスピンしてからnew-working-branch破棄するにはworking-branch?

危険を冒して、このページの「ブランチ」セクションの後半で推奨を試みましたが、それは私の編集をすべて消し去ってしまいました!?! おそらく、両方のブランチの aftergit branch dubious-experimentgit checkout masterthegit statusが同一であったためです (マスターでは「クリーン」ではありません)。それでgit reset --hard <SHA1sum>、両方のすべての変更を一掃しました!?!

  git branch dubious-experiment

  M---N-----O----P---Q ("master" and "dubious-experiment")

  git checkout master

  # Be careful with this next command: make sure "git status" is
  # clean, you're definitely on "master" and the
  # "dubious-experiment" branch has the commits you were working
  # on first...

  git reset --hard <SHA1sum of commit N>
4

6 に答える 6

37

あなたの説明から、あなたはまだ変更をコミットしていないと思いますが、それは正しいですか?

はいの場合、ここにあなたの答えがあります:

マスターへの直接編集を防ぐ方法

エディタで設定する必要がありますが、おそらく難しいでしょう。現在のブランチをプロンプトとエディターに表示すると、非常に役立ちます。

変更を新しいブランチに移動してnew-working-branch破棄する方法working-branch

git checkout -b new-working-branch
git add …
git commit -m "mycommit" 

マスターにはまだ何もコミットしていないので、マスターで何も変更する必要はありません。必要に応じて、作業ブランチを破棄できるようになりました。

変更を次の場所に移動する方法working-branch

git checkout -b temp-branch
git add …
git commit -m "mycommit" 
git rebase --onto working-branch master
git checkout working-branch
git reset --hard temp-branch
git branch -d temp-branch

変更が master にある変更と競合しないが、作業ブランチには競合しない場合、これははるかに簡単に実行できます。

git stash
git checkout working-branch
git stash pop
于 2013-01-24T23:03:58.963 に答える
0

私は同様のケースに使用しました:

git branch -f <branch-name>
git checkout <branch-name>

また

git checkout -B <branch-name>

.

どちらのバリアントもbranch-name、ツリーをハードにリセットすることなく、ブランチを現在のコミットに移動します。

于 2013-01-24T17:16:43.493 に答える
0

通常、次の Git 設定をお勧めします。

git config push.default nothing

これにより、プッシュ時に少なくともブランチに名前を付ける必要があります。ローカルでマスターにコミットすることを止めることはありませんが、コミットしていることに気付いたら、他の人に影響を与えることなく、それらのコミットをブランチに移動できます。

于 2013-01-24T17:20:06.820 に答える
-1

$ git status何かを変更する git コマンドを実際に実行する前に、入力する習慣を身につけてください。

それを考えると、git statusコミットの前に実行するため、おそらくファイルを編集しましたが、チェックインしていません。この場合、ブランチを切り替えてからコミットすれば、git は正しいことを行います。

master へのコミットを開始した場合は、次のようにブランチ間でファイルを移動するだけです。

 $ git checkout --patch master <somefile>

同じファイルを master にマージするだけの場合は、master をリセットする必要はありませんが、おそらくまだ何もプッシュしていないので、リモート追跡ブランチにリセットする必要があります...

$ git reset master origin/master
$ git reset stage origin/stage # whatever
于 2013-01-24T17:18:12.427 に答える