假设有一个功能分支'my-feature'.在我开发这个功能时,有人将它从'my-feature'合并到'master'中.因为它是一个快进合并,所以没有提交.我所做的一些改变还没有为主人做好准备,当它被推到掌握时它打破了相当多的测试.然而,由于这些变化显然是由我做出的,我被指责,而不是那个进行快速合并的人(无论是谁).
有没有机会找出谁将'my-feature'合并为'master',即使它是一个快速合并?我怎样才能防止将来发生这种情况?
git reflog显然只显示本地发生的事情.我们正在使用gitlab服务器,但我还没有找到一种方法来检查gitlab的存储库的reflog.有任何想法吗?
我想知道在运行merge命令之前是否通过"快进"解析特定合并.
我知道我可以通过"快进"(使用--no-ff选项)专门请求合并不能解决.或者我可以尝试仅通过快进(使用--ff选项)来解决合并.
但有时我想知道在运行它之前是否会通过快进解决特定的合并.我意识到理论上我可以通过挖掘历史树来解决这个问题.而且我也意识到我可以运行合并,看看会发生什么,但如果我决定我更倾向于以其他方式解决合并,这就成了问题,因为我必须撤消合并(通过重新分配分支标签)在ref-log中)并再次执行.
注意:--dry-run问题(是否存在git-merge --dry-run选项?)更多的是关于查看合并中可能存在哪些合并冲突,而不是关于可能通过快进解决的合并.
我安装并配置了自己的Gerrit服务器.我使用web gui为Gerrit创建了一个存储库.我能够使用"git"命令成功克隆这个空的存储库,所以配置似乎没问题.接下来,我:
配置我的访问:git config --global user.email ...,git config --global user.name ...,
添加的远程:git add remote origin myUser@myGitHost:29418/project.git,
创建并提交文件:git add file,git commit -m "first commit".
到现在为止还挺好.
但是,当我尝试将其推送到我的仓库时,我得到输出:
myUser@myGitHost:~/project$ git push origin master
Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 525 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Processing changes: refs: 1, done
To ssh://myUser@myGitHost:29418/project.git
! [remote …Run Code Online (Sandbox Code Playgroud) 我跑git pull两次并得到以下内容:
$ git pull
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (1/1), done.
From git.assembla.com:my-project
da3f54c..bb335a4 master -> origin/master
Updating 5934c67..bb335a4
Fast-forward
$ git pull
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)
如何理解这个输出?
我正在尝试使用我的featureA分支,同时使其与主分支保持同步.
这是场景
git clone ssh://xxx/repo
git checkout -b featureA
$ git add file.txt
$ git commit -m 'adding file'
$ git push origin featureA
Run Code Online (Sandbox Code Playgroud)
同时有几个新的提交被推到了原点大师
git checkout master
git pull origin master
git checkout featureA
git rebase master
git push origin feature A
To ssh://xxx/repo
! [rejected] featureA -> featureA (non-fast-forward)
error: failed to push some refs to 'ssh://xxx/repo'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See …Run Code Online (Sandbox Code Playgroud) 我正在使用git flow方式管理我的仓库中的分支,如下所述:http: //nvie.com/posts/a-successful-git-branching-model/
因此,我应该使用的命令序列如下:
git checkout mybranch
git pull --rebase origin develop
git checkout develop
git merge --no-ff mybranch
Run Code Online (Sandbox Code Playgroud)
但是,有些事情我想以不同的方式做,在某些情况下:
我想保留我的功能分支(mybranch)上的所有提交,但是在合并时将它们混合在一起(或压扁)成一个差异develop.
所以这就是我认为命令序列应该是:
git checkout mybranch
git pull --rebase origin develop
git checkout develop
git merge --no-ff --squash mybranch
Run Code Online (Sandbox Code Playgroud)
如果我要--no-ff与之结合,我会做错事--squash吗?
我犹豫是否尝试这样做源于"挤压"和"保存历史"是如何正交的要求 - 请参阅将我的所有提交(包括合并)压缩到一个提交而不改变历史记录
我的理由是,我想在一个分支(mybranch)上保存历史记录,并在另一个分支(develop)上继续suqash - >因为这些动作是在不同的分支中执行的,这是可以的.
有人可以提供一个简单的例子,说明什么会导致Git推送到中央仓库失败,因为快进不会发生?为了让这种情况发生,本地回购与中央回购国的状态需要是什么样的呢?真的无法想象这个......
我希望git --no-ff在我使用时总是进行merge commit()git merge,但保留默认行为(--ff)git pull.这是可能的(配置)?
我正在尝试使用gitlab-ci为我的团队设置gitlab worflow.我们有一个Gitlab CE版本10.2.4,gitlab CI配置为在每次推送时运行构建.现在我们想将合并请求工作流与受保护的开发和发布分支一起使用.我们的要求是,如果不首先在gitlab-ci上运行以保持这些分支清洁,则不能将代码合并到这些分支中.
由于gitlab似乎没有自动测试合并请求的可能性,我们唯一的选择是使用Merge commit with semi-linear history或者Fast-forward merge.(参见gitlab上的公开问题)
问题是由于这些合并选项需要快进,如果为同一目标分支创建了多个合并请求,则接受一个合并请求会更改目标分支.这会阻止其他合并请求被合并,因为它们不再是快进的.这意味着每次我们接受合并请求时,我们必须将所有其他合并请求与目标分支重新绑定/合并,这非常繁琐.
任何人都Fast-forward merge可以在gitlab上使用选项解释他们如何处理这个多合并请求场景?或者是否有另一种方法可以确保在合并之前测试代码而不需要快进?