Git 相关

228 阅读5分钟

截屏2022-03-01 上午11.15.10.png

拉取代码

  • 拉取远程代码 git clone <git代码地址 github.com/…/AAA.git>
  • 查看本地分支和远程分支
    1. cd AA 到工程目录下
    2. git branch -al 查看本地和远程的所有分支
  • 将远程分支和本地分支进行关联 git pull origin master

  • 创建分支 git branch <branch-name>
  • 新建并切换到新建分支上 git checkout -b <branch-name>
  • 提交三部曲
    1. git add . (git add <file>) 添加工作区改动到暂存区
    2. git commit -m <info> 提交暂存区内容到本地分支
    3. git push 提交本地分支日志到远程分支
  • 拉取历史版本
    1. git log 查看需要拉取的历史版本,复制对应的SHA
    2. git branch <new branch-name> <SHA值> 新建分支
    3. git checkout <new branch-name> 切换到新分支
    4. git push origin <new branch-name> 上传新命名的本地分支
    5. git branch --set-upstream-to origin/<new branch-name> 把修改后的本地分支与远程分支关联

  • 删除本地分支
git branch -d \<branch-name\>(当前分支不能是要删除的分支名)
  • 删除远程分支
git push origin --delete \<branch-name\>

修改当前账户用户名

1、查询用户名

git config user.name

2、修改用户名

git config --global user.name ****

3、如果在修改之前已经 push 到了远端,修改后再次 push 会出现冲突

git commit --amend --reset-author --no-edit

撤销/版本回退

1. 未执行git add . 缓存代码时:     a、指定放弃某一文件修改内容:

git checkout -- [文件路径] 

   b、全部放弃修改文件:

git checkout . 

【注意】但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

2. 已执行了git add .的暂存区文件的修改(用本地分支中上一次提交的文件代替暂存区里的文件,不会影响工作区文件)

git reset HEAD -- <filename> (HEAD表示最近一次提交) 
git reset <commit id> -- <filename> (回退到commit_id中的filename版本)
git reset <commit id> (版本回退)

3. 已经用git commit 提交了代码的工作区文件的修改(用暂存区里的文件代替工作区文件)

git checkout -- <filename> git checkout -- . 将当前工作区内容用暂存区内容替代 

a. 回退到上一次commit的状态

git reset --hard HEAD^

b. 回退到任意版本

git reset --hard <commit id> --hard参数会使工作区和暂存区都被恢复到上一次提交时的样子
  • 撤销上一次提交,并将暂存区文件重新提交 git commit --amend

重命名

  • 本地分支(local branch)
git branch -m <old branch-name> <new branch-name>
  • 远程分支(remote branch)
    1. 重命名远程分支对应的本地分支 git branch -m \<old branch-name\> \<new branch-name\> 
    2. 删除远程分支 git push --delete origin \<old branch-name\> 
    3. 上传新命名的本地分支 git push origin \<new branch-name\> 
    4. 把修改后的本地分支与远程分支关联 git branch --set-upstream-to origin/\<new branch-name\>

  • 查看本地仓库所有分支 当前分支带*号
git branch
  • 查看本地及远程仓库所有分支
git branch -a
  • gitk 通过图形界面工具查看版本历史
gitk --all
  • 查看当前分支所有提交历史
git log git log --pretty=oneline 查看历史更直观
  • 查看命令历史,记录了所有分支的所有操作(包括已经被删除的 commit 记录和 reset 的操作)。
git reflog
  • 查看各个分支最后一个提交对象的信息
git branch -v
  • 切换到某个分支
git checkout <branch-name>
  • 查看仓库状态 git status

    1. Untracked files 显示工作区中存在而暂存区中没有的文件,通常为新建的文件
    2. Changes not staged for commit 工作区和暂存区中内容不同的文件。通常是因为修改了文件,显示为modified;以及暂存区中存在但工作区里没有的文件,通常是因为删除了文件,显示为deleted
    3. Changes to be committed 显示的是暂存区里有,但是上一次提交中没有的
  • 本地同步更新远程分支 git pull

隐藏

  • git stash 暂存分支工作状态,隐藏当前分支未提交的变更,已方便切换分支

  • git stash save <save message> 暂存分支工作状态,添加备注,方便查找

  • git stash list 查看分支存储的工作状态

  • git stash apply 恢复分支工作状态,默认恢复第一个存储,即stash@{0}

  • git stash apply stash@{num} 恢复某一个分支工作状态

  • git stash drop 删除分支存储的分支状态

  • git stash pop 恢复并删除分支存储工作状态

合并

  • 开发分支(dev)上的代码达到上线标准后,要合并到master分支
    1. git checkout dev 
    2. git pull 
    3. git checkout master 
    4. git merge dev 
    
    中间如果出现冲突(conflicts)
    1、先解决冲突(resolve)
    2、git add <filePath>
    3、重复步骤12,直到所有冲突都解决了
    4、git commit
    
    5. git push -u origin master
  • 当master代码改动了,需要更新dev上的代码
    1. git checkout master 
    2. git pull 
    3. git checkout dev 
    4. git merge master 
    5. git push -u origin dev
  • 使用rebase进行代码合并
    dev合并到master
    1. git checkout dev
    2. git rebase master
    3. git add .
    4. git rebase --continue
    5. git checkout master
    6. git merge master

git merge 比较粗暴,也是大多数会选择的方式,这种方式可以保证每个 commit 都按照时间顺序排列,但是分支图会非常凌乱,而会引入一次没有意义的 commit。

git rebase 在历史提交记录就是一条线,非常优雅,但存在修改历史commit的风险,并且git log查看日志时commit时间线错乱。

个人倾向于使用 rebase 方法,毕竟 commit 的认知成本摆在那里,而且看着也舒服。不过如果开发人员很多,还是merge吧,毕竟一个个解决冲突会烦死个人

回滚

reset current branch to here => Hard => reset => OK