git clone http://fairyfar@xxx.xxx.xxx.xxx:9090/scm/ofs/ofs.git
git log #查看当前分支log git log XXX #查看本地分支XXX的log git log origin/XXX #查看远程分支origin/XXX的log
git branch #仅显示本地分支 git branch -a #显示全部分支,含远程分支。 git branch -vv #显示本地分支与远程分支对应关系
git checkout -b 本地分支名称 origin/XXX #假设希望的远程分支全称为:origin/XXX
git branch -D 本地分支名称 #-D是强制删除,会忽略本地修改。
git branch --set-upstream-to=origin/XXX 本地分支名 #假设希望的远程分支全称为:origin/XXX
git checkout 本地分支名称
git push origin 本地分支名称:XXX #假设希望的远程分支全称为:origin/XXX
这也是push本地commit到远程分支的方法。
git push origin --delete XXX #假设希望的远程分支全称为:origin/XXX
git merge remote_branch #合并可能会产生冲突,需要解决冲突。
git merge --no-ff -Xignore-space-at-eol some-branch
-Xignore-space-at-eol这个参数会忽略文件结尾符比较。
本地开发过程中,可能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 要撤销的文件或文件夹
git clean -df #删除当前目录下untrack文件和文件夹,不包括.gitignore中指定的。 git clean -f #删除当前目录下untrack文件,不包括文件夹和.gitignore中指定的。 git clean -xdf #删除当期目录下的所有untrack的文件和文件夹
已经commit到本地分支,尚未push到远程分支。
git reset --soft HEAD^ # HEAD^是上一个版本,也可以写成HEAD~1。 git reset --hard HEAD^ # hard删除工作空间改动代码,撤销git add。
已经push到远程分支,有两种方式撤销。
先使用上述撤销commit的方法,然后重新提交。
git revert commit_id
git config credential.helper store
这样仅在第一次push时输入密码,下次就不用输入了。
服务端修改密码后,客户需要重新输入密码,否则将提示权限错误:
fatal: Authentication failed for 'https://www.200yi.com/test.git/'
因此需要删除之前登记的凭证:
git credential-manager delete https://www.200yi.com
有时我们不希望merge某个分支的全部变更,只是想把某次commit合并过来。
git cherry-pick commit_id # 合并指定的某次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 # 本地删除远程不存在的分支
git config --global log.decorate true git config --global color.diff auto git log --graph --all --simplify-by-decoration --oneline
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
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 log -1 --date=format:"%Y年%m月%d日" --format="%ad" file-path
命令返回示例:2024年03月23日
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>"