Open Valuebai opened 5 years ago
【问题场景】本地head-代码不是master,push报错,需要将当前版本设置为master
确保当前head分支(版本)是最新的(且合并master),能够被推倒origin/master没问题的
git checkout master 用“更好的分支”覆盖“master”
git reset --hard better_branch(或者版本号) 强制将推送到远程存储库:
git push -f origin master or git push origin master --force 再推送到远程仓库
【问题场景】git提交时不用输入用户名密码的方法 https://jingyan.baidu.com/article/4b07be3cf27d8148b280f36a.html
【问题场景】git切换分支导致代码丢失找回 使用git reflog查看日志
【问题场景】git branch -vv命令方便部署后确认当前的分支信息
GIT如何创建分支,并且将分支推送到GITHUB上
1. 首先在本地创建分支 git branch 分支名称
如:git branch dev-0.0.1 在本地创建一个名称为dev-0.0.1的分支
2. 将分支推送到远程GITHUB上 git push origin 本地分支名称:远程分支名称
如:git push orgin dev-0.0.1:dev-0.0.1
【问题场景】使用Git删除GitHub的提交历史记录
【问题场景】使用Git为每个项目配置独立的用户名和邮箱 执行ls -all命令,显示所有文件,即可看到.git的隐藏文件夹。通过cd .git 进入该目录,发现该目录下有个config文件,采用 open config 命令打开,添加如下配置:
[user]
name = XXX(自己的名称英文)
email = XXXX(邮箱)
保存,command+s 即可。这时候就为该项目配置了独立的用户名和邮箱,这时提交代码时,提交日志上显示的就是设置的名称,当然github这种会根据设置的邮箱来设置对应的用户名。 当然也可以通过命令行的方式(即要去掉–global参数)去设置单独的git配置,只需要在 .git 文件夹下。 例如执行如下命令:
git config user.name "xxxxx"
【问题场景】github/git 修改已提交记录的作者和邮箱 详情见:https://blog.csdn.net/rain_zhao_0102/article/details/104902117
git checkout master # 切到master
git pull origin master # 拉取更新
git checkout -b newbranch # 新建分之,名称最好起个有意义的,比如jira号等
# 开发中。。。
git fetch origin master # fetch master
git rebase origin/master #
# 开发完成等待合并到master,推荐使用 rebase 保持线性的提交历史,但是记住不要在公众分之搞,如果有无意义的提交也可以用 rebase -i 压缩提交
git rebase -i origin/master
git checkout master
git merge newbranch
git push origin master
# 压缩提交
git rebase -i HEAD~~ # 最近两次提交
# .gitconfig配置用如下配置可以使用pycharm的diff和merge工具(已经安装pycharm)
[diff]
tool = pycharm
[difftool "pycharm"]
cmd = /usr/local/bin/charm diff "$LOCAL" "$REMOTE" && echo "Press enter to continue..." && read
[merge]
tool = pycharm
keepBackup = false
[mergetool "pycharm"]
cmd = /usr/local/bin/charm merge "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
# https://stackoverflow.com/questions/34549040/git-not-displaying-unicode-file-names
# git 显示中文文件名,如果你的文件名有中文会好看很多
git config --global core.quotePath false
# 用来review:
git log --since=1.days --committer=PegasusWang --author=PegasusWang
git diff commit1 commit2
# 冲突以后使用远端的版本: NOTE:注意在 git merge 和 git rebase 中 ours/theirs 含义相反
# rebase 场景下,theirs 实际表示的是当前分之
# merge 场景下相反,theirs 表示的确是远端分之
# https://stackoverflow.com/questions/16825849/choose-git-merge-strategy-for-specific-files-ours-mine-theirs
git checkout --theirs templates/efmp/campaign.mako
# 防止http协议每次都要输入密码:
git config --global credential.helper 'cache --timeout=36000000' #秒数
# 暂存和恢复,当我们需要切分支又暂时不想 git add,可以先把目前的修改咱存起来
git stash
git stash apply
git stash apply stash@{1}
git stash pop # 重新应用储藏并且从堆栈中移走
# 显示 git stash 内容 https://stackoverflow.com/questions/7677736/git-diff-against-a-stash
git stash show -p # see the most recent stash
git stash show -p stash@{1}
# 删除远程分之
git push origin --delete {the_remote_branch}
# 手残 add 完以后输入错了 commit 信息
git commit --amend
# 类似的还可以修改上一个提交者的名字 https://stackoverflow.com/questions/750172/how-to-change-the-author-and-committer-name-and-e-mail-of-multiple-commits-in-gi
git config --global user.name "you name"
git config --global user.email you@domain.com
git commit --amend --reset-author
# 撤销 add (暂存),此时还没有 commit。比如 add 了不该 add 的文件
git reset -- file
git reset # 撤销所有的 add
# 撤销修改
git checkout -- file
# 手残pull错了分支就(pull是先fetch然后merge)。或者 revert 一个失误的 merge
git reset --hard HEAD~
# 如果 pull 产生了 冲突,可以撤销。
git merge --abort
# git rebase 同样可以
git rebase --abort
# How to revert Git repository to a previous commit?, https://stackoverflow.com/questions/4114095/how-to-revert-git-repository-to-a-previous-commit
git reset --hard 0d1d7fc32
# 手残直接在master分之改了并且add了
git reset --soft HEAD^
git branch new_branch # 切到一个新分支去 commit
git checkout new_branch
git commit -a -m "..."
# 或者
git reset --soft HEAD^
git stash
git checkout new_branch
git stash pop
# 如果改了master但是没有add比较简单,三步走
git stash
git checkout -b new_branch
git stash pop
# rename branch
git branch -m <oldname> <newname>
git branch -m <newname> # rename the current branch
# 指定文件类型diff
git diff master -- '*.c' '*.h'
# 带有上下文的diff
git diff master --no-prefix -U999
# undo add
git reset <file>
git reset # undo all
# 查看add后的diff
git diff --staged
# http://weizhifeng.net/git-rebase.html
# rebase改变历史, 永远不要用在master分之,别人有可能使用你的分之时也不要用
# only change history for commits that have not yet been pushed
# master has changed since I stared my feature branch, and I want bo bring my branch up to date with master. - Dont't merge. rebase
# rebase: finds the merge base; cherry-picks all commits; reassigns the branch pointer.
# then git push -f
# git rebase --abort
# 全局 ignore, 对于不同编辑器协作的人比较有用,或者用来单独忽略一些自己建立的测试文件等。
# NOTE: git 支持每个子文件夹下有一个自己的 .gitignore,文件路径也是相对当前文件夹
git config --global core.excludesfile ~/.gitignore_global # 全局忽略一些文件
# 拉取别人远程分支,在 .git/config 里配置好
git fetch somebody somebranch
git checkout -b somebranch origin/somebranch
# prune all the dead branches from all the remotes
# https://stackoverflow.com/questions/17933401/how-do-i-remove-deleted-branch-names-from-autocomplete?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
git fetch --prune --all # 清理本地本删除的远程分之,补全的时候很干净,没有已经删除的分之
# https://stackoverflow.com/questions/1274057/how-to-make-git-forget-about-a-file-that-was-tracked-but-is-now-in-gitignore
# https://wildlyinaccurate.com/git-ignore-changes-in-already-tracked-files/
# 如果一个文件已经被 git 跟踪但是你之后又不想提交针对它的修改了,可以这么做(比如我想修改一些配置,本地 debug 等)
git update-index --assume-unchanged <file> # 忽略一个已经 tracked 的文件,修改后不会被 commit
git update-index --no-assume-unchanged <file> # undo 上一步
# 那如何列出这些文件呢? https://stackoverflow.com/questions/2363197/can-i-get-a-list-of-files-marked-assume-unchanged
git ls-files -v | grep '^[[:lower:]]'
# https://stackoverflow.com/questions/48341920/git-branch-command-behaves-like-less
# 禁止 git brach 的时候使用交互式
git config --global pager.branch false
# git rm file and add, https://stackoverflow.com/questions/9591407/unstage-a-deleted-file-in-git/9591612
# this restores the file status in the index
git reset -- <file>
# then check out a copy from the index
git checkout -- <file>
# git 注意不要把二进制大文件,视频文件等放入到版本库,可能会导致 .git 非常大,删了也无济于事
find . -executable -type f >>.gitignore # https://stackoverflow.com/questions/5711120/gitignore-without-binary-files
# 如何恢复一个已经删除的分之, https://stackoverflow.com/questions/3640764/can-i-recover-a-branch-after-its-deletion-in-git
git reflog # 查找对应 commit hash
git checkout -b branch-name hash
# git 如何使用不同的 committer,除了每个项目和全局可以设置 gitconfig 里的 user 外,可以使用如下方式
# https://stackoverflow.com/questions/4220416/can-i-specify-multiple-users-for-myself-in-gitconfig
# global config ~/.gitconfig
[user]
name = John Doe
email = john@doe.tld
[includeIf "gitdir:~/work/"]
path = ~/work/.gitconfig
# ~/work/.gitconfig
[user]
email = john.doe@company.tld
git - 简明指南 http://rogerdudler.github.io/git-guide/index.zh.html
Git的奇技淫巧 https://github.com/521xueweihan/git-tips
【git设置】 1、 每个项目需要在单独在.git里面的config文件添加下面的代码,设置不同的提交人信息,避免多个账户混乱 [user] name = luhuibo email = luhuibo306@foxmail.com