Git 如何先用力拉后用力推
每次我想要推送我的提交(Git 如何先用力拉后用力推,git,git-push,git-pull,Git,Git Push,Git Pull,每次我想要推送我的提交(git commit-m“message”,git push origin),我都会进行一次拉送(git pull origin)。 有没有办法让git在执行推之前做一个拉?(在同一分支上)当且仅当command1成功(基本上返回0)时,如果希望运行command2,请使用夹在它们之间的双符号运行: command1 && command2 并且,要在command1成功后运行command2,或者即使失败了,也要使用分号运行: command1 ;
git commit-m“message”
,git push origin
),我都会进行一次拉送(git pull origin
)。有没有办法让git在执行推之前做一个拉?(在同一分支上)当且仅当
command1
成功(基本上返回0)时,如果希望运行command2
,请使用夹在它们之间的双符号运行:
command1 && command2
并且,要在command1
成功后运行command2
,或者即使失败了,也要使用分号运行代码>:
command1 ; command2
前一个用于git pull和&git push
,后一个用于git pull;日期
在推送之前实际上不需要拉送:如果远程端有本地没有的提交,git推送将失败,并显示以下消息:
Pushing to git@yourserver:<user>/<repo>.git
To git@yourserver:<user>/<repo>.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/BigMeanCat/CMDA'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
一般来说,您可以:
如果拉动失败,将不会执行推送
最后,您可以在bash脚本中组合任意命令序列,名为
git-pullpush
(无扩展,可执行,存储在$PATH
引用的文件夹中)
这将是一个常规的bash脚本(它甚至可以在Windows上工作,因为它将由msysbash解释)
您可以使用git pullpush
(类似别名)调用它。根据OP的评论,他们似乎试图避免在最近的提交和远程提交之间进行合并提交,这通常是在本地和远程历史发生分歧时由git pull
生成的
实现这一点的显式方法是首先获取和重基,最后推送
git fetch
git rebase origin/master
git push
第二种方法是调用git pull时传递--rebase
git pull --rebase
最后,通过设置配置,可以使这成为git pull
的默认行为
git config --global pull.rebase true
Git实现这一点的方法是使用
在您的情况下,您需要转到存储库中的.git/hooks
目录,并添加一个名为pre-push
的文件,该文件是您选择的脚本,例如(本例中为bash)
当您执行git推送时,在实际推送之前,将调用此脚本
显然,这只是一个非常幼稚的例子,但我希望你能理解。此目录中已存在示例。如果仍不清楚,请进行注释。您可以为此创建别名-在git配置文件中添加[alias]mypush=!git pull-r&&git push但是我不知道您是否应该这样做doesairexist&&dobreating这个问题的上下文是什么?您是想在脚本中运行此操作,还是只是在命令行中以交互方式保存键入内容?@merlin2011如果我在不执行pull的情况下提交更改,并且我的队友提交了一些更改,我的代码将自动合并到他的代码中。我不想这样。谢谢@saurav sahu。这是有帮助的,但我想知道如果我忘记了拉
而只是运行了推
,是否有任何方法可以提醒我或自动运行拉
。目前它将其他人的最后一次提交与我的提交合并。好的..我知道..我会检查并让您知道…顺便说一句,据我所知,像git push
这样的空格分隔别名不受支持。git push
如果您没有使用最新的遥控器,它将被拒绝。推一下。推的动作询问是否可以推。如果有一个你不能推的原因,你就不能推。然后你就可以担心该怎么做了。是的,git push会拒绝代码,但当我在拒绝后退出时,我的队友commit将合并到我的commit中。谢谢VonC。这很好,但不是我想要的。必须有一个步骤来提交并为我的提交设置消息。@alivarhoudi这就是为什么我在脚本中提到“您可以添加任何您想要的命令”。这包括您需要的任何步骤。为什么这是一个“非常简单的示例”,即除了您的答案中的内容之外,这个钩子脚本还应该做什么?这是一个非常古老的答案,但我想我的意思是可以添加特定于案例的逻辑-条件、标志等。这个示例很简单,在现实世界中可能会更复杂(但不一定要这样)
git fetch
git rebase origin/master
git push
git pull --rebase
git config --global pull.rebase true
#!/bin/bash
echo "pulling ..."
git pull