Git命令操作大全

Git global setup

git config --global user.name "xxx"

git config --global user.email "[email protected]"

Create a new repository

git init

git remote add origin git地址

touch README.md

git add README.md

git commit -m "add README"

git push -u origin master

git remote -v / git remote show origin: 在本地查看git 仓库的远端信息:包括git 地址,仓库情况等

Git 重命名文件

Git mv file_from file_to

Git 日志

git log: 查看所有的commit记录,用Q退出

git log --oneline

git log -p (commitId): 显示内容差,类似于git show

git log -2: 显示最近两次的提交

git show commitId:显示某一次提交的详细信息

git diff 可以查看工作区的修改

git diff --cached 查看暂存区的改动

git reflog: 展示出之前所有的git 操作,可以用于在git reset --hard commitId以后查找出销掉的commitId,便于再次恢复,git delete分支后也可以用来恢复

git reflog show --date=iso: 显示具体提交日期

Git patch

git format-patch commitId:自某次commit以后的所有patch, 但不包括该次的commit

git format-patch -1 commitId:对应于某次commit的patch

合并patch:

在解决完冲突以后, 比如用git add来让git知道你已经解决完冲突了。

如果你发现这个冲突是无法解决的, 要撤销整个am的东西。 可以运行git am –abort,

如果你想只是忽略这一个patch,可以运行git am –skip来跳过这个patch.

Git stash

git stash:将当前工作区的更改进行保存,并且恢复到上一次提交的地方

git stash save "save message" : 执行存储时,添加备注,方便查找

git stash list: 列出缓存列表

git stash show( stash@{$num}): show最近一次(指定)存储

git stash apply(stash@{$num}):应用最近一次(指定)存储

git stash apply --index: 让工作区和暂存区的都和原来保持一致,否则全部回退的暂存区

git stash pop(stash@{$num}):取出并移除最近一次(指定)存储

git stash drop (stash@{$num}) 移除最近一次(指定)存储

git stash clear :删除所有缓存的stash

注:git stash pop和git stash apply的区别:

git stash pop 命令会在 stash 应用之后丢弃(默认情况下指的是最顶部的)stash,而 git stash apply 会将其保留在存储列表中,以备日后重用(或者您可以在之后使用 git stash drop 命令移除此 stash)。

除非 git stash pop 之后存在冲突,在这种情况下,它将不会删除该 stash,而使其行为与git stash apply 的命令完全相同。

Git 合并

  • git merge
    • git merge branch_to / 节点哈希值: merge branch_to 分支代码到当前分支
      • 如果目标分支完全领先于当前分支,则简单合并,不会产生新的提交记录
      • 如果两个分支都有改动,则根据时间顺序将两个分支的commit提交记录合并,根据两个分支的最新节点进行检测,如果有conflict,解决完冲突之后再产生一笔新的提交(可以自定义commit message),没有冲突也会产生一笔新的提交
      • 如果解决完冲突之后当前分支没有额外提交代码,对应的commit记录还是会存在
    • git diff查看冲突,在冲突文件上右击选择resolve conflict,手动解决完冲突后需要git commit
    • gitk用图像显示commit历史。
    • git merge --abort: 撤销git merge,恢复到git merge之前的状态, 只有在merge过程中撤销才会生效
  • git rebase
    • git rebase A:
        • 在B分支上执行 git rebase A 后,将公共节点之后B上的提交都放在A最新提交节点的后面(生成新的提交记录,commit hash会变)
        • Merge会产生一笔提交(commit),如果使用git rebase就不会看到这些提交记录, 需要注意的是conflict的地方上下展示和merge相反,上面的HEAD是目标分支代码,如果解决完冲突之后当前分支没有额外提交代码,则当前分支对应的commit 记录不会存在
        • rebase不会按照时间排序提交记录,当前分支会排在目标分支后面
    • git rebase --onto: 跳过中间某一分支的提交记录将两个分支合并
    • git rebase --skip 则会将引起冲突的commits丢弃掉(慎用!!);
    • git rebase --continue 在手动解决完冲突之后运行该命令不会产生额外的提交,
    • git rebase --abort: 撤销git merge,恢复到git merge之前的状态,只有在merge过程中撤销才会生效
    • git rebase -i :https://blog.csdn.net/FightFightFight/article/details/80850328
  • git cherry-pick commitId: git reset --hard commitId以后如果还想将目前所在的commitId以后提交的的某一次commit记录加进来,就可以用这个命令
  • 最佳实践
    • 本地将目标分支rebase到开发分支,可以保证自己的提交记录一直在最后,然后所有的提交都可以通过git commit --amend --no-edit放在一个提交记录里面
    • 远端merge的时候因为本地完全领先于远端,所以不会产生新的提交记录

Git 撤销

  • git revert commitId: 撤销某次commit提交,并且产生一次新的提交
  • git reset --hard commitId:回退到某次commit提交,commit之后的提交全部清除
  • git reset HEAD~: 回退某次commit的提交内容到工作区
  • git reset HEAD file:将文件由暂存区放回工作区,等价于git restore --staged file
  • git checkout -- file: 撤销文件在工作区的更改

Git branch

  • git clone
    • 拷贝一个远端仓库到本地
  • git fetch, git fetch origin
    • 更新远端仓库的所有分支
  • 查看分支信息
    • git branch -a:查看所有分支,包括本地和远程,可以看见远端删除后的分支
    • git remote show origin查看分支信息
    • git remote prune origin: 删除本地分支存在但是远程分支已经不存在的分支, 前提是本地和远程分支有过关联
    • git branch -r:只查看远程分支
    • git branch:查看本地分支
  • 创建分支
    • git checkout -b branch:从当前分支创建一个新的分支,并且切换到该分支
    • git checkout branch: 从 对应远端分支新建一个本地同名分支,并且切换到该分支
  • 删除分支
    • git branch -d branch(如果是D则为强制删除): 删除本地分支
    • git push origin :branch: 删除远端分支
  • git status
    • 查看当前分支状态,git status -s 命令或 git status –short:更为紧凑的输出
  • git add
    • git add file: 这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。
    • git add . :将工作区的文件全部提交到暂存区
  • git commit
    • git commit -a -m: 合并git add和git commit 命令
    • git commit -m 提交信息
    • git commit –-amend:可以使用上一次提交的message信息,不增加额外的提交记录。
    • git commit --amend --no-edit:省去中间编辑步骤
  • git push
    • git push origin HEAD:feature/My20_02:本地分支名和远端不一样
    • git remote show origin:查看远程分支信息
  • git pull
    • 用git pull --rebase代替git pull,将本地未提交的commit放置在最后

修改.gitignore文件不生效

因为.gitignore只能忽略那些原来没有被track过的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。解决方法就是先把本地缓存删除(改变成未track状态),然后再提交。

git rm --cached --force file

注意:

  1. 在 git 中任何已提交的东西几乎总是可以恢复的。甚至那些被删除的分支中的提交或使用 --amend选项覆盖的提交也可以恢复。然而,任何你未提交的东西丢失后很可能再也找不到了。
  2. 当一个文件在处于工作区或者暂存区时,它可以在所有分支间共享,但是一旦被commit,就不能再被其他分支共享,切换到其他分支时就没有相应的改动了,在push之前对该文件所做的更改都只能在该分支完成。如果远端或者本地两个分支的同一文件不一样,则不能相互切换,需要用到git stash.
  3. 如果不小心commit或者是push了错误的文件,则只需要将正确的再次commit或者push, 会自动merge.

你可能感兴趣的:(操作技巧,git,github)