git实用命令

由 FairyFar 发布

clone仓库

git clone http://fairyfar@xxx.xxx.xxx.xxx:9090/scm/ofs/ofs.git

查看log

git log  #查看当前分支log
git log origin/feature/XXX  #查看远程分支log

查看分支

git branch  #仅显示本地分支
git branch -a  #显示全部分支,含远程分支。
git branch -vv  #显示本地分支与远程分支对应关系

从远程分支创建一个本地分支

git checkout -b 本地分支名称 origin/feature/XXX

临时checkout指定版本

已知commit id,可以临时checkout该提交。

git checkout commit_id

当不再需要该临时本地分支时,直接checkout到其它本地分支即可。

删除本地分支

git push origin 本地分支名称:feature/XXX  #假设希望的远程分支全称为:origin/feature/XXX

本地分支关联到远程分支

git branch --set-upstream-to=origin/remote_branch  本地分支名

切换到已存在的本地分支

git branch -D 本地分支名称  #-D是强制删除,会忽略本地修改。

从本地分支创建一个远程分支

git push origin 本地分支名称:feature/XXX  #假设希望的远程分支全称为:origin/feature/XXX

这也是push本地commit到远程分支的方法。

删除远程分支

git push origin --delete feature/XXX

合并(merge)远程分支到本地分支

git merge remote_branch  #合并可能会产生冲突,需要解决冲突。

合并(merge)分支时忽略行结尾符差异

git merge --no-ff -Xignore-space-at-eol some-branch

-Xignore-space-at-eol这个参数会忽略文件结尾符比较。

修改本地分支log(尚未push到远程分支)

git commit --amend

合并本地分支的多次提交(commit)

本地开发过程中,可能commit多次,但是后来我们希望将多次commit合并为一个再push到远程分支,表现为log中的多个记录合成一个。
首先,

git log  # 查看log,假设commit_id1 和 commit_id2希望合并,那么我需要记住commit_id2后面的commit_id3。

然后,

git rebase -i commit_id3

编辑时,按照命令说明修改。保存退出。

临时保存本地修改

git stash  #将本地修改(尚未commit)临时保存到stash中
git stash list  #列出所有stash
git stash pop  #恢复stash
git stash apply  #应用stash,会从stash中清除。
git stash show -p SN  #显示索引号为SN的stash记录的diff

撤除本地没有提交的修改

git checkout 要撤销的文件或文件夹

删除untrack文件和文件夹

git clean -df  #删除当前目录下untrack文件和文件夹,不包括.gitignore中指定的。
git clean -f  #删除当前目录下untrack文件,不包括文件夹和.gitignore中指定的。
git clean -xdf  #删除当期目录下的所有untrack的文件和文件夹

撤销git commit

已经commit到本地分支,尚未push到远程分支。

git reset --soft HEAD^  # HEAD^是上一个版本,也可以写成HEAD~1。
git reset --hard HEAD^  # hard删除工作空间改动代码,撤销git add。

撤销git push

已经push到远程分支,有两种方式撤销。

方法1:

先使用上述撤销commit的方法,然后重新提交。

方法2:

git revert commit_id。

git push不输入密码

git config credential.helper store

这样仅在第一次push时输入密码,下次就不用输入了。

git合并指定的commit

有时我们不希望merge某个分支的全部变更,只是想把某次commit合并过来。

git cherry-pick commit_id  # 合并指定的某次commit

git commit模板

每次commit代码时,都需要按格式填写commit message,因为格式固定,所以我们可以使用commit message template。
创建模板:

vi ~/.git_commit_template

编写模板,例如:

[KEYWORDS ] ci-
[TO  SOLVE] X100-
[TEST SUGGESTION]

然后vi ~/.gitconfig,编辑以下内容:

[commit]
template = ~/.git_commit_template

这样,每次git commit会自动应用上述模板。

删除远程分支后,本地还是能看到远程分支名。

git branch -a  # 还是可以看到远程分支名称,但是远程分支已删除。
git remote show origin  # 可以查看远程地址,远程分支,还有本地分支与之相对应关系等信息。
git remote prune origin  # 本地删除远程不存在的分支


打赏作者以资鼓励: