git config --global --list
git config --local --list
git config --global user.name "your name"
git config --global user.email "your email"
git config --local user.name "your name"
git config --local user.email "your email"
不需要「git push origin xxx」,只要「git push」,2)再也不会遇到「no upstream branch」的报错,也不需要「git push --set-upstream origin test && git push」。因为我们执行 git push 的大部分场景都是 push 到同名的 remote branch
git config --global --add push.default current
git config --global --add push.autoSetupRemote true
git config --unset --global 要删除的配置项
git config --unset --local 要删除的配置项
ssh-keygen -t rsa -C “your email”
cat ~/.ssh/id_rsa.pub
- 填入github ssh
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
git config --global credential.helper store
Basic Commands | Undo Commits | Combine Branches | Remote Server |
---|---|---|---|
git commit | git reset | git merge | git fetch |
git branch | git revert | git rebase | git pull |
git checkout | git push | ||
git checkout -b | git tag |
git clone --recursive [email protected]:fanyixuanf/learningGit.git
git submodule update --init --recursive
git ls-files --others
git checkout -b dev origin/main
git checkout -b dev2 origin/main
git push --delete origin dev2
git push remote :远端分支名
git remote prune orign
git branch -D dev2
git branch -d dev2
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d
git fetch --all
git checkout --track origin/dev
--track
是git checkout -b [branch] [remotename]/[branch]
的简写
On branch dev2
git pull origin dev
拉取错误的分支git reflog
6be641e (HEAD -> dev2, origin/dev2) HEAD@{0}: checkout: moving from dev to dev2
git reset --hard 6be641e
git reset --hard HEAD@{0}
-
//可以先通过下面命令刷新远端分支列表 git remote update origin --prune //更换关联的远端分支 git branch --set-upstream-to=origin/dev dev
-
git reset --hard origin/dev dev
-
// 新建一个分支, 不切换分支 git branch dev1 // 当前分支重置到前一个提交 git reset --hard HEAD^ // or git reset --hard SHACommit // 切换到dev1 git checkout dev1
-
On branch dev git checkout dev1 -- fileName.x
-
// 查看log git log // 把main分支重置到正确的commit上 git reset --hard SHACommit-main // 创建不同的分支为不同的提交(dev) git checkout -b dev git cherry-pick SHACommit-dev // 切换到main分支,创建dev2分支 git checkout main git checkout -b dev2 git cherry-pick SHACommit-dev2
git fetch -p
-
git reflog git checkout -b dev git reset --hard SHACommit
git show
git log -n1 -p
- 未push
git commit --amend --only
- 已push
- 修改commit message后
force push
git commit --amend --only
git push origin dev --force
git push --force-with-lease origin dev
- 修改commit message后
git commit --amend --author "schadenfreude <[email protected]>"
-
git checkout HEAD^ dev2/dev2.md git add -A git commit -m "" git push origin dev
-
git checkout HEAD^ dev2/dev2.md git add -A git commit --amend git push origin dev
- 已push
- 不到万不得已的时候不要这么做
git reset HEAD^ --hard git push -f
- 推荐
git revert SHA of commitid
- 未push
-
git reset --soft HEAD@{1}
-
- 不到万不得已的时候不要这么做
-
git rebase --onto SHA_OF_BAD_COMMIT^ SHA_OF_BAD_COMMIT git push -f
-
- 推荐
git revert SHA of commitid
- 要避免强推
-
To github.com:fanyixuanf/learningGit.git ! [rejected] dev -> dev (non-fast-forward) error: failed to push some refs to 'github.com:fanyixuanf/learningGit.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
git push origin dev -f
orgit push origin mybranch --force
-
git reflog git reset --hard SHA1234
git add --patch filename.x
orgit add -p filename.x
git add -N filename.x
git add -p
-
git commit -m "WIP" git add . git stash git reset HEAD^ git stash pop --index 0
git checkout -b dev1
-
git stash git checkout dev git stash pop
-
# one commit git reset --hard HEAD^ # two commits git reset --hard HEAD^^ # four commits git reset --hard HEAD~4 # or git checkout -f
-
git checkout -p # or git stash -p git reset --hard git stash pop # or git stash -p git stash drop
-
// Git 在进行危险操作的时候会把原始的HEAD保存在一个叫ORIG_HEAD的变量里 git reset --hard ORIG_HEAD
-
// main git checkout dev // dev git rebase -i main git checkout main // main git merge --ff-only my-branch
-
// on branch dev git reset --soft main git commit -am "xxxxx" // or git rebase -i main // or git rebase -i HEAD~2
git merge --no-ff --no-commit dev
- 合并成一次提交
git merge --squash dev
- 有几个正在进行的提交(commit)。这时候不希望把已经推(push)过的组合进来,因为其他人可能已经有提交(commit)引用它们了
git rebase -i @{u}
git log --graph --left-right --cherry-pick --oneline HEAD...feature/dev
git log main ^feature/dev --no-merges
- 继续
git rebase --continue
- 结束
git rebase --abort
git stash
- 排除文件
git stash -u
git stash push path/filename.x
git stash push path/filename.x path/filename1.x
git stash save <msg>
git stash push -m <msg>
-
git stash list git stash apply "stash@{n}" // or 时间线 git stash apply "stash@{2.hours.ago}"
-
git stash create git stash store -m "commit-message" CREATED_SHA
git mv --force name Name
git rm --cached fileName.x
-
git tag -d <tag_name> git push <remote> :refs/tags/<tag_name>
-
git fsck --unreachable | grep tag git update-ref refs/tags/<tag_name> <hash>
git tag
git tag -a v1.0 -m "msg"
git tag v1.0 commitid
git push origin v1.0
git push origin --tags
- 查看所有远端仓库
git remote -v
- 添加远端仓库
git remote add url
- 删除远端仓库
git remote remove remote的名称
- 重命名远端仓库
git remote rename 旧名称 新名称
- 把远端分支的变更拉到本地,且 merge 到本地分支
git pull origin 分支名
- 将本地分支 push 到远端
git push origin 分支名
- 删除远端分支
git push remote --delete 远端分支名
orgit push remote :远端分支名