Revert "sync with git"

This reverts commit 108b4a9a4f7afa2011614b9a3287119002adc698.
Revert "Revert "sync with git""

This reverts commit 35546af4fcec5c1370d0b33575708edff4466bef.