FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
您的足迹: git实用命令
git实用命令

clone仓库

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

查看log

snippet.bash
git log  #查看当前分支log
git log XXX  #查看本地分支XXX的log
git log origin/XXX  #查看远程分支origin/XXX的log

查看分支

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

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

snippet.bash
git checkout -b 本地分支名称 origin/XXX   #假设希望的远程分支全称为:origin/XXX

临时checkout指定版本

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

snippet.bash
git checkout commit_id

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

删除本地分支

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

本地分支关联到远程分支

snippet.bash
git branch --set-upstream-to=origin/XXX 本地分支名	#假设希望的远程分支全称为:origin/XXX

切换到已存在的本地分支

snippet.bash
git checkout 本地分支名称

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

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

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

删除远程分支

snippet.bash
git push origin --delete XXX	#假设希望的远程分支全称为:origin/XXX

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

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

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

snippet.bash
git merge --no-ff -Xignore-space-at-eol some-branch

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

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

如果修改最后一次提交的log,可以使用:

snippet.bash
git commit --amend

其它,情况请阅读《Git修改已经提交的log》。

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

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

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

然后,

snippet.bash
git rebase -i commit_id3

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

临时保存本地修改

snippet.bash
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

撤除本地没有提交的修改

snippet.bash
git checkout 要撤销的文件或文件夹

删除untrack文件和文件夹

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

撤销git commit

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

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

撤销git push

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

方法1:

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

方法2:

snippet.bash
git revert commit_id

git push不输入密码

snippet.bash
git config credential.helper store

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

git客户端重新输入密码

服务端修改密码后,客户需要重新输入密码,否则将提示权限错误:

fatal: Authentication failed for 'https://www.200yi.com/test.git/'

因此需要删除之前登记的凭证:

 git credential-manager delete https://www.200yi.com

git合并指定的commit

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

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

git commit模板

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

snippet.bash
vi ~/.git_commit_template

编写模板,例如:

snippet.bash
[KEYWORDS ] ci-
[TO  SOLVE] X100-
[TEST SUGGESTION]

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

snippet.bash
[commit]
template = ~/.git_commit_template

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

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

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

git log不显示分支名称问题

snippet.bash
git config --global log.decorate true
git config --global color.diff auto
git log --graph --all --simplify-by-decoration --oneline

查询分支创建时间

snippet.bash
git reflog show --date=iso master
git reflog show --date=iso
git reflog --date=local --all  # 全部分支

忽略文件或文件夹

目录中添加文件 .gitignore,内容是需要忽略的文件或文件夹相对路径,例如,忽略 .vscode/ 文件夹,则 .gitignore 文件加入以下行:

.vscode/

强制拉取同步(覆盖)到本地文件夹

远程分支被git push -f覆盖,如何同步到本地分支?

git fetch --all
git reset --hard origin/远程分支名
git pull

修改上次提交的commit信息

git commit --amend --author="fairyfar <fairyfar@msn.com>"

修改写作和提交时间

GIT_COMMITTER_DATE="2021-10-22T15:10:07" git commit --amend --date="2021-10-22T15:10:07"

将作者日期和提交者日期均修改为2021-10-22 15:10:07。

格式化提取文件git最近一次提交时间

git log -1 --date=format:"%Y年%m月%d日" --format="%ad" file-path

命令返回示例:2024年03月23日

The file will have its original line endings in your working directory

git add有时在终端操作这个会提示:

warning: LF will be replaced by CRLF in .....
The file will have its original line endings in your working directory

原因: 这是因为文件中换行符的差别导致的。这个提示的意思是说:会把windows格式(CRLF(也就是回车换行))转换成Unix格式(LF),这些是转换文件格式的警告,不影响使用。git默认支持LF。windows commit代码时git会把CRLF转LF,update代码时LF换CRLF。

解决方法:

git config core.autocrlf false

修改上次提交的作者信息

git commit --amend --author="fairyfar<fairyfar@msn.com>"


打赏作者以资鼓励: