### clone仓库 ```bash git clone http://fairyfar@xxx.xxx.xxx.xxx:9090/scm/ofs/ofs.git ``` ### 查看log ```bash git log #查看当前分支log git log XXX #查看本地分支XXX的log git log origin/XXX #查看远程分支origin/XXX的log ``` ### 查看分支 ```bash git branch #仅显示本地分支 git branch -a #显示全部分支,含远程分支。 git branch -vv #显示本地分支与远程分支对应关系 ``` ### 从远程分支创建一个本地分支 ```bash git checkout -b 本地分支名称 origin/XXX #假设希望的远程分支全称为:origin/XXX ``` ### 临时checkout指定版本 已知commit id,可以临时checkout该提交。 ```bash git checkout commit_id ``` 当不再需要该临时本地分支时,直接checkout到其它本地分支即可。 ### 删除本地分支 ```bash git branch -D 本地分支名称 #-D是强制删除,会忽略本地修改。 ``` ### 本地分支关联到远程分支 ```bash git branch --set-upstream-to=origin/XXX 本地分支名 #假设希望的远程分支全称为:origin/XXX ``` ### 切换到已存在的本地分支 ```bash git checkout 本地分支名称 ``` ### 从本地分支创建一个远程分支 ```bash git push origin 本地分支名称:XXX #假设希望的远程分支全称为:origin/XXX ``` 这也是push本地commit到远程分支的方法。 ### 删除远程分支 ```bash git push origin --delete XXX #假设希望的远程分支全称为:origin/XXX ``` ### 合并(merge)远程分支到本地分支 ```bash git merge remote_branch #合并可能会产生冲突,需要解决冲突。 ``` ### 合并(merge)分支时忽略行结尾符差异 ```bash git merge --no-ff -Xignore-space-at-eol some-branch ``` -Xignore-space-at-eol这个参数会忽略文件结尾符比较。 ### 修改本地分支log(尚未push到远程分支) 如果修改最后一次提交的log,可以使用: ```bash git commit --amend ``` 其它,情况请阅读《[Git修改已经提交的log](Git修改已经提交的log)》。 ### 合并本地分支的多次提交(commit) 本地开发过程中,可能commit多次,但是后来我们希望将多次commit合并为一个再push到远程分支,表现为log中的多个记录合成一个。 首先, ```bash git log # 查看log,假设commit_id1 和 commit_id2希望合并,那么我需要记住commit_id2后面的commit_id3。 ``` 然后, ```bash git rebase -i commit_id3 ``` 编辑时,按照命令说明修改。保存退出。 ### 临时保存本地修改 ```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 ``` ### 撤除本地没有提交的修改 ```bash git checkout 要撤销的文件或文件夹 ``` ### 删除untrack文件和文件夹 ```bash git clean -df #删除当前目录下untrack文件和文件夹,不包括.gitignore中指定的。 git clean -f #删除当前目录下untrack文件,不包括文件夹和.gitignore中指定的。 git clean -xdf #删除当期目录下的所有untrack的文件和文件夹 ``` ### 撤销git commit 已经commit到本地分支,尚未push到远程分支。 ```bash git reset --soft HEAD^ # HEAD^是上一个版本,也可以写成HEAD~1。 git reset --hard HEAD^ # hard删除工作空间改动代码,撤销git add。 ``` ### 撤销git push 已经push到远程分支,有两种方式撤销。 #### 方法1: 先使用上述撤销commit的方法,然后重新提交。 #### 方法2: ```bash git revert commit_id ``` ### git push不输入密码 ```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合并过来。 ```bash git cherry-pick commit_id # 合并指定的某次commit ``` ### git commit模板 每次commit代码时,都需要按格式填写commit message,因为格式固定,所以我们可以使用commit message template。 创建模板: ```bash vi ~/.git_commit_template ``` 编写模板,例如: ```bash [KEYWORDS ] ci- [TO SOLVE] X100- [TEST SUGGESTION] ``` 然后vi ~/.gitconfig,编辑以下内容: ```bash [commit] template = ~/.git_commit_template ``` 这样,每次git commit会自动应用上述模板。 ### 删除远程分支后,本地还是能看到远程分支名。 ```bash git branch -a # 还是可以看到远程分支名称,但是远程分支已删除。 git remote show origin # 可以查看远程地址,远程分支,还有本地分支与之相对应关系等信息。 git remote prune origin # 本地删除远程不存在的分支 ``` ### git log不显示分支名称问题 ```bash git config --global log.decorate true git config --global color.diff auto git log --graph --all --simplify-by-decoration --oneline ``` ### 查询分支创建时间 ```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 " ``` ### 修改写作和提交时间 ``` 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" ```