하나의 git 명령으로 수행 할 수는 없지만 하나의 bash 줄로 자동화 할 수 있습니다.
한 줄로 모든 지점을 안전하게 업데이트하려면 다음과 같이하십시오.
git fetch --all && for branch in $(git branch | sed '/*/{$q;h;d};$G' | tr -d '*') ; do git checkout $branch && git merge --ff-only || break ; done
설명 :
가독성을 높이기 위해 여러 줄로 나눌 수 있습니다.
git fetch --all && \
for branch in $(git branch | sed '/*/{$q;h;d};$G' | tr -d '*')
do git checkout $branch && \
git merge --ff-only || break
done
git fetch --all && ...
=> 모든 리모컨에서 모든 참조를 가져오고 오류가 없으면 다음 명령을 계속합니다.
git branch | sed '/*/{$q;h;d};$G' | tr -d '*'
=>의 출력으로부터 git branch
, sed
으로 라인을 *
상기 단부 (그래서 현재 브랜치 마지막으로 갱신 될 것이다)로 이동한다. 그런 tr
다음를 제거하십시오 *
.
for branch in $(...) ; do git checkout $branch && git merge --ff-only || break ; done
=> 이전 명령에서 얻은 각 분기 이름에 대해이 분기를 체크 아웃하고 빨리 감기와 병합하십시오. 실패하면 break
이 호출되고 명령이 여기서 중지됩니다.
물론, 당신은 대체 할 수 git merge --ff-only
와 함께 git rebase
당신이 원하는 경우.
마지막으로 bashrc 에 별명으로 넣을 수 있습니다 .
alias git-pull-all='git fetch --all && for branch in $(git branch | sed '\''/*/{$q;h;d};$G'\'' | tr -d "*") ; do git checkout $branch && git merge --ff-only || break ; done'
또는 '와'를 엉망으로 만들거나 편집기에서 구문 가독성을 유지하는 것을 선호하는 경우 함수로 선언 할 수 있습니다.
git-pull-all()
{
git fetch --all && for branch in $(git branch | sed '/*/{$q;h;d};$G' | tr -d '*') ; do git checkout $branch && git merge --ff-only || break ; done
}
보너스:
sed '/*/{$q;h;d};$G'
부분 에 대한 설명을 원하는 사람들을 위해 :
/*/
=>로 줄을 검색하십시오 *
.
{$q
=> 마지막 줄에 있으면 종료합니다 (현재 분기가 이미 목록의 마지막 분기이므로 아무 것도 할 필요가 없습니다).
;h;d}
=> 그렇지 않으면, 보류 버퍼에 행을 저장하고 현재 목록 위치에서 삭제하십시오.
;$G
=> 마지막 행에 도달하면 보류 버퍼의 내용을 추가하십시오.