Git 本地开发个人使用习惯汇总

107 阅读4分钟

Git 本地开发个人使用习惯汇总(持续更新)

上传

单人开发

  • 首先使用git status检查本地branch code状况。
  • 检查需要上传的文件后直接add .或者单独add xxx添加到stage区。
  • 接着使用git commit -m "XXX commit"commit代码。
  • 最后使用git push或者git push origin xxx-branch上传。

多人开发

  • 首先使用git status检查本地branch code状况。
  • 使用git add -u将文件先存到缓存区。
  • 再使用git status检查是否有漏网之鱼的untracked files,如果有,使用git add fileName单独插入。
  • 接着使用git stash save "XXXTag"将stage的code先存起来。
  • 之后使用git pull或者git pull origin/master把远端的code先拉下来。
  • 最后再用git stash pop把刚才存起来的数据拿回来。
  • 这样就可以在本地编译器上进行merge操作,成功compile之后就按照单人开发的最后流程进行上传。
  • 一般会创建新的临时branch,再使用Merge request的工具去合入。
    • 创建临时的branch, git checkout -b temp-branch
    • 上传branch, git push origin temp-branch
    • 如果需要对该分支进行修改,第一次push时,需要git push --set-upstream origin tem-branch

本地合并分支到主分支

  • 首先检查本地分支状态git status,将代码add并commit。
  • 将本地分支切换到主分支git chcekout main-branch
  • 拉取主分支的最新代码git pull origin main-branch,如果之前的本地的main分支已经改过了,那么此处就会出现conflict,需要merge第一次。如果该处的代码改动被放到了本地分支中,计划要在下一步进行合并,那么此处可以直接摒弃掉之前在本地分支的修改,直接选用远端代码即可。
  • 在本地将本地分支合并到主分支git merge local-branch,处理conflict。
  • 使用git status可以查看conflict的文档。

检查

  • git status

    • 最常用的git命令,显示文件的状态,包括Changes to be committedChanges not staged for commitUntracked filesUnmerged paths
    • git status -s简略地展示被修改的文件以及修改的状态,例如:M xxx/xxx/xxx.java代表该文件进行了修改,D xxx/xxx/xxx.java代表该文件被删除。
  • git log

    • 常用于检查branch和commit的状态。
  • git branch -vv

    • 可以显示本地的branch是否和远端的某个branch相连以及和哪一个branch相连。
    • 如果需要使本地某个branch和远端某个branch相连,可以在该branch下,使用 git branch --set-upstream-to=origin/xxxBranch来指定。
  • git reflog

    • 查看所有引用的历史记录。
    • 最上面的纪录就是最新的记录。
    • 最左边的代码代码对应的哈希值。
    • 配合git reset --hard 哈希值可以做到回退到某个时间点。
  • git diff

    • 用于检查所有没有暂存(add到stage)中的修改。
    • git diff com/xxx/xxx/xxx.java 检查特定文件的修改。
    • git diff --stat 简略显示统计修改的文件

.gitignore

一些本地文件,包括local配置,log,target等等不需要上传到git,需要添加.gitignore规则。

  • 找到/创建.gitignore文件

    • 可以用ls列出全部文件寻找,一般git仓库创建的时候会默认创建。
    • 如果没有,手动创建。
  • 在文件中添加对应的规则

    • 忽略后缀文件,例如:*.log
    • 忽略整个文件夹文件,例如: com/example/*
    • 忽略指定文件,例如: com/example/target/xxx.java
  • 上传

    • git add .gitignore
    • git commit -m "add rules to .gitignore commit"
    • git push
  • 清除已经in tracking的文件

    • 对于已经tracking过的文件,直接添加规则在.gitignore中是无效的,必须先清除该文件的tracking才能生效。
    • 清除tracking git rm --cached com/xxx/xxx/xxx.xml
    • 在.gitignore中添加规则。

回退

直接回退上一个git add.

  • git reset

回退文件修改

包括对某个文件的删除(git rm xxx.java),修改和添加,前提是该文件没有添加到stage区。

  • git restore xxx.java

回退stage区

单个文件
  • git restore --stage xxx.java
全部
  • git restore --staged .

修改

修改文件夹名字

  • 一般修改

    • git mv olderFolderName newFolderName
  • 仅涉及到大小写的修改

    • 因为大多数常见文件系统是大小写不敏感的(如 Windows 的 NTFS 和 macOS 的 APFS 默认配置),如果直接修改,git可能不会识别大小写的变化,导致名字修改不生效或者出现重复文件的bug,所以需要更多的步骤。
    • git mv olderFolderName tempFolderName
    • git commit -m "Temporarily rename oldFolder to tempFolder commit"这一步是必须的,因为在大小写不敏感的系统里,不进行这一步commit可能导致git在不识别这次操作,之后找不到文件名字,失去changed的情况。
    • git mv tempFolderName newFolderName
    • git commit -m "Temporarily rename tempFolder to newFolder commit"