2017-03-31 68 views
0

我已經看過所有可能的答案,也有閱讀博客,但我認爲我搞砸了很糟糕。拉開請求打開後如何壓扁提交?

我試過 -

git rebase -i upstream/master

,然後在第一行後更改picksquash,但我得到一次又一次的合併衝突。所以最後我讀了那麼哪些建議這個答案 -

#!/bin/bash 

if [ $# -ne 1 ]; then 
    echo "Missing parameter: number of commits to squash." 
    exit 1 
fi 

echo "Squashing $1 commits..." 
git reset --soft HEAD~$1 
git log --format=%B%n --reverse "[email protected]{1}" -n $1 > _msg.txt 
git commit -t _msg.txt 
rm _msg.txt 
echo "Done!" 

所以,我想git-squash 6,我覺得這事情搞糟了困難。如果您需要更多信息,請詢問。

繼承人的PR -

https://github.com/mushorg/glutton/pull/62

enter image description here

+0

Github有sqashing選項 –

+0

@TusharKotlapure該選項僅適用於我想要的存儲庫的所有者。 – hashcode55

回答

1

我開始與上游資源庫:

$ git clone https://github.com/mushorg/glutton 
$ cd glutton 

而只是爲了讓我的遠程名稱看起來像你的:

$ git remote rename origin upstream 

然後我取你的PR:

$ git fetch upstream pull/62/head 
$ git checkout FETCH_HEAD 

你顯然並不需要這一步,因爲你已經有本地更改。

只是爲了確認我看你是同樣的事情,我看到了以下變化:

$ git log --oneline master.. 
cdbca37 Merge branch 'master' of https://github.com/HashCode55/glutton 
b37aafd SMTP responses fixed and random wait time added 
f25198e supports random wait time for response 
4cfcc1d random removed 
f2bfed7 refactor 
da3dbdb refactor 
3bfb62c removed rand function 
1bb8a43 SMTP responses fixed 
088f6df merged 
a383e09 Revert "Revert "removed"" 
f1bb1c2 Revert "removed" 
97bac3f removed 
97a0408 Changes 

有幾件事情跳出有:

  • 你也許會發現更多的東西如果您在功能分支而不是您自己的master分支上工作,則可管理。也就是說,在開始進行任何更改之前,從git checkout -b my-spiffy-feature開始。如果您將定期向上遊提供服務,如果您的master分支始終反映上游master分支在某個時間點的狀態,那麼您的生活將變得非常簡單,因爲這允許您使用簡單的git pull upstream master更新本地主分支。
  • 避免將代碼合併到您的功能分支。如果您需要合併上游更改,請定期在upstream/master上重新拼版。
  • 避免在功能分支中生成提交提交。只需使用git reset

如果你要按照上述步驟,你會避免所有的衝突和複雜化,讓你到這一點。

壁球所有這些變化可能是由重置當前分支反饋給上游master分支開始最簡單的方法:

$ git reset upstream/master 

這將重置資源庫,但你的工作目錄,以upstream/master分支的狀態。由於它不會修改工作目錄的狀態,這意味着您的所有更改都會保留,但不會保留提交歷史記錄。在這一點上,我們可以看到:

$ git status 
[...] 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: app/server.go 
    modified: smtp.go 

no changes added to commit (use "git add" and/or "git commit -a") 

現在,我們可以創建一個新的提交:

$ git add -u 
$ git commit 

現在你對上游master分支的上方設置了一個承諾。然後,您會強制將此推送到您自己的master分支,以更新PR。 (注意:如果你擔心某些事情會發生,或者失去你的改變或者類似的東西,你可以在新的分支上工作,或者直接製作工作目錄的本地副本,然後替代它。)

+0

這真的幫了很大忙。但我仍然錯過了一些東西。在我的git狀態中,它說 - 「你的分支在13次提交後落後於'origin/master',並且可以被快速轉發。 (使用「git pull」來更新您的本地分支)'以及您的輸出。 – hashcode55

+0

我相信在你的本地倉庫中,'origin'是指*你的* github倉庫('HashCode55/glutton'),事實上你已經截斷了你的歷史回購(因爲'git reset') ,所以沒關係。你應該是'upstream/master'的1個頭,並且運行'git log'應該確認你在當前的'upstream/master'分支上有一個提交,包含你的改變。 – larsks

+0

我已經用我正在談論的錯誤的屏幕截圖更新了問題。 – hashcode55