我知道有些人git pull --rebase默认使用,有些人坚持不使用它.我相信我理解合并和变基之间的区别,但我试图把它放在上下文中git pull.它只是不想看到很多合并提交消息,还是有其他问题?
git merge和之间有什么区别git rebase?
另外一个问题说,git pull就像是一个git fetch+ git merge.
但是git pullVS git fetch+有git rebase什么区别?
在阅读git pull页面时,它给出了以下严厉的警告git pull --rebase:
这是一种潜在危险的操作模式.它重写了历史,当你已经发布了这段历史时,它并不是一个好兆头.除非您仔细阅读git-rebase(1),否则请勿使用此选项.
在git rebase页面中,它提供了大量描述,但没有这种警告.
另外,我见过有人这么说
git fetch
git rebase
Run Code Online (Sandbox Code Playgroud)
是相同的
git pull --rebase
Run Code Online (Sandbox Code Playgroud)
而其他人说他们略有不同.
真相是什么?
我不明白之间的差别git pull --rebase,并git rebase没有任何其他选择.
我不明白他们是安全的,良好的做法,还是非常危险的.
我可以git pull --rebase在当地做一个破坏历史的承诺吗?
我和同事在同一个分支机构工作.现在我已经提交了一些文件并发送给代码审查,因此还有其他一些同事.现在他在我之前推送他的代码.我现在需要撤回他的更改,然后添加我的更改.但它已经承诺了.
如何获得他的更改,然后添加我的更改,而不会让历史看起来很糟糕,我不得不跳槽?我对git很新.
我重命名了 BitBucket 上的存储库,当我尝试再次推送时出现错误。我重命名了一个存储库,现在看到:
cchilders:~/projects/gitflow_automation (master)
$ showorigin
repository does not exist.
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)
所以我这样做
$ rm -rf .git
$ git init
$ git remote add origin git@bitbucket.org:codyc54321/gitflow_automation.git
Run Code Online (Sandbox Code Playgroud)
这会将新命名的存储库(尽管是相同的存储库,只是新名称)添加到新.git文件中。
然后我做了
cchilders:~/projects/gitflow_automation
$ showorigin
* remote origin
Fetch URL: git@bitbucket.org:codyc54321/gitflow_automation.git
Push URL: git@bitbucket.org:codyc54321/gitflow_automation.git
HEAD branch: master
Remote branch:
master new (next fetch will store in remotes/origin)
cchilders:~/projects/gitflow_automation
$ git pull
remote: Counting objects: 70, done.
remote: Compressing objects: 100% (55/55), done.
remote: Total 70 (delta …Run Code Online (Sandbox Code Playgroud) 所以,我想创建一个拉取请求,它只包含对 file1、file2 和 file3 的更改(即功能的更新)。
我使用的工作流程:
git clone https://github.com/eghm/project.git project-eghm-clean
cd project-eghm-clean
git remote add upstream https://github.com/forkeduser/project.git
git fetch upstream
git merge upstream/master
git push
git branch featurebranch
git checkout featurebranch
#edit files: file1, file2, file3
git add file1
git add file2
git add file3
git commit -m 'updates for feature'
git push --set-upstream origin featurebranch
Run Code Online (Sandbox Code Playgroud)
然后在 github 上我转到我的分叉存储库,选择分支:featurebranch,然后单击拉取请求。该请求包括我通过同步 fork 进行的合并:
我将来如何避免这种情况?
起点:我已经创建了一个分支master并在本地进行了提交。在我的分支工作期间,其他提交已被公关到master......
然后我在本地要做的是git checkout master,git pull然后检查我的分支机构并git rebase master
我的理解是 - 此时 - 我在分支上工作时所做的所有提交都将在这些master提交“之后”应用。
我的理解git pull --rebase是它的作用正如我上面所描述的那样。我的问题是(假设这是正确的)如何知道git pull --rebase我正在基于哪个分支?
在上面的步骤中,我已经重新建立了HEADof 的基础master,而大多数git pull --rebase解释似乎都集中在对同一分支(而不是原始的master)的提交进行重新建立基础。
我的典型步骤明确:
git clone <path>
cd <dir>
git checkout -b feature/my-branch
<make changes>
git add .
git commit -m "some message"
git checkout master
git pull --all
git checkout feature/my-branch
git rebase master
**git …Run Code Online (Sandbox Code Playgroud) 通常,在HG中,我的工作流程是专门使用:
hg pull --rebase
Run Code Online (Sandbox Code Playgroud)
如果我想在两个命令中运行它,我该怎么做?
hg pull
hg rebase <probably with some options?>
Run Code Online (Sandbox Code Playgroud)